iptables是Linux系统中常用的防火墙和网络包过滤工具,它通过规则链(Chain)来管理和过滤网络数据包。iptables中主要有五种规则链,包括INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING,下面我们将分别介绍它们的区别和使用场景,并给出相应的示例。
五链
1. INPUT链
INPUT链用于处理进入本机的数据包,即所有目标地址为本机的数据包都会经过INPUT链进行处理。该链通常用于设置允许或拒绝进入本机的数据包。例如,可以在INPUT链中添加规则,允许来自特定IP地址或端口的数据包进入本机,或者拒绝来自某些IP地址或端口的数据包。
示例:
允许来自192.168.1.100的SSH连接:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
拒绝来自192.168.1.200的Ping请求:
sudo iptables -A INPUT -s 192.168.1.200 -p icmp --icmp-type echo-request -j DROP
2. OUTPUT链
OUTPUT链用于处理从本机发出的数据包,即所有源地址为本机的数据包都会经过OUTPUT链进行处理。该链通常用于设置允许或拒绝从本机发出的数据包。例如,可以在OUTPUT链中添加规则,允许从本机发往特定IP地址或端口的数据包,或者拒绝发往某些IP地址或端口的数据包。
示例:
允许本机向192.168.1.100的HTTP服务器发出请求:
sudo iptables -A OUTPUT -d 192.168.1.100 -p tcp --dport 80 -j ACCEPT
拒绝本机向192.168.1.200的FTP服务器发出请求:
sudo iptables -A OUTPUT -d 192.168.1.200 -p tcp --dport 21 -j DROP
3. FORWARD链
FORWARD链用于处理经过本机转发的数据包,即所有既不是来自本机也不是发往本机的数据包都会经过FORWARD链进行处理。该链通常用于设置允许或拒绝经过本机转发的数据包。例如,可以在FORWARD链中添加规则,允许经过本机转发到特定IP地址或端口的数据包,或者拒绝经过本机转发到某些IP地址或端口的数据包。
示例:
允许将来自192.168.1.100的数据包转发到192.168.2.100:
sudo iptables -A FORWARD -s 192.168.1.100 -d 192.168.2.100 -j ACCEPT
拒绝将来自192.168.1.200的数据包转发到192.168.2.200:
sudo iptables -A FORWARD -s 192.168.1.200 -d 192.168.2.200 -j DROP
4. PREROUTING链
PREROUTING链用于处理经过路由器的数据包,在数据包被路由之前进行处理。该链通常用于设置网络地址转换(NAT)规则,将数据包的源地址或目标地址进行转换。例如,可以在PREROUTING链中添加规则,将目标地址为某个IP地址的数据包转发到另一个IP地址,实现端口映射或负载均衡。
示例:
将来自10.0.0.1的数据包转发到192.168.1.1,并将目标端口从80转换为8080:
sudo iptables -t nat -A PREROUTING -s 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
5. POSTROUTING链
POSTROUTING链用于处理经过路由器的数据包,在数据包被路由之后进行处理。该链通常用于设置网络地址转换(NAT)规则,将数据包的源地址进行转换,实现出口网关的功能。例如,可以在POSTROUTING链中添加规则,将所有经过本机发出的数据包的源地址转换为本机的公网IP地址。
示例:
将所有从本机发出的数据包的源地址转换为公网IP地址:
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
以上就是iptables中五种规则链的区别和使用场景,通过合理设置规则链和相应的规则,可以实现对网络数据包的精细化管理和过滤。
除了五种规则链,iptables还包括五个表(Table),它们分别是Filter表、NAT表、Mangle表、Raw表和Security表。下面我们将分别介绍它们的作用和使用场景,并给出相应的示例。
四表
1. Filter表
Filter表是iptables默认的表,它用于实现数据包过滤和防火墙功能。该表包括三个默认的规则链:INPUT、OUTPUT和FORWARD。通常情况下,我们使用Filter表来设置数据包的过滤规则和防火墙策略。
示例:
允许来自192.168.1.100的SSH连接:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
拒绝来自192.168.1.200的Ping请求:
sudo iptables -A INPUT -s 192.168.1.200 -p icmp --icmp-type echo-request -j DROP
2. NAT表
NAT表用于实现网络地址转换(NAT)功能,包括端口映射、IP地址转换、负载均衡等功能。该表包括三个默认的规则链:PREROUTING、POSTROUTING和OUTPUT。通常情况下,我们使用NAT表来设置网络地址转换规则和实现端口映射等功能。
示例:
将来自10.0.0.1的数据包转发到192.168.1.1,并将目标端口从80转换为8080:
sudo iptables -t nat -A PREROUTING -s 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
3. Mangle表
Mangle表用于修改网络数据包的头部信息,包括TTL值、IP地址、端口号等。该表包括五个默认的规则链:PREROUTING、OUTPUT、INPUT、FORWARD和POSTROUTING。通常情况下,我们使用Mangle表来实现特定的网络功能或优化网络性能。
示例:
将TTL值减1:
sudo iptables -t mangle -A PREROUTING -p icmp -j TTL --ttl-inc -1
4. Raw表
Raw表用于设置网络数据包的原始策略,包括禁止数据包进行连接跟踪、禁止数据包进行源地址验证等。该表包括两个默认的规则链:PREROUTING和OUTPUT。通常情况下,我们使用Raw表来设置网络数据包的原始策略。
示例:
禁止数据包进行连接跟踪:
sudo iptables -t raw -A PREROUTING -j NOTRACK