iptables 是 Linux 系统中常用的防火墙工具,基于 netfilter 框架工作,通过配置规则对网络数据包进行过滤、转发或修改。以下是 iptables 的核心配置知识和常见操作:
-
表(Table):iptables 通过不同的表管理规则,常用表包括:
filter
:默认表,用于数据包过滤(最常用)
nat
:用于网络地址转换(如端口转发)
mangle
:用于修改数据包标记(较少用)
-
链(Chain):表中包含预设的规则链,按数据包流向分类:
INPUT
:处理进入本机的数据包
OUTPUT
:处理本机发出的数据包
FORWARD
:处理经过本机转发的数据包
所有 iptables 操作需 root 权限(加sudo
):
sudo iptables -L
sudo iptables -L -v
sudo iptables -t nat -L
sudo iptables -L -n
语法:iptables [-t 表名] -A/-I 链名 匹配条件 -j 动作
-A
:在链的末尾添加规则
-I
:在链的开头插入规则(可指定位置,如-I INPUT 1
插入到第 1 位)
- 动作:
ACCEPT
(允许通过)、DROP
(直接丢弃,不回应)、REJECT
(拒绝并回应)
-p 协议
:指定协议(tcp/udp/icmp,如-p tcp
)
--dport 端口
:目标端口(如--dport 22
)
--sport 端口
:源端口(较少用)
-s IP
:源 IP 地址(如-s 192.168.1.100
)
-d IP
:目标 IP 地址
-i 网卡
:入站网卡(如-i eth0
)
-o 网卡
:出站网卡
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
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
sudo iptables -A INPUT -s 192.168.1.200 -j DROP
sudo iptables -P INPUT DROP
sudo iptables -D INPUT 3
sudo iptables -F INPUT
sudo iptables -F
sudo iptables -Z
iptables 规则默认保存在内存中,重启后会失效,需手动保存:
-
Debian/Ubuntu 系统:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
-
CentOS/RHEL 系统:
sudo service iptables save
-
通用方法:
sudo iptables-save > /etc/iptables.rules
sudo iptables-restore < /etc/iptables.rules
需开启内核转发(临时生效):
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
示例:将本机 80 端口转发到 192.168.1.100 的 8080 端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8080 -j ACCEPT
- 规则匹配顺序:按规则在链中的顺序匹配,第一条匹配的规则生效,建议将重要规则(如允许 SSH)放在前面。
- 配置时建议保持一个 SSH 会话连接,防止误操作导致无法连接服务器。
- 对规则不熟悉时,可先将默认策略设为
ACCEPT
,测试无误后再改为DROP
。
通过上述操作,可实现对 Linux 系统的网络访问控制,根据实际需求灵活配置规则即可。