icmp的常见连串

其实这个就是icmp的请求响应限制速,就是我们平时所说的ping某一台主机,icmp是一个错误与报告的机制,它所收发的数据包都是用来检测网络状态的,而常见的icmp类别如下:

一、iptables规则的匹配条件类型有三类

1、通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件

2、隐含匹配:要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件

3、显式匹配:要求以“-m
扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

前文中总结了iptables的tcp扩展模块,此处,我们来总结一下另外两个跟协议有关的常用的扩展模块,udp扩展与icmp扩展。

例子:禁止tcp协议的80端口被访问

可以看出icmp包的数据多用于网络的检测,在以上的除了8需要做限制或者是禁用外,其它都不应该关闭。iptables中的意思是对8进行限制流量,因为如果网络中大量的ip对主机进行长时间的ping也会造成DDOS,所以在实际生成环境中我们对icmp
的8的请求都要做相应的限制,当然如果想知道更多的icmp的信息建议用新系统中的man
icmp查看。

二、通用匹配规则

1、协议匹配:-p
协议名

2、地址匹配:-s
源地址、-d 目的地址

3、接口匹配:-i
入站网卡、-o 出站网卡

例1:iptables -A
FORWARD ! -p icmp -j
ACCEPT(除了icmp协议的数据包,别的协议的包都能转发)

例2:在网关型防火墙设置如下:

  ~]#iptables
-I FORWARD -s 192.168.1.11 -o eth1 -p tcp –sport 80 -j ACCEPT

注:192.168.1.11是企业内部的web服务器,eth1是网关防火墙的外网网卡,意思是:源地址为192.168.1.11的这台服务器tcp80端口可以回应外网请求,因为eth1是外网网卡,FORWARD转发链也对其ACCEPT了。

icmp扩展

常用的扩展匹配条件

–icmp-type:匹配icmp报文的具体类型

1
2
3
4
5
6
#示例
iptables -t filter -I INPUT -p icmp -m icmp –icmp-type 8/0 -j REJECT
iptables -t filter -I INPUT -p icmp –icmp-type 8 -j REJECT
iptables -t filter -I OUTPUT -p icmp -m icmp –icmp-type 0/0 -j REJECT
iptables -t filter -I OUTPUT -p icmp –icmp-type 0 -j REJECT
iptables -t filter -I INPUT -p icmp –icmp-type "echo-request" -j REJECT

数据连接:RELATED,ESTABLISHED

最近有朋友在问我我写iptables中有一句什么意思,如下:

三、隐含匹配条件

  之所有叫隐含,是因为它依赖某种协议才能搭配使用。

1、端口匹配:–sport [源端口]       –dport
[目的端口]

例:iptables
-A FORWARD -s 192.168.4.0/24 -p udp –dport 53 -j
ACCEPT(因为设置的链是FORWARD,所以一般是网关型防火墙中设置的,源ip为192的主机可以访问其他网络的udp53端口,注意源和目的的身份切换一定要弄懂)

  iptables
-A FORWARD -d 192.168.4.0/24 -p udp –sport 53 -j ACCEPT(网关型防火墙中设置的,来自于udp53端口的数据包可以访问我们的192主机)

  iptables
-A INPUT -p tcp –dport 20:23 -j
ACCEPT(一般是主机型防火墙设置的,我们电脑的20到23端口可以被访问)

2、TCP标记匹配:–tcp-flags  [检查范围]
[被设置的标记]

例:iptables
-I INPUT -i eth1 -p tcp –tcp-flags SYN,RST,ACK  SYN -j  DROP

检查到有SYN的数据包,就丢弃

3、ICMP类型匹配:–icmp-type  ICMP类型(ICMP类型有8、0、3)

例:
iptables -A INPUT -p icmp –icmp-type 8 -j DROP 
(别人ping我主机的请求被丢弃,8代表请求)

   iptables -A INPUT
-p icmp –icmp-type 0 -j ACCEPT (我ping别人时,回来的包被允许(一去一回才知道ping没ping通),0带表回来的icmp包)

   iptables -A INPUT
