Linux iptables 修改指南
iptables 是 Linux 系统中一个强大的防火墙工具,用于通过配置规则来过滤网络数据包,它基于表(Table)、链(Chain)和规则(Rule)三个层级进行工作。
基础语法结构
iptables 的基本命令格式如下:iptables [-t 表名] 命令 [链名] [匹配条件] [-j 动作]
- 常用表(Table):
filter:默认表,用于过滤数据包(最常用)。nat:用于网络地址转换(如端口转发)。mangle:用于修改数据包内容。
- 常用链(Chain):
INPUT:处理进入本机的数据包。OUTPUT:处理本机发出的数据包。FORWARD:处理经由本机转发的数据包。
- 常用动作(Target):
ACCEPT:允许通过。DROP:直接丢弃,不给发送方任何响应。REJECT:拒绝通过,并向发送方发送错误响应。LOG:记录日志。
常用管理命令
在修改规则前,建议先查看当前状态:
- 查看所有规则(详细模式):
iptables -L -n -v-L:列出规则。-n:以数字形式显示 IP 和端口,不进行 DNS 解析(速度快)。-v:显示详细信息(如数据包计数)。
- 查看规则行号(方便删除特定行):
iptables -L --line-numbers - 清空所有规则:
iptables -F - 设置默认策略(例如将所有输入默认设为允许):
iptables -P INPUT ACCEPT
常见修改场景示例
1 端口管理
- 开放特定端口(如 SSH 22端口):
iptables -A INPUT -p tcp --dport 22 -j ACCEPT - 开放 HTTP/HTTPS 端口(80 和 443):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT - 关闭/禁止特定端口:
iptables -A INPUT -p tcp --dport 8080 -j DROP
2 IP 地址管理
- 允许特定 IP 访问本机:
iptables -A INPUT -s 192.168.1.100 -j ACCEPT - 禁止特定 IP 访问本机:
iptables -A INPUT -s 192.168.1.200 -j DROP - 允许特定网段访问:
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
3 状态管理(维持已建立的连接)
为了防止在设置防火墙时把自己锁在外面,通常需要允许已建立的连接继续通信:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
删除与插入规则
- 插入规则到指定位置(优先级高于 Append):
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
(将规则插入到INPUT链的第一行) - 根据行号删除规则:
iptables -D INPUT 2
(删除INPUT链的第二条规则)
保存规则(持久化)
iptables 的命令在执行后立即生效,但重启后会丢失,需要将其保存到配置文件中。
- Ubuntu/Debian 系统:
安装iptables-persistent工具:
sudo apt-get install iptables-persistent
保存当前规则:
sudo netfilter-persistent save - CentOS/RHEL 系统:
使用iptables-services:
service iptables save
或执行:
iptables-save > /etc/sysconfig/iptables
安全操作建议
- 备份优先:在进行大规模修改前,先备份当前规则:
iptables-save > iptables_backup.txt - 顺序至上:
iptables是从上到下匹配的,一旦匹配成功就不再往下走,请确保“允许”规则在“拒绝”规则之前。 - 防止锁死:在设置
INPUT链默认策略为DROP之前,务必先执行允许 SSH 端口的命令,否则将无法远程连接服务器。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/493094.html



