Iptables防火墙规则配置实战:从入门到精通(附常用命令速查表)
Iptables防火墙规则配置实战从入门到精通附常用命令速查表在Linux系统管理中防火墙配置是每个管理员必须掌握的硬核技能。想象一下你的服务器就像一座城堡而iptables就是守护这座城堡的卫兵队长它决定了谁可以进入、谁被拒之门外。不同于简单的理论讲解本文将带你深入实战场景从基础规则到高级防护策略一步步构建坚不可摧的服务器防线。无论你是刚接触Linux安全的新手还是需要快速查阅命令的老手这篇文章都能满足需求。我们将重点解决实际运维中的典型问题如何安全开放SSH服务怎样阻止恶意端口扫描特定IP访问控制如何实现每个技巧都经过生产环境验证并配有可直接复用的命令示例。1. Iptables核心概念与工作逻辑1.1 规则链的运作机制Iptables通过五个预定义的规则链处理网络流量INPUT链处理所有发往本机的数据包重点防护区域OUTPUT链处理本机产生的出站流量FORWARD链处理经过本机路由的数据包PREROUTING链在路由决策前修改目标地址DNATPOSTROUTING链在路由决策后修改源地址SNAT提示80%的防火墙规则都集中在INPUT链这是抵御外部攻击的第一道防线1.2 策略动作的智能选择当流量匹配规则时可采取以下关键动作动作类型响应方式适用场景典型用例ACCEPT允许通过信任流量SSH管理端口DROP静默丢弃防御扫描屏蔽恶意IPREJECT拒绝并回复友好拒绝内部网络提示LOG记录日志审计跟踪可疑连接监控# 查看当前规则链配置精简显示 iptables -L -n --line-numbers2. 实战防护配置指南2.1 SSH服务安全加固保护22端口是服务器安全的重中之重。以下是经过验证的最佳实践更改默认端口需同步修改sshd_configiptables -A INPUT -p tcp --dport 2222 -j ACCEPT限制访问源IP办公室/跳板机IP段iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 22 -j ACCEPT启用暴力破解防护# 每分钟允许3次新连接 iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP2.2 Web服务器防护策略针对Nginx/Apache的典型防护配置# 基础HTTP/HTTPS放行 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 阻止恶意User-Agent iptables -I INPUT -p tcp --dport 80 -m string --string BadBot --algo bm -j DROP # 限制连接频率防CC攻击 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT注意生产环境应结合Web应用防火墙(WAF)使用如ModSecurity3. 高级防御技巧3.1 端口敲门(Port Knocking)实现通过隐蔽式认证提升安全性安装knockd服务配置iptables默认丢弃关键端口设置敲门序列示例# 当用户依次访问7000/8000/9000端口后开放SSH iptables -N KNOCKING iptables -A INPUT -j KNOCKING iptables -A KNOCKING -m recent --name AUTH1 --remove -j DROP iptables -A KNOCKING -p tcp --dport 7000 -m recent --name AUTH1 --set -j DROP iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH1 -p tcp --dport 8000 -m recent --name AUTH2 --set -j DROP iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH2 -p tcp --dport 9000 -m recent --name AUTH3 --set -j DROP iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH3 -p tcp --dport 22 -j ACCEPT3.2 防范端口扫描有效识别并阻断扫描行为# 记录扫描尝试 iptables -N ANTISCAN iptables -A ANTISCAN -m limit --limit 5/min -j LOG --log-prefix iptables_scan: iptables -A ANTISCAN -j DROP # 触发规则短时间内连接多个端口 iptables -A INPUT -p tcp -m recent --name ATTACKER --update --seconds 600 --hitcount 1 -j ANTISCAN iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m recent --name ATTACKER --set4. 规则优化与管理4.1 规则持久化方案防止重启后规则丢失# 保存当前规则 iptables-save /etc/iptables.rules # 开机自动加载Ubuntu示例 echo pre-up iptables-restore /etc/iptables.rules /etc/network/interfaces # CentOS/RHEL方案 yum install iptables-services systemctl enable iptables iptables-save /etc/sysconfig/iptables4.2 性能优化技巧减少规则数量合并相似规则使用ipset处理大量IP优化规则顺序高频匹配规则前置使用连接跟踪# 允许已建立连接的相关流量 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT附Iptables命令速查表常用操作命令命令作用示例iptables -L列出规则iptables -L -n -viptables -F清空规则链iptables -F INPUTiptables -P设置默认策略iptables -P INPUT DROPiptables -A追加规则iptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -I插入规则iptables -I INPUT 1 -p icmp -j ACCEPTiptables -D删除规则iptables -D INPUT 3协议与端口控制# 允许特定协议 iptables -A INPUT -p icmp -j ACCEPT # ICMP iptables -A INPUT -p udp --dport 53 -j ACCEPT # DNS # 端口范围控制 iptables -A INPUT -p tcp --dport 8000-8080 -j ACCEPT # 多端口指定 iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT网络接口控制# 指定网卡入站 iptables -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT # 指定网卡出站 iptables -A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT