iptables
是一个强大的防火墙工具,用于配置 Linux 内核的网络数据包过滤规则。以下是一些常用的 iptables
命令组合:
1. 查看当前的 iptables
规则
sudo iptables -L -v -n
-L
:列出所有链中的规则。-v
:显示详细信息(如数据包和字节计数)。-n
:以数字形式显示 IP 地址和端口号,而不是尝试解析主机名和服务名。
2. 清空所有规则
sudo iptables -F
-F
:清空所有链中的规则。
3. 删除特定链中的规则
sudo iptables -D INPUT 1
-D
:删除指定链中的规则。INPUT
:指定要操作的链(例如INPUT
、OUTPUT
、FORWARD
)。1
:指定要删除的规则编号(从 1 开始)。
4. 设置默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-P
:设置链的默认策略。DROP
:默认丢弃所有数据包。ACCEPT
:默认接受所有数据包。
5. 允许本地回环接口的流量
sudo iptables -A INPUT -i lo -j ACCEPT
-A
:追加规则到指定链。-i lo
:指定输入接口为本地回环接口。-j ACCEPT
:接受匹配的数据包。
6. 允许已建立的连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-m conntrack
:使用连接跟踪模块。--ctstate ESTABLISHED,RELATED
:匹配已建立的连接或相关连接。-j ACCEPT
:接受匹配的数据包。
7. 允许特定端口的流量
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-p tcp
:指定协议为 TCP。--dport 22
:指定目标端口为 22(SSH)。--dport 80
:指定目标端口为 80(HTTP)。--dport 443
:指定目标端口为 443(HTTPS)。-j ACCEPT
:接受匹配的数据包。
8. 拒绝来自特定 IP 的流量
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
-s 192.168.1.100
:指定源 IP 地址。-j DROP
:丢弃匹配的数据包。
9. 限制每秒的连接数
sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min --limit-burst 10 -j ACCEPT
-m limit
:使用限速模块。--limit 5/min
:限制每分钟最多 5 个新连接。--limit-burst 10
:允许突发的最大连接数为 10。-j ACCEPT
:接受匹配的数据包。
10. 保存和恢复 iptables
规则
CentOS 6 默认情况下不会自动保存 iptables
规则,因此需要手动保存和恢复。
保存规则
sudo service iptables save
恢复规则
sudo service iptables restart
11. 配置 NAT 和端口转发
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置 NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 端口转发
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080
-t nat
:指定表为 NAT 表。-A POSTROUTING
:在 POSTROUTING 链中添加规则。-o eth0
:指定输出接口。-j MASQUERADE
:启用 IP 地址伪装。-A PREROUTING
:在 PREROUTING 链中添加规则。--dport 80
:指定目标端口为 80。--to-destination 192.168.1.10:8080
:将流量转发到 192.168.1.10 的 8080 端口。
12. 阻止特定国家的 IP 地址
可以使用 ipset
工具来管理大量的 IP 地址列表,并与 iptables
结合使用。
安装 ipset
sudo yum install -y ipset
创建 IP 集
sudo ipset create blocklist hash:net
添加 IP 地址到集
sudo ipset add blocklist 192.168.1.0/24
使用 iptables
匹配 IP 集
sudo iptables -I INPUT -m set --match-set blocklist src -j DROP