iptables常用扩展模块使用功能
iprange
匹配数据包的IP地址范围
# 源地址IP范围限制
iptables -I INPUT -m iprange --src-range 192.168.1.0-192.168.1.254 -j REJECT
# 目的地址IP范围限制
iptables -I INPUT -m iprange --dst-range 192.168.2.0-192.168.2.254 -j REJECT
string
用于匹配报文中的字符串。如果是在某一台服务器中转数据流量时运行iptables:无法控制https的包(因为无法解析https包),可以控制http的包。如果在NGINX的后面运行iptables:https与http都能控制。
# 拒绝报文中包含Traffic-Control字符串的数据包
iptables -I INPUT -p tcp -m string --string "Traffic-Control" --algo bm -j REJECT
# 当有多个条件需要匹配的时候,创建新链来解决
iptables -N secondarystring
iptables -I INPUT -p tcp -m string --string "Host: js.tv.itc.cn" --algo bm -j secondarystring
iptables -I secondarystring -m string --string "GET /kao.js" --algo bm -j DROP
- 参数
--algo bm
表示使用bm算法去匹配指定的字符串
time
匹配报文到达的时间
# 设置当前机器在 09:00:00 点到 18:00:00 点不允许访问网站
iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT
iptables -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT
- 参数
--weekdays 6,7
表示星期六和星期天--timestart 09:00:00
表示开始时间--timestop 18:00:00
表示结束时间--monthdays 22,23
表示每月的22号和23号--datestart 2020-07-31
表示结束日期--datestop 2020-08-23
表示开始日期
注意:--monthdays
与--weekdays
可以使用 "!" 取反,其他选项不能取反。
connlimit
匹配与服务端的连接数,表示一个客户端IP与服务器的连接数量,这里默认就是针对某一个客户端ip地址的,所有不需要写出客户端的IP地址。
# 一个客户端IP只允许有两个到ssh的连接,超过了2个就不允许连接了
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT