首页 > 系统相关 >IPtables的匹配条件

IPtables的匹配条件

时间:2022-10-26 15:23:05浏览次数:56  
标签:IPtables iptables 匹配 -- 报文 指定 条件 icmp

iptables的匹配条件

  • 基本匹配条件:直接能用的条件

  • 扩展匹配条件:需要调用对应的扩展模块

iptables的基本匹配条件

  • 源地址

  • 目标地址

  • 网卡名称

  • 协议类型

源地址和目标地址

使用-s选项来指定源地址,可以是网段或者是一台具体的主机。多个地址或者网段用逗号隔开。

使用-d选项来指定目标地址,可以是网段或者是一台具体的主机

说明:

  • 不指定任何目标地址,则目标地址默认为0.0.0.0/0,同理,如果我们不指定源地址,源地址默认为0.0.0.0/0,0.0.0.0/0表示所有IP

  • 只能表示离散的地址(单个地址逗号隔开),不能表示一个连续的地址(例如10.0.0.11-10.0.0.19)

#范例:来自10.0.0.11这个设备的数据表都丢弃
[root@CentOS8 ~]# iptables -t filter -I INPUT -s 10.0.0.11 -d 10.0.0.10 -j DROP

网卡名称

有多块网卡时,指定从那块网卡流入或者流出。

-i: 本机有多个网卡时,我们可以使用 -i 选项去匹配报文是通过哪块网卡流入本机

-o: 当主机有多块网卡时,可以使用-o选项,匹配报文将由哪块网卡流出

#-i选项只能用于PREROUTING链、INPUT链、FORWARD链,那么-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链。

协议类型

匹配不同协议类型的数据包,使用-p参数来匹配指定的协议类型。

#例如: 匹配到来自10.0.0.11这个设备的tcp数据包就拒绝
[root@CentOS8 ~]# iptables -t filter  -I INPUT  -s 10.0.0.11 -d 10.0.0.10 -p tcp -j REJECT
#centos6中,-p选项支持如下协议类型:
tcp, udp, udplite, icmp, esp, ah, sctp

#centos7中,-p选项支持如下协议类型:
tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

#当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。

iptables的扩展匹配条件

需要调用指定的扩展模块才能使用的匹配条件。

扩展匹配条件分为:

  • 隐式扩展:和协议名称一样的模块,使用-p执行协议类型的时候,会自动分配一个同名的模块。

  • 显示扩展:需要使用 -m 参数手动指定模板才能使用

隐式扩展

和协议同名的扩展模块:只需要使用-p选项指定协议,会自动调用同名的扩展模块。

  • tcp

  • udp

  • icmp

tcp 协议的扩展选项:

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围 #[!] 表示可以取反

[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
#范例:拒绝外来报文的目标端口为本机的22号端口
[root@CentOS8 html]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 -j  DROP

#注意
1.-m tcp表示使用tcp扩展模块,–dport表示tcp扩展模块中的一个扩展匹配条件

2.使用 -p 指定报文协议,但是没有使用 -m 指定扩展模块时,会默认使用和协议名称相同的模块

3.连续的端口表示方法: num1:num2

udp 协议的扩展选项:

[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围

[!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围

icmp 协议的扩展选项:

ICMP协议:Internet Control Message Protocol,翻译为互联网控制报文协议,它主要用于探测网络上的主机是否可用,目标是否可达,网络是否通畅,路由是否可用等
[!] --icmp-type {type[/code]|typename}
 type/code
 0/0   echo-reply icmp应答
 8/0   echo-request icmp请求

使用 –icmp-type 表示根据具体的type与code去匹配对应的icmp报文

ping回应报文,它的type为0,code也为0

ping请求报文对应的type为8,code为0
#范例:禁止所有icmp类型的报文进入本机
[root@CentOS8 ~]# iptables -t filter  -I INPUT  -p icmp -j REJECT
#范例:实现能ping通别人,但是不想让别人ping通我们
[root@CentOS8 ~]# iptables -t filter  -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT

–icmp-type 8/0 表示icmp报文的type为8,code为0才会被匹配到,也就是只有ping请求类型的报文才能被匹配到

我们之所以能够ping通别人,是因为别人回应我们的报文的icmp type为0,code也为0,所以无法被上述规则匹配到,所以我们可以看到别人回应我们的信息

显式扩展模块

  • multiport:可以指定离散的端口号,使用逗号隔开

  • iprange:指定一个连续的ip地址范围

  • mac

  • string:匹配含有指定字符串的报文

  • time:匹配指定时间段的报文

  • connlimit

  • limit

  • state

iprange扩展模块:

两个扩展匹配条件:

–src-range:

–dst-range

#例如:
[root@CentOS8 html]# iptables -t filter  -I INPUT -m iprange --src-range 10.0.0.10-10.0.0.13 -j DROP

string模块:

常用扩展匹配条件:

–algo:指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项。

–string:指定需要匹配的字符串
#例如: #含有hello1这个字符串的报文就丢弃掉
[root@CentOS8 html]# iptables -t filter  -I INPUT -m  string --algo bm --string "hello1" -j DROP

#范例:禁止访问谷歌
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm  --string "google" -j REJECT

time模块:根据将报文到达的时间与指定的时间范围进行匹配

(注意:CentOS 8 此模块有问题)

#常用扩展匹配条件如下:
–timestart:用于指定时间范围的开始时间,不可取反

–timestop:用于指定时间范围的结束时间,不可取反

–weekdays:用于指定”星期几”,可取反

–monthdays:用于指定”几号”,可取反

–datestart:用于指定日期范围的开始日期,不可取反

–datestop:用于指定日期范围的结束时间,不可取反

范例:每天早上9点到下午6点不能看网页

[root@CentOS8 html]# iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT

connlimit扩展模块:限制每个IP地址同时链接到server端的链接数量

–connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。

–connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制
#范例:限制每个ip地址(客户端)只能开启两个ssh连接到service
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

state扩展模块:用来识别报文是主动发出去的还是被动接收的。

state连接的概念:两台机器能进行正常的通信就算建立了连接。

state连接的状态:

NEW:连接中的第一个包,状态就是NEW,

ESTABLISHED:我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立。

RELATED:有关系的报文

INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID

UNTRACKED:报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接

范例:实现只有回应我们的报文能够通过防火墙,如果是别人主动发送过来的新的报文,则无法通过防火墙

[root@centos8 ~]#iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 

[root@centos8 ~]#iptables -A INPUT -m state --state NEW -j REJECT

标签:IPtables,iptables,匹配,--,报文,指定,条件,icmp
From: https://www.cnblogs.com/heyongshen/p/16828512.html

相关文章