iptables
简易使用手册
iptables
是一个强大而灵活的 Linux 防火墙工具,用于管理网络包过滤和网络地址转换 (NAT)。它基于 Netfilter 框架工作,允许你定义详细的规则来管理入站和出站流量。
1. 查看现有规则
-
查看所有表的规则:
sudo iptables -L
-
查看特定链(例如
INPUT
链)的规则:sudo iptables -L INPUT
2. 允许或拒绝端口
-
允许某个端口(例如允许 22 端口的 SSH 流量):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-
拒绝某个端口(例如拒绝 21 端口的 FTP 流量):
sudo iptables -A INPUT -p tcp --dport 21 -j REJECT
3. 允许或拒绝 IP 地址
-
允许来自特定 IP 地址(例如允许 192.168.1.100):
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
-
拒绝来自特定 IP 地址:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
4. 保存和恢复规则
-
iptables
的规则默认不会在系统重启后保存,因此需要保存规则以便重启后生效:-
在 Debian/Ubuntu 系统上,使用
iptables-save
保存规则:sudo iptables-save > /etc/iptables/rules.v4
-
恢复规则:
sudo iptables-restore < /etc/iptables/rules.v4
-
5. 链、表、规则的概念
iptables
规则由表和链组成:
-
表(Tables):用于处理不同类型的数据包,主要有四种表:
filter
:最常用的表,用于包过滤(默认)。nat
:用于网络地址转换(NAT)。mangle
:用于修改包头。raw
:用于排除某些包处理。
-
链(Chains):链是数据包流经的路径,主要有三种预定义链:
INPUT
:用于处理入站流量(进入服务器的流量)。OUTPUT
:用于处理出站流量(从服务器发出的流量)。FORWARD
:用于处理转发流量(通过服务器转发的流量)。
6. 基础规则操作
-
添加规则:将新规则添加到链的末尾(例如允许 80 端口的 HTTP 流量):
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-
插入规则:将新规则插入到链的特定位置(在链的第 1 条规则处插入):
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
-
删除规则:删除特定规则(例如,删除允许 22 端口的规则):
-
先列出规则编号:
sudo iptables -L INPUT --line-numbers
-
删除第 1 条规则:
sudo iptables -D INPUT 1
-
-
清除链中的所有规则:
sudo iptables -F
7. 状态匹配(state match)
使用状态匹配可以让你创建基于连接状态的规则。
-
允许已建立和相关的连接继续通过:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-
拒绝所有新连接请求:
sudo iptables -A INPUT -m state --state NEW -j DROP
8. 日志记录
-
记录数据包而不丢弃它们(可以将
LOG
动作用于记录异常流量):sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH connection: "
9. 默认策略设置
-
将默认策略设置为拒绝所有入站流量(更严格的防火墙策略):
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT
10. 常见规则简化
-
允许 HTTP 和 HTTPS 流量:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-
允许所有来自本地网络(192.168.1.0/24)的流量:
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
总结
iptables
是功能强大的防火墙管理工具,适合处理复杂的防火墙需求。