iptables是 Linux 系统中用于设置、维护和检查网络数据包过滤规则的工具。它在网络安全和流量管理方面起着重要作用。
防火墙功能:可以根据各种条件(如源 IP 地址、目标 IP 地址、端口号、协议等)过滤网络数据包,阻止或允许特定的流量进入或离开系统。例如,可以阻止来自特定 IP 地址或 IP 地址范围的恶意流量,或者只允许特定端口的流量通过,以保护系统免受网络攻击。
网络访问控制:可以限制特定用户或用户组对网络资源的访问,增强系统的安全性。
SNAT(Source Network Address Translation):修改从本地网络发出的数据包的源 IP 地址,通常用于让内部网络中的多个主机共享一个公网 IP 地址访问外部网络。
DNAT(Destination Network Address Translation):修改传入数据包的目标 IP 地址和(可选)目标端口,用于将外部网络的请求转发到内部网络中的特定服务器。
可以通过设置规则来限制特定类型的流量的带宽使用,确保关键业务的网络资源得到优先保障,同时防止某些应用程序占用过多的带宽。
iptables有多个表,每个表用于不同的目的:
filter表:主要用于数据包过滤,是最常用的表,决定是否允许数据包通过或丢弃。
nat表:用于网络地址转换。
mangle表:用于修改数据包的 IP 头信息,可用于实现一些特殊的网络需求。
每个表包含多个链,链是一系列规则的集合:
INPUT链:用于处理进入系统的数据包。
OUTPUT链:用于处理由系统生成的数据包。
FORWARD链:用于处理经过系统但不是由系统生成或发往系统的数据包。
PREROUTING链(在nat表中):在数据包进行路由决策之前处理数据包,常用于 DNAT。
POSTROUTING链(在nat表中):在数据包离开系统进行路由之后处理数据包,常用于 SNAT。
以下命令将阻止来自 IP 地址192.168.1.100的所有流量:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
允许外部网络对本地系统的端口80(HTTP)的访问:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
假设内部网络使用192.168.1.0/24网段,通过公网 IP 地址X.X.X.X访问外部网络:
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source X.X.X.X
将外部网络对公网 IP 地址X.X.X.X的端口8080的访问转发到内部网络中 IP 地址为192.168.1.100的服务器的端口80:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
规则顺序很重要:iptables 按照规则的顺序依次处理数据包,所以规则的顺序会影响最终的结果。确保将更具体的规则放在更通用的规则之前。
持久化规则:默认情况下,iptables 规则在系统重启后会丢失。可以使用工具如 iptables-persistent 来使规则在系统启动时自动加载。
谨慎使用:在配置 iptables 规则时要小心,错误的配置可能会导致网络连接中断或安全漏洞。在进行重要的配置更改之前,最好先测试规则的效果。