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