在CentOS系统中,iptables是用于配置Linux内核防火墙的关键工具,它通过规则链控制网络数据包的流动,保障系统安全,合理配置iptables规则,既能有效阻止恶意访问,又能允许合法的远程连接需求,是企业级服务器管理的重要技能,以下将从基础概念、规则配置、远程访问实践及注意事项等方面展开说明。

iptables基础结构与工作原理
iptables由五个内置规则链组成,其中与远程访问最相关的是INPUT(进入本机的数据包)和OUTPUT(本机发出的数据包),每个规则链包含一系列规则,当数据包匹配某条规则时,系统会执行对应的动作(如ACCEPT允许、DROP丢弃、REJECT拒绝并返回错误信息),默认情况下,iptables采用“匹配即停止”的机制,若数据包未匹配任何规则,则遵循链的默认策略(通常为DROP或ACCEPT)。
远程访问前的安全准备
在配置iptables前,需确保系统具备基本的安全防护能力,建议通过iptables -F清空现有规则(测试环境),生产环境则需谨慎备份,为避免远程配置时意外断开连接,应先通过本地终端或带外管理方式操作,明确必须开放的端口,如SSH(22)、HTTP(80)、HTTPS(443)等,避免因规则错误导致服务不可用。
配置远程访问的核心规则
允许本地回环访问
本地回环地址(127.0.0.1)是系统内部通信的基础,需优先允许:
iptables -A INPUT -i lo -j ACCEPT
允许已建立的连接及相关数据包
通过状态检测(-m state)确保已建立的会话能正常通信:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
开放SSH远程管理端口
SSH是远程服务器管理的核心协议,需限制特定IP或允许所有IP(不推荐):
# 允许特定IP访问(如192.168.1.100) iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT # 或开放所有IP(需配合其他安全措施) iptables -A INPUT -p tcp --dport 22 -j ACCEPT
开放Web服务端口(如适用)
若需提供HTTP/HTTPS服务,可添加以下规则:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
设置默认策略
为提升安全性,建议将INPUT链的默认策略设置为DROP,仅开放必要端口:
iptables -P INPUT DROP
规则保存与持久化配置
CentOS 7及以上系统使用iptables-service或firewalld管理防火墙,若使用iptables,需安装并保存规则:
yum install iptables-services -y service iptables save # 保存规则至/etc/sysconfig/iptables systemctl enable iptables # 设置开机自启
高级安全策略
限制连接频率
防止暴力破解SSH,可使用limit模块限制连接速率:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
禁止ping探测
通过ICMP规则避免主机被网络扫描发现:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
配置后的验证与维护
使用iptables -L -n -v查看规则详情,检查流量计数(pkts、bytes)验证规则是否生效,若需删除规则,可通过iptables -D指定序号或精确匹配条件,定期审查规则列表,清理过时或冗余规则,确保防火墙策略与实际需求一致。
FAQs

Q1:修改iptables规则后如何立即生效且永久保存?
A:执行iptables命令后,规则仅临时生效,需通过service iptables save(CentOS 7及以下)或iptables-save > /etc/sysconfig/iptables保存规则,并确保iptables服务已启用,对于CentOS 7及以上,若使用firewalld,需通过firewall-cmd配置并执行--runtime-to-permanent。
Q2:如何避免因SSH端口配置错误导致无法远程连接?
A:建议提前在终端中开放多个端口作为备用,例如先开放2222端口作为SSH备用通道:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
配置完成后,通过SSH工具连接新端口测试,确认无误后再修改主SSH端口(/etc/ssh/sshd_config)并重启SSH服务,确保防火墙规则优先级高于默认DROP策略,避免新规则被覆盖。