02-iptables扩展模块

1. 概述

  • 作用:

-m 指定

  • 语法
iptables -m M_NAME

说明:如果命令行 -p 指明了协议,则不必手动添加

2. icmp 模块

使用-m icmp引用该模块

2.1 示例(禁止本机ping其它主机)

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j REJECT

查下边--icmp-type可知 echo-reply对应的TYPE只为0,因此可以写做:

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 0 -j REJECT

2.2 示例(其他主机ping本机)

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-request -j REJECT

查下边--icmp-type可知 echo-reply对应的TYPE只为8,因此可以写做:

iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8 -j REJECT

2.3 --icmp-type 说明

TYPE CODE Description Query Error
0 0 Echo Reply——回显应答(Ping应答) x
3 0 Network Unreachable——网络不可达 x
3 1 Host Unreachable——主机不可达 x
3 2 Protocol Unreachable——协议不可达 x
3 3 Port Unreachable——端口不可达 x
3 4 Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 x
3 5 Source routing failed——源站选路失败 x
3 6 Destination network unknown——目的网络未知 x
3 7 Destination host unknown——目的主机未知 x
3 8 Source host isolated (obsolete)——源主机被隔离(作废不用) x
3 9 Destination network administratively prohibited——目的网络被强制禁止 x
3 10 Destination host administratively prohibited——目的主机被强制禁止 x
3 11 Network unreachable for TOS——由于服务类型TOS,网络不可达 x
3 12 Host unreachable for TOS——由于服务类型TOS,主机不可达 x
3 13 Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 x
3 14 Host precedence violation——主机越权 x
3 15 Precedence cutoff in effect——优先中止生效 x
4 0 Source quench——源端被关闭(基本流控制)
5 0 Redirect for network——对网络重定向
5 1 Redirect for host——对主机重定向
5 2 Redirect for TOS and network——对服务类型和网络重定向
5 3 Redirect for TOS and host——对服务类型和主机重定向
8 0 Echo request——回显请求(Ping请求) x
9 0 Router advertisement——路由器通告
10 0 Route solicitation——路由器请求
11 0 TTL equals 0 during transit——传输期间生存时间为0 x
11 1 TTL equals 0 during reassembly——在数据报组装期间生存时间为0 x
12 0 IP header bad (catchall error)——坏的IP首部(包括各种差错) x
12 1 Required options missing——缺少必需的选项 x
13 0 Timestamp request (obsolete)——时间戳请求(作废不用) x
14 Timestamp reply (obsolete)——时间戳应答(作废不用) x
15 0 Information request (obsolete)——信息请求(作废不用) x
16 0 Information reply (obsolete)——信息应答(作废不用) x
17 0 Address mask request——地址掩码请求 x
18 0 Address mask reply——地址掩码应答

3. iprange模块

  • 作用
    一次加入范围IP地址

  • 示例

iptables -t filter -I INPUT -m iprange --src-range 192.168.2.20-192.168.2.100 -j REJECT

参数说明

  • --src-range:指定源地址范围。
  • --dst-range:指定目标地址范围。
  • ! --src-range:非指定的源地址。
  • ! --dst-range:非指定的目标地址。

4. multiport 模块

  • 作用

一次加入多个端口(连续或不连续的)

  • 添加不连续端口
iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT
  • 添加连续端口
iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT

5. state 模块

5.1 语法

  • 作用

按链接状态过滤链接

  • 示例
# iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 状态说明
参数 说明
NEW 新生态
ESTABLISHED 连接态
RELATED 衍生态
INVALID 无效态

5.2 完整示例

使用状态防火墙,放行本机FTP服务[被动模式]

  • 设置防火墙规则
iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 21,20 -j ACCEPT
iptables -t filter -A INPUT -j REJECT	
  • 载入nf_conntrack_ftp模块
modprobe nf_conntrack_ftp 
  • 设置模块自动添加

/etc/sysconfig/iptables-config文件中修改如下项:

IPTABLES_MODULES="nf_conntrack_ftp"

如果要添加多个模块,可写为IPTABLES_MODULES="m01 m02 ……"

6. limit模块

6.1 语法

  • 作用

通过令牌桶限制请求数

  • 示例
iptables -t filter -A INPUT -p icmp  -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
  • 说明

--limit 10/minute 每分中产生10个令牌

其他限制条件:x/second 、x/minute、x/hour、x/day

