iptables端口控制需先设INPUT链默认策略为DROP,再放行ESTABLISHED/RELATED连接和lo接口,接着按序添加允许特定端口(如80、443、22、3306)及来源的规则,最后用REJECT或DROP拒绝非法访问,并保存规则实现持久化。

iptables 是 Linux 系统中最常用、最灵活的包过滤防火墙工具。要实现对特定端口(如 22、80、3306 等)的精细访问控制,关键在于理解链(chain)、规则匹配顺序和状态跟踪机制。
明确目标链与基础策略
绝大多数端口控制操作集中在 INPUT 链(处理进入本机的数据包)。建议先查看当前策略:
iptables -L INPUT -n -v若默认策略是 ACCEPT,需谨慎添加拒绝规则;若为 DROP,应优先放行必要端口(如 SSH),避免锁死远程连接。
- 设置默认策略为 DROP(执行前确保已通过本地终端或带外管理接入):
iptables -P INPUT DROP - 允许已建立/相关连接(必须放在第一条,否则后续新连接会被阻断):
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT - 允许本地回环:
iptables -A INPUT -i lo -j ACCEPT
开放指定端口供外部访问
使用 -p tcp 明确协议(UDP 端口需单独处理),配合 --dport 指定目标端口。例如开放 Web 服务:
若需同时开放 HTTPS:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT- 限制仅某 IP 访问 SSH(端口 22):
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT - 开放 MySQL(3306)但仅限内网段:
iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT - 注意:多条规则按顺序匹配,靠前的规则优先生效
拒绝特定端口或来源的访问
拒绝(REJECT)比丢弃(DROP)更友好——会向客户端返回明确错误(如 Connection refused),便于排错;DROP 则静默丢包。
- 禁止所有公网访问 Redis 默认端口(6379):
iptables -A INPUT -p tcp --dport 6379 -j REJECT - 封禁恶意 IP 的全部访问:
iptables -I INPUT -s 203.0.113.45 -j DROP(-I 表示插入首行,优先生效) - 拒绝来自某网段的 FTP 连接:
iptables -A INPUT -p tcp -s 192.168.5.0/24 --dport 21 -j REJECT
保存与持久化规则
iptables 规则默认不跨重启保留。不同发行版保存方式略有差异:
- Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4 - RHEL/CentOS 7+(使用 firewalld 时,建议切换回 iptables-service):
service iptables save 或 iptables-save > /etc/sysconfig/iptables - 通用方案(需安装 iptables-persistent):
apt install iptables-persistent(自动保存并开机加载)
每次修改后建议用 iptables -L -n --line-numbers 核对规则顺序,并用 telnet ip port 或 nc -zv ip port 实测连通性。


















