iptables
一、简介
** iptables** 是 Linux 系统中一个用于配置和管理网络包过滤规则的工具。它是一个强大的防火墙工具,用于控制进出系统的网络流量,提供了网络安全性和数据包控制的手段。iptables 允许管理员定义规则,控制数据包如何在网络接口之间传输,以及允许或拒绝数据包的流动。
概念和用途:
-
**数据包过滤:**iptables 可以根据 IP 地址、端口号、协议类型等信息过滤进出系统的数据包。这使得管理员可以根据需要限制特定类型的流量,增强网络安全性。
-
**网络地址转换 (NAT):**iptables 能够实现网络地址转换,将内部网络上的私有 IP 地址映射到公共 IP 地址上,从而允许内部网络中的设备访问互联网。
-
**端口转发(Port Forwarding):**iptables 可以配置端口转发规则,将特定端口上的流量重定向到内部网络的其他设备上。这在构建服务时非常有用,可以将特定端口上的请求转发到内部服务器。
-
**连接追踪:**iptables 能够追踪网络连接的状态,允许建立与已有连接相关的规则。例如,只允许响应已建立连接的数据包通过。
-
**防御分布式拒绝服务 (DDoS) 攻击:**iptables 可以配置规则以缓解特定类型的 DDoS 攻击,限制来自特定 IP 地址的连接数或流量。
-
**包重排:**iptables 允许对数据包进行重排,例如,重排数据包的顺序,或者修改数据包中的特定字段。
二、使用示例
以下是一个简单的 iptables 规则示例,该规则允许所有本地系统的入站和出站流量,但拒绝所有来自外部 IP 地址的入站流量:
bashCopy codesudo iptables -A INPUT -i lo -j ACCEPT # 允许本地回环接口的流量
sudo iptables -A INPUT -j DROP # 拒绝所有其他入站流量
sudo iptables -A OUTPUT -j ACCEPT # 允许所有出站流量
-
清空所有规则和链:
cssCopy codeiptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
这些命令会清空所有的防火墙规则和链,并将默认策略设置为允许所有的数据包。
-
允许特定端口的进入流量:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
这个命令会允许 TCP 端口
80
的进入流量。 -
允许特定IP地址的进入流量:
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
这个命令会允许来自 IP 地址
192.168.1.1
的所有进入流量。 -
允许特定网段的进入流量:
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
这个命令会允许来自
192.168.1.0/24
网段的所有进入流量。 -
拒绝特定端口的进入流量:
iptables -A INPUT -p tcp --dport 22 -j DROP
这个命令会拒绝 TCP 端口
22
的进入流量。 -
进行网络地址转换(NAT):
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
这个命令会将出口网络接口
eth0
上的数据包进行 NAT 转换。 -
设置端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
这个命令会将所有进入端口
80
的数据包转发到内部 IP 地址192.168.1.1
的8080
端口。 -
限制特定IP地址的连接数:
iptables -A INPUT -s 192.168.1.1 -m connlimit --connlimit-above 3 -j DROP
这个命令会限制来自 IP 地址
192.168.1.1
的连接数不超过3
个。
-m connlimit --connlimit-above 3 -j DROP
这个命令会限制来自 IP 地址 `192.168.1.1` 的连接数不超过 `3` 个。