--limit-burst 5 令牌桶中放入5个令牌

6.2 完整示例

  • 为方便演示,先清空防火墙策略,禁止对方ping本机
iptables -F
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
  • 设置防火墙策略

每分钟产生12个令牌(5秒一个),令牌桶中有5个令牌

iptables -t filter -I INPUT -p icmp  -m limit --limit 12/minute --limit-burst 5 -j ACCEPT
  • 测试

从另一台服务器ping改服务器,结果如下

  • 每5秒产生一个令牌,和我们设置的一样
  • 但是一开始并没有连续取到5个令牌,对令牌桶的设置还是不太理解。
64 bytes from 10.10.239.32: icmp_seq=156 ttl=64 time=0.258 ms
64 bytes from 10.10.239.32: icmp_seq=157 ttl=64 time=0.238 ms
64 bytes from 10.10.239.32: icmp_seq=158 ttl=64 time=0.174 ms
From 10.10.239.32 icmp_seq=159 Destination Port Unreachable
From 10.10.239.32 icmp_seq=160 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=161 ttl=64 time=0.233 ms
From 10.10.239.32 icmp_seq=162 Destination Port Unreachable
From 10.10.239.32 icmp_seq=163 Destination Port Unreachable
From 10.10.239.32 icmp_seq=164 Destination Port Unreachable
From 10.10.239.32 icmp_seq=165 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=166 ttl=64 time=0.228 ms
From 10.10.239.32 icmp_seq=167 Destination Port Unreachable
From 10.10.239.32 icmp_seq=168 Destination Port Unreachable
From 10.10.239.32 icmp_seq=169 Destination Port Unreachable
From 10.10.239.32 icmp_seq=170 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=171 ttl=64 time=0.264 ms
From 10.10.239.32 icmp_seq=172 Destination Port Unreachable
From 10.10.239.32 icmp_seq=173 Destination Port Unreachable
From 10.10.239.32 icmp_seq=174 Destination Port Unreachable
From 10.10.239.32 icmp_seq=175 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=176 ttl=64 time=0.426 ms
From 10.10.239.32 icmp_seq=177 Destination Port Unreachable
From 10.10.239.32 icmp_seq=178 Destination Port Unreachable
From 10.10.239.32 icmp_seq=179 Destination Port Unreachable
From 10.10.239.32 icmp_seq=180 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=181 ttl=64 time=0.172 ms
From 10.10.239.32 icmp_seq=182 Destination Port Unreachable
From 10.10.239.32 icmp_seq=183 Destination Port Unreachable
From 10.10.239.32 icmp_seq=184 Destination Port Unreachable
From 10.10.239.32 icmp_seq=185 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=186 ttl=64 time=0.201 ms
From 10.10.239.32 icmp_seq=187 Destination Port Unreachable
From 10.10.239.32 icmp_seq=188 Destination Port Unreachable
From 10.10.239.32 icmp_seq=189 Destination Port Unreachable
From 10.10.239.32 icmp_seq=190 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=191 ttl=64 time=0.330 ms
From 10.10.239.32 icmp_seq=192 Destination Port Unreachable
From 10.10.239.32 icmp_seq=193 Destination Port Unreachable
From 10.10.239.32 icmp_seq=194 Destination Port Unreachable
From 10.10.239.32 icmp_seq=195 Destination Port Unreachable
64 bytes from 10.10.239.32: icmp_seq=196 ttl=64 time=0.266 ms

7. connlimit

7.1 语法

  • 作用
    限同一IP最大连接数

  • 语法示例

仅允许每个客户端有两个ssh连接

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 2 -j ACCEPT

7.2 完整示例( 限同一IP最大连接数为2)

  • 允许连接态和衍生态(必要)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 限同一IP最大连接数为2
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 2 -j ACCEPT 	

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
  • 测试

从客户ssh到该服务器,只允许有两个链接。

8. time模块

  • 作用
    设置规则每天生效时间。

  • 示例

iptables -A INPUT -m time --timestart 8:00 --timestop 15:30 -j ACCEPT

9. comment模块

  • 作用
    添加说明

  • 示例

iptables -A INPUT -s 10.10.237.32 -m comment --comment "禁止源访问" -j REJECT

10. mark模块

iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

posted on 2023-01-30 20:56  运维开发玄德公  阅读(49)  评论(0编辑  收藏  举报  来源

导航