iptables四个表作用图:
iptables的四个表:
raw表有2个链:prerouting、output
mangle表有5个链:prerouting、postrouting、input、output、forward
nat表有3个链:prerouting、postrouting、output
filter表中有3个链:input、output、forward
1. iptables打印信息解释
字段 | 解释 |
---|---|
target | 代表进行的操作。ACCEPT,放行;REJECT,拒绝;DROP,丢弃 |
prot | 代表使用的数据包协议,主要有TCP、UDP、ICMP |
opt | 额外的选项说明 |
source | 代表此规则是针对哪个来源IP进行限制 |
destination | 代表此规则是针对哪个目标IP进行限制 |
2. 规则查看与清除
规则查看:
iptables [-t tables] [-L] [-nv]
选项 | 参数解释 |
---|---|
-t | 后面接table,例如nat或filter,若省略此项目,则默认使用filter |
-L | 列出目前的table规则 |
-n | 不进行IP与HOSTNAME的反查,显示信息速度会快很多 |
-v | 列出更多信息,包括通过该规则的数据包总位数、相关的网络接口等 |
例:
iptables -L -n //列出filter table 3条链的规则
iptables -t nat -L -n //列出nat table 3条链的规则
规则清除:
iptables-save //列出完整防火墙规则
iptables-save [-t table] //列出NAT表规则 iptables-save [-t table] [-FXZ]
选项 | 解释 |
---|---|
-F | 清除所有已制订的规则 |
-X | 除掉所有用户“自定义”的chain(或者说tables) |
-Z | 将所有的chain的计数与流量统计都归零 |
例:
iptables -F
iptables -X
iptables -Z
3. 定义默认策略(policy)
当数据包不在我们设定的规则之内时,则该数据包的通过与否,是以Policy的设置为准
iptables [-t table] -P [INPUT, OUTPUT, FORWORD] [ACCEPT, DROP]
选项 | 解释 |
---|---|
-P | 定义策略(policy)。注意这个 P 大写 |
ACCEPT | 该数据包可接受 |
DROP | 该数据包直接丢弃,不会让Client端知道为何被丢弃 |
范例:将本机的INPUT设置为DROP,其他设置为ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWORD ACCEPT
4. 数据包的基础比对:IP、网络及接口设备
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源 IP/网络] [-d 目标 IP/网络] -j [ACCEPT|DROP|REJECT|LOG]
选项 | - | 解释 |
---|---|---|
-AI | 链名 | 针对某条链进行规则的“插入”或 “累加” |
-A | 在原规则末尾新增加一条规则 | |
-I | 插入一条规则, 默认是插入变成第一条规则 | |
链 | 有INPUT、OUTPUT、FOPRWARD等,此链名称又与 -io 有关 | |
-io | 网络接口 | 设置数据包进出接口规范 |
-i | 数据包所进入的那个接口,如eth0, lo接口,需与INOUT配合 | |
-0 | 数据包所传出的那个接口,需与OUTPUT配合 | |
-p | 协定 | 设置此数据包适用于那种数据包格式。常用的有:tcp、udp、icmp及all |
-s | 来源 IP/网络 | 设置此规则之数据包来源地,可指定单纯的IP或网络 |
IP | 192.168.0.100 | |
网络 | 192.168.0.0/24、 192.168.0.0/255.255.255.0 均可。 -s ! 192.168.100.0/24 表示不接受 192.168.100.24.0/24 发来的数据包 | |
-d | 目标 IP/网络 | 同 -s ,只不过这里表示的是目标的IP或网络 |
-j | 后面接操作 | 主要的操作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG) |
范例1:设置lo成为受信任的设备,即 进出lo的数据包都予以接受
iptables -A INPUT -i lo -j ACCEPT
范例2:只要是来自内网的(192.168.100.0/24)的数据包就通通接受
iptables -A IMPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT
范例3:接受来自192.168.100.10的数据,丢弃来自192.168.100.230的数据
iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
范例4: 记录某个规则记录
iptables -A INPUT -s 192.168.2.200 -j LOG
只要数据包来自192.168.2.200这个IP时,该数据包的相关信息就会被写入到内核日志文件(var/log/messages)中,然后该数据包会继续进行后续的规则比对。
5. TCP、UDP的规则比对:针对端口设置
iptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源 IP/网络] [--sport 端口范围] [-d 目标 IP/网络] [--drop 端口范围] -j [ACCEPT|DROP|REJECT]
选项 | - | 解释 |
---|---|---|
–sport | 端口范围 | 限制来源的端口号码,端口可以是连续的,例如:1024:65535 |
–dport | 端口范围 | 限制目标端口号码 |
注意:因为仅有TCP与UDP数据包具有端口,因此想要使用-dport、–sport时,需要加上 -p tcp 或 -p udp 的参数才会成功。
范例1:阻挡进入本机 port 21 的数据包
iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
范例2:想连到本台主机的网上邻居(udp port 137, 138 tcp port 139, 445)就放行
iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
范例3:来自 192.168.1.0/24 的 1024:65535 端口的数据包,且想要连接到本机的 ssh port 就予以阻挡
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --port 1024:65534 --dport ssh -j DROP
范例4:将来自任何地方来源 port 1:1023 的主动连接到本机端的 1:1023 连接丢弃
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --drop 1:1023 --syn -j DROP
6. iptables外挂模块: mac 与 state
网络是双向的,当我们放行数据包出去的时候同样也要放行对应的数据包进来,在管理上就有一定的困难。
iptables可以通过一个模块来分析这个想要进入的数据包是否为刚刚发出去的响应,如果是,则予以接受放行。这样就不用考虑远程主机是否进来的问题了。
iptables -A INPUT [-m state] [--state 状态]
选项 | - | 解释 |
---|---|---|
-m | 一些iptables的外挂模块 | |
state | 状态模块 | |
mac | 网卡硬件地址(hardware address) | |
–state | 一些数据包的状态 | |
INVALID | 无效的数据包,例如数据破损的数据包状态 | |
ESTABLISHED | 已经连接成功的连接状态 | |
NEW | 想要建立连接的数据包状态 | |
ESTABLISHED | 这个最常用、表示这个数据包时与主机发送出去的数据包相关 |
范例1:只要以建立连接或与已发出请求相关的数据包就予以通过,不合法的数据包就丢弃
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state --state INVALID -j DROP
范例2:针对局域网内的 aa:bb:cc:dd:ee:ff 主机放开其连接
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
选项 | 解释 |
---|---|
–mac-source | 来源主机的mac |
7. ICMP数据包规则的比对:针对是否相应ping来设计
iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT
选项 | 解释 |
---|---|
–icmp-type | 后面必须要接 ICMP 的数据包类型,也可以使用代号,例如:8 代表 echo request 的意思 |
范例:让 0,3,4, 11,12,14,16,18 的 ICMP type 可以进入本机
[root@F12 ~]# vi somefile
#!/bin/bash
icmp_type="0 3 4 11 12 14 16 18"
for typeicmp in $icmp_type
do
iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done
[root@F12 ~]# vi somefile