iptables 命令实战详解( 二 )


显示扩展:
iprange扩展模块
用iprange扩展模块可以指定"一段连续的IP地址范围",用于匹配报文的源地址或者目标地址 。
–src-range:源地址范围
–dst-range:目标地址范围
]# iptables -t filter -I INPUT -m iprange --src-range 192.168.1.128-192.168.1.254 -j DROP
string扩展模块
使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件 。
-m string:表示使用string扩展模块
–algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但 是我们必须指定一个 。
–string:用于指定需要匹配的字符串
]# iptables -t filter -I INPUT -m string --algo bm --string “bit” -j REJECT
time扩展模块
过time扩展模块,根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件 。
-m time:表示使用time扩展模块
–timestart:选项用于指定起始时间,00:00:00格式时分秒 。
–timestop:选项用于指定结束时间 。
–weekdays:选项用于用数字指定星期几,还能用缩写表示,例如:Mon, Tue, Wed,Thu, Fri, Sat, Sun
–monthdays,–datestart,–datestop:指定日期范围
~]# iptables -t filter -I OUTPUT -p TCP --dport 80 -m time --timestart 08:55:00 --timestop 17:00:00 -j REJECT
~]# iptables -t filter -I OUTPUT -p TCP --dport 80 -m time --weekdays 1,2,3,4,5 -j REJECT
~]# iptables -t filter -I OUTPUT -p TCP --dport 8080 -m time -monthdays 1,2 -j REJECT
~]# iptables -t filter -I OUTPUT -p TCP --dport 8080 -m time -datestart 2019-04-20 --datestop 2019-04-21 -j REJECT
connlimit扩展模块
connlimit扩展模块,可以限制每个IP地址同时链接到server端的链接数量,注意:我们不用指定IP,其默认就 是针对"每个客户端IP",即对单IP的并发连接数限制 。一般和协议、端口配合使用
–connlimit-above:限制连接上限
–connlimit-mask:按照网段限制连接上限
~]# iptables -t filter -I OUTPUT -p TCP --dport 22 -m connlimit -connlimit-above 2 -j REJECT
limit扩展模块
limit模块对"报文到达速率"进行限制,我们可以以秒为单位进行限制,也可以以分钟、小时、天作为单位进行限
制 。
–limit限制比较有意思,主要用来限制单位时间内可以流入的数据包的数量 。
使用"–limit"选项时,可以选择的时间单位有多种,如下 /second /minute /hour /day
~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/min -j REJECT
tcp-?ags模块
tcp-?ags模块也属于我们之前讲到过的tcp扩展模块中的内容 。--tcp-?ags指的就是tcp头中的标志位,看来,在使用iptables时,我们可以通过此扩展匹配条件,去匹配tcp报 文的头部的标识位,然后根据标识位的实际情况实现访问控制的功能 。在网络部分我们讲了三次握手,四次挥手,讲 了TCP的包头,这里主要指tcp包头中的标志位,SYN,ACK,FIN,RST,URG,PSH 。
他的匹配规则是:“SYN,ACK,FIN,RST,URG,PSH SYN”,怎么来理解,我们可以把这串字符拆成两部分去理解,第一部分为"SYN,ACK,FIN,RST,URG,PSH",第二部分为"SYN" 。
第一部分表示:我们需要匹配报文tcp头中的哪些标志位,那么上例的配置表示,我们需要匹配报文tcp头中的6 个标志位,这6个标志位分别为为"SYN、ACK、FIN、RST、URG、PSH",我们可以把这一部分理解成需要匹配的标 志位列表 。
第二部分表示:第一部分的标志位列表中,哪些标志位必须为1,上例中,第二部分为SYN,则表示,第一部分 需要匹配的标志位列表中,SYN标志位的值必须为1,其他标志位必须为0 。
~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT #匹配第一次握手
~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT #匹配第二次握手
state扩展
state是一个非常重要的扩展,可以基于连接追踪功能去查看每一报文当前所处的状态 。不论什么协议,客户端 第一次访问时,服务器会去内核内存中的追踪表查看他之前是否来过,查不到就证明是第一次来,记录入追踪表,如 果查到以前来过就不检查规则,直接允许访问,这称为连接追踪机制 。在访问量特别大的场景下,比如负载均衡服务 器不建议开启,追踪表大只能记录6万多的条目,访问数超过就会无法记录出错,导致所有的连接失败 。


推荐阅读