-p icmp –icmp-type 3 -j ACCEPT(3也是代表请求,主机不可达,不常用)

   iptables -p
icmp -h (查看ICMP类型)

icmp扩展

最常用的tcp扩展、udp扩展已经总结完毕,现在聊聊icmp扩展,没错,看到icmp,你肯定就想到了ping命令,因为ping命令使用的就是icmp协议。

ICMP协议的全称为Internet Control Message
Protocol,翻译为互联网控制报文协议,它主要用于探测网络上的主机是否可用,目标是否可达,网络是否通畅,路由是否可用等。

 

我们平常使用ping命令ping某主机时,如果主机可达,对应主机会对我们的ping请求做出回应(此处不考虑禁ping等情况),也就是说,我们发出ping请求,对方回应ping请求,虽然ping请求报文与ping回应报文都属于ICMP类型的报文,但是如果在概念上细分的话,它们所属的类型还是不同的,我们发出的ping请求属于类型8的icmp报文,而对方主机的ping回应报文则属于类型0的icmp报文,根据应用场景的不同,icmp报文被细分为如下各种类型。

图片 1图片 2

图片 3

 

从上图可以看出,所有表示”目标不可达”的icmp报文的type码为3,而”目标不可达”又可以细分为多种情况,是网络不可达呢?还是主机不可达呢?再或者是端口不可达呢?所以,为了更加细化的区分它们,icmp对每种type又细分了对应的code,用不同的code对应具体的场景,
 所以,我们可以使用type/code去匹配具体类型的ICMP报文,比如可以使用”3/1″表示主机不可达的icmp报文。

上图中的第一行就表示ping回应报文,它的type为0,code也为0,从上图可以看出,ping回应报文属于查询类(query)的ICMP报文,从大类上分,ICMP报文还能分为查询类与错误类两大类,目标不可达类的icmp报文则属于错误类报文。

而我们发出的ping请求报文对应的type为8,code为0。

 

了解完上述概念,就好办了,我们来看一些应用场景。

假设,我们现在想要禁止所有icmp类型的报文进入本机,那么我们可以进行如下设置。

图片 1图片 5

 

上例中,我们并没有使用任何扩展匹配条件,我们只是使用”-p
icmp”匹配了所有icmp协议类型的报文。

如果进行了上述设置,别的主机向我们发送的ping请求报文无法进入防火墙,我们想别人发送的ping请求对应的回应报文也无法进入防火墙。所以,我们既无法ping通别人,别人也无法ping通我们。

 

假设,此刻需求有变,我们只想要ping通别人,但是不想让别人ping通我们,刚才的配置就不能满足我们了,我们则可以进行如下设置(此处不考虑禁ping的情况)

图片 1图片 7

 

上图中,使用”-m icmp”表示使用icmp扩展,因为上例中使用了”-p
icmp”,所以”-m
icmp”可以省略,使用”–icmp-type”选项表示根据具体的type与code去匹配对应的icmp报文,而上图中的”–icmp-type
8/0″表示icmp报文的type为8,code为0才会被匹配到,也就是只有ping请求类型的报文才能被匹配到,所以,别人对我们发起的ping请求将会被拒绝通过防火墙,而我们之所以能够ping通别人,是因为别人回应我们的报文的icmp
type为0,code也为0,所以无法被上述规则匹配到,所以我们可以看到别人回应我们的信息。

 

因为type为8的类型下只有一个code为0的类型,所以我们可以省略对应的code,示例如下

图片 1

 图片 9

 

除了能够使用对应type/code匹配到具体类型的icmp报文以外,我们还能用icmp报文的描述名称去匹配对应类型的报文,示例如下

图片 1图片 11

 

没错,上例中使用的 –icmp-type “echo-request”与 –icmp-type
8/0的效果完全相同,参考本文最上方的表格即可获取对应的icmp类型的描述名称。

图片 1图片 13

 

