iptables 四表五链
四表五链:
链就是位置:共有五个 进路由 (PREROUTING)、进系统 (INPUT) 、转发 (FORWARD)、出系统 (OUTPUT)、出路由 (POSTROUTING);
表就是存储的规则;数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行、丢弃、转发还是修改等等操作。
具体的四表
表 |
说明 |
filter |
过滤数据包 |
Nat |
用于网络地址转换(IP、端口) |
Mangle |
修改数据包的服务类型、TTL、并且可以配置路由实现 QOS |
Raw |
决定数据包是否被状态跟踪机制处理 |
具体的五链
链 |
说明 |
INPUT |
进来的数据包应用此规则链中的策略 |
OUTPUT |
外出的数据包应用此规则链中的策略 |
FORWARD |
转发数据包时应用此规则链中的策略 |
PREROUTING |
对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理) |
POSTROUTING |
对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理) |
开启内核转发功能
1
| sudo sysctl -w net.ipv4.ip_forward=1
|
或者
1
| echo "1" > /proc/sys/net/ipv4/ip_forward
|
1 2 3 4 5 6 7
| sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
|
使用案例
限制入站,不限制出站
1 2 3 4 5 6 7 8 9
| iptables -P INPUT DROP iptables -P FORWARD DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
|
限制入站和出站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
iptables -A INPUT -s 192.168.1.10 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
|
本地端口转发到本地端口
1 2
| iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22
|
转发请求到其他主机
这是通过本主机做一个跳转,比如访问 10.0.0.102
的 80 端口转发到 10.0.0.103
的 8000 端口
1 2 3 4 5 6 7
|
iptables -t nat -A PREROUTING -4 -p tcp -d 10.0.0.102 --dport 80 -j DNAT --to-destination 10.0.0.103:8000
iptables -t nat -A POSTROUTING -4 -p tcp -d 10.0.0.103 --dport 8000 -j SNAT --to-source 10.0.0.102
|
上面操作完成后,可以使用从 client 请求 10.0.0.102:80
, 但是 Server A
这台机器请求 10.0.0.102:80
不通,如果要实现 Server A
也可以访问 10.0.0.102:80
需要额外执行一下:
1 2
| iptables -t nat -A OUTPUT -4 -p tcp -d 10.0.0.102 --dport 80 -j DNAT --to-destination 10.0.0.103:8000
|
其他操作
操作 |
命令 |
查看 nat 表 |
sudo iptables -t nat -L |
清空 nat 表配置 |
sudo iptables -t nat -F
|
查看 filter 表 |
sudo iptables -L |
清空 filter 表 |
sudo iptables -F |
iptables 持久化
请看 iptables进行持久化配置,重启不丢失
SNAT 和 MASQUERADE 的区别
MASQUERADE 是一种特殊的 SNAT 主要是不用特殊指定修改的源地址。
1 2 3 4 5
| iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
|