iptables防火墙实战:5分钟搞定CentOS7端口封禁与放行(附常见服务端口清单)
iptables防火墙实战CentOS7端口管控从入门到精通1. 初识iptablesLinux系统的网络守门人在Linux系统中iptables就像一位严格的网络管理员负责检查所有进出系统的数据包。想象一下你的服务器是一座城堡而iptables就是站在城门口的卫兵决定哪些人可以进入哪些人必须离开。与CentOS7默认的firewalld相比iptables提供了更底层的控制能力。它直接与Linux内核的Netfilter框架交互能够实现精确的端口控制允许或拒绝特定端口的访问灵活的规则组合基于IP、端口、协议等多维度条件制定规则高效的网络流量管理支持NAT、端口转发等高级功能提示虽然firewalld更现代化但iptables仍然是许多专业运维人员的首选特别是在需要精细控制网络流量的场景中。2. 环境准备在CentOS7中启用iptables在开始之前我们需要确保系统已经正确安装并启用了iptables服务。以下是完整的设置流程# 停止并禁用默认的firewalld systemctl stop firewalld systemctl disable firewalld # 安装iptables和相关服务 yum install -y iptables iptables-services # 启动iptables并设置开机自启 systemctl start iptables systemctl enable iptables安装完成后可以通过以下命令验证服务状态systemctl status iptables如果一切正常你应该能看到类似这样的输出● iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled) Active: active (exited) since Mon 2023-05-15 10:00:00 CST; 1min ago3. iptables基础操作端口管控四步曲3.1 查看现有规则在修改任何规则之前最好先了解当前的配置情况iptables -L -n -v这个命令会显示-L列出所有规则-n以数字形式显示IP和端口不进行DNS解析-v显示详细信息包括数据包计数典型输出如下Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 10 800 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 5 400 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 160 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:223.2 端口放行允许特定服务假设我们需要开放Web服务80端口和SSH22端口# 允许SSH连接22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许HTTP访问80端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTPS访问443端口 iptables -A INPUT -p tcp --dport 443 -j ACCEPT3.3 端口封禁阻止不必要的访问为了系统安全我们应该默认拒绝所有入站连接然后只开放必要的端口# 设置默认策略为DROP iptables -P INPUT DROP iptables -P FORWARD DROP # 但保留出站连接 iptables -P OUTPUT ACCEPT # 允许本地回环接口 iptables -A INPUT -i lo -j ACCEPT # 允许已建立的连接和相关的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT3.4 保存规则所有修改在重启后会丢失因此需要保存service iptables save规则会被保存到/etc/sysconfig/iptables文件中。4. 高级配置应对复杂场景4.1 基于IP的访问控制有时我们需要限制特定IP的访问# 允许特定IP访问SSH iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT # 拒绝某个IP访问所有端口 iptables -A INPUT -s 10.0.0.5 -j DROP4.2 端口范围控制对于需要开放多个连续端口的情况# 允许UDP端口5000-6000 iptables -A INPUT -p udp --dport 5000:6000 -j ACCEPT4.3 防止暴力破解保护SSH服务免受暴力破解攻击# 限制每分钟最多3个新SSH连接 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP4.4 常见服务端口速查表服务名称端口号协议典型用途SSH22TCP安全远程登录HTTP80TCP网页访问HTTPS443TCP加密网页访问FTP21TCP文件传输DNS53UDP/TCP域名解析SMTP25TCP邮件发送POP3110TCP邮件接收IMAP143TCP邮件同步MySQL3306TCP数据库服务Redis6379TCP缓存服务5. 故障排查规则不生效的常见原因即使配置了iptables规则有时也会遇到规则不生效的情况。以下是几个常见原因及解决方法规则顺序问题iptables规则是按顺序匹配的一旦匹配到某条规则就会停止。确保你的允许规则在拒绝规则之前。默认策略冲突如果默认策略是ACCEPT而你的规则是DROP那么没有匹配到的流量仍然会被允许。服务未监听端口使用netstat -tulnp检查服务是否真的在监听你配置的端口。网络接口问题确保规则应用到正确的网络接口上使用-i参数指定。协议类型不匹配有些服务同时使用TCP和UDP确保你指定了正确的协议类型。检查规则的实用命令# 查看规则及其行号 iptables -L -n --line-numbers # 查看更详细的信息 iptables -S # 监控iptables日志需要先配置日志规则 tail -f /var/log/messages | grep iptables6. 实用技巧提高效率的小贴士使用注释为复杂规则添加注释方便后期维护iptables -A INPUT -p tcp --dport 3306 -j ACCEPT -m comment --comment 允许MySQL远程访问创建自定义链对于复杂规则集可以创建自定义链提高可读性iptables -N WEB_SERVICES iptables -A WEB_SERVICES -p tcp --dport 80 -j ACCEPT iptables -A WEB_SERVICES -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j WEB_SERVICES临时清空规则测试时可以临时清空所有规则谨慎使用iptables -F iptables -X iptables -Z备份和恢复规则定期备份你的iptables配置iptables-save /root/iptables-backup-$(date %F).rules # 恢复规则 iptables-restore /root/iptables-backup-2023-05-15.rules7. 安全最佳实践最小权限原则只开放必要的端口和服务其他一律拒绝。定期审查规则使用iptables-save导出规则并定期审查删除不再需要的规则。使用REJECT而非DROP对于内部网络使用REJECT比DROP更友好因为它会返回拒绝信息而不是让客户端超时等待。保护SSH访问更改默认SSH端口限制可访问SSH的IP范围使用密钥认证而非密码记录可疑活动为拒绝的流量添加日志记录iptables -A INPUT -j LOG --log-prefix IPTABLES-DROPPED: --log-level 4通过以上配置和技巧你应该能够在CentOS7上熟练使用iptables管理端口访问构建一个既安全又高效的网络环境。记住好的防火墙策略是在安全性和便利性之间找到平衡点。