注意:名称中的”空格”需要替换为”-“。

 
 

 

iptables -A INPUT -s 172.16.0.100 -mmac –mac-source 00:50:56:12:34:56

类别代码 类别定义
0 Echo Reply(响应消息)
3 Destination Unreachable(目的地不可达)
4 Source Quench(当路由高负载时,用此拒绝源地址发送信息)
5 Redirect(重新定向路由路径)
8 Echo Request(请求响应信息)
B(即11) Time Exceeded(数据包在路由中超时的时候,告知源地址忽略的信息)
C(即12) Parameter Problem(当icmp数据包重复之前的错误时,回复源地址相关的参数错误信息)
D(即13) Timestamp Request(要求对方给出时间戳,用以计算路由时间差异,用来满足同步性协议的要求)
E(即14) Timestamp Reply(时间戳的回复,就是以上的响应回复用的)
F(即15) Info Request(开机取得网络信息的请求,在有rarp协议之前)
G(即16) Info Reply(响应信息请求,以上的请求的回复)
H(即17) Address Mask Request(查询子网掩码的信息)
I(即18) Address Mask Reply(回复查询子网掩码的的信息)

四、显示匹配条件

(1)多端口匹配:-m
multiport –sports 源端口列表

       
  -m multiport
–sports
目的端口列表

  例:iptables
-A INPUT -p tcp -m multiport –dport 25,80,110,143 -j ACCEPT

(2)IP范围匹配:-m
iprange –src-range 
IP范围

  例:iptables
-A FORWARD -p tcp -m iprange –src-range 192.168.4.21-192.168.4.28 -j
ACCEPT

(3)MAC地址匹配:-m
mac –mac-source
MAC地址

  例:iptables
-A INPUT -m mac –mac-source 00:0c:29:c0:55:3f -j DROP

(4)状态匹配:-m
state –state
连接状态

  NEW:与任何连接无关的

  ESTABLISHED:响应请求或已建立连接的

  RELATED:与已有连接有相关性的,如FTP数据连接

  例:只开放本机的Web服务,但对发给本机的TCP应答报文予以放行,其他入站报文均丢弃

  iptables -P
INPUT DROP

  iptables -I
INPUT -p tcp -m multiport –dport 80 -j ACCEPT

  iptables -I
INPUT -p tcp -m state –state ESTABLISHED -j ACCEPT

 

 

  

 

小结

systemctl  disable firewalld.service

图片 14

 

[!] –source-port, –sportport[:port]:匹配报文源端口,可为端口范围

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140256.htm

udp扩展

我们先来说说udp扩展模块,这个扩展模块中能用的匹配条件比较少,只有两个,就是–sport与–dport,即匹配报文的源端口与目标端口。

没错,tcp模块中也有这两个选项,名称都一模一样。

只不过udp扩展模块的–sport与–dport是用于匹配UDP协议报文的源端口与目标端口,比如,放行samba服务的137与138这两个UDP端口,示例如下

图片 1图片 16

 

前文说明过,当使用扩展匹配条件时,如果未指定扩展模块,iptables会默认调用与”-p”对应的协议名称相同的模块,所以,当使用”-p
udp”时,可以省略”-m udp”,示例如下。

图片 1图片 18

 

udp扩展中的–sport与–dport同样支持指定一个连续的端口范围,示例如下

图片 1图片 20

 

上图中的配置表示137到157之间的所有udp端口全部对外开放,其实与tcp扩展中的使用方法相同。

但是udp中的–sport与–dport也只能指定连续的端口范围,并不能一次性指定多个离散的端口,没错,聪明如你一定想到,使用之前总结过的multiport扩展模块,即可指定多个离散的UDP端口,如果你忘了multiport模块怎样使用,请回顾前文。

总之有了前文的基础,再理解上述示例就容易多了,此处不再对udp模块的–sport与–dport进行赘述。

 

–timestop hh:mm[:ss]

-A INPUT -p icmp -m icmp –icmp-type 8 -m limit –limit 2/sec -j ACCEPT

udp扩展

常用的扩展匹配条件

–sport:匹配udp报文的源地址

–dport:匹配udp报文的目标地址

1
2
3
4
#示例
iptables -t filter -I INPUT -p udp -m udp –dport 137 -j ACCEPT
iptables -t filter -I INPUT -p udp -m udp –dport 137:157 -j ACCEPT
#可以结合multiport模块指定多个离散的端口

 

 
 

.状态有如下几种:

指明连续的(但一般不是整个网络)ip地址范围

[!]–destination-ports,–dports  port[,port|,port:port]…:指定多个目标端口,这个配置是禁止别的主机来访问本主机的这些端口。控制别的主机来访问本主机的指定端口

.3、mac扩展

# -s 172.16.0.0/16表示禁止172.16.0.0/16这个网段的主机来访问

[!] –monthdays day[,day…]每个月的几号

示例:

/proc/sys/net/nf_conntrack_max

–tcp_flagsALL NONE

ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态

iptables命令本身就带有这些功能,不需要添加模块。

kmp:Knuth-Pratt-Morris

iptables -P INPUT DROP

#拒绝源ip172.16.0.100的网卡mac为00:50:56:12:34:56的访问

iptables-A INPUT -s 172.16.0.100 -jREJECT

#以下将本机将拒绝去往172.18.50.60-172.18.50.80ssh连接80端口的访问

iptables  –IINPUT -d LocalIP  -p tcp  -m state –state
  RELATED,ESTABLISHED -j ACCEPT

.(2)放行请求报文:

#以下命令禁止了主机去ping其他主机,因为这样该机器就不能收到其他主机发回来的应答的ping包。

[!] –mac-source XX:XX:XX:XX:XX:XX

iptables  -I OUTPUT -s LocalIP  -p tcp-m state –state  ESTABLISHED -j
ACCEPT

–tcp-flags SYN,ACK,FIN,RST
SYN表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0

yum install vsftpd

iptables -R INPUT 1 -mtime –weekdays Wed,Fr,Sa –timestart 09:00
–timestop 12:55 -p tcp –dport 80-j REJECT

.5、time扩展

iptables-A INPUT -s 172.16.0.0/16 -d172.16.100.10 -p tcp  -m
multiport–dports  20:22,80 -j ACCEPT

.[!] –state state

iptables -F

iptables -A INPUT -s172.18.50.75  -p tcp -m multiport–sports 80,21 -j
REJECT

[!] -s, –sourceaddress[/mask][,…]:源IP地址或范围

[!] –source-port,
–sportport[:port]:匹配报文的源端口;可以是端口范围

mask需检查的标志位列表,用,分隔

.已经追踪到的并记录下来的连接信息库

iptables -A INPUT 2 -p icmp -j REJECT

#以下语句本机将拒绝来自172.18.50.60-172.18.50.80的ssh连接和80端口的访问

这里可以用!感叹号表示取反,如下语句表示仅允许192.168.32.65这个ip,其他的ip都拒绝了。注意,以下的语句如果192.168.32.65不是本机ip的话,则此次连接就会被拒绝。这个要注意。

匹配条件分为基本和扩展的条件

开放被动模式的ftp服务示例

iptables -A INPUT -p icmp–icmp-type 0 -j REJECT

2实验环境准备:

对报文中的应用层数据做字符串模式匹配检测

iptables -A INPUT -miprange –src-range 172.18.50.60-172.18.50.80 -p tcp
-m multiport –dports22,80 -j REJECT

两个选项要一起使用

.解决方法两个:

[!] –tcp-flags mask comp

.Centos6:

iptables -A INPUT -p tcp–dport 22 -m connlimit –connlimit-above 1 -j
REJECT

iptables -A INPUT -p icmp–icmp-type 8 -j REJECT

#插入第2条记录,拒绝所有的icmp请求包

vi /etc/sysctl.conf

报文流入环节,只应用于INPUT、FORWARD、PREROUTING链