防火墙iptables完整安全规则拦截扫描

为什么需要iptables拦截扫描

服务器暴露在公网,每天都会收到大量扫描请求。
端口扫描、SYN洪水、ICMP探测都是常见手法。
如果放任不管,CPU和带宽会被浪费,严重时可能导致服务拒绝。
通过iptables设置几组规则,就能自动丢弃这些恶意流量,让服务器更安心运行。
本文按零基础也能照做的方式,讲清楚从准备到验证的完整流程。

准备工作:检查当前iptables状态

首先确认系统是否已安装iptables。
大部分Linux发行版默认自带,但可能未启动或规则为空。

# 查看当前规则(默认表filter)
sudo iptables -L -n --line-numbers

如果输出显示Chain INPUT (policy ACCEPT)之类的信息,说明iptables已启用。
如果未安装,基于Debian/Ubuntu的系统执行sudo apt install iptables,基于CentOS/RHEL执行sudo yum install iptables-services

注意:云服务器厂商(如阿里云、腾讯云)的控制台安全组和系统内iptables是两层防线,建议两者都配置。

核心规则:拦截端口扫描与SYN洪水

以下规则按执行顺序添加。规则顺序敏感:要先把放行规则(如SSH)加在前面,再写拒绝规则,否则自己会被踢出服务器。

# 1. 清空现有规则(谨慎!先备份)
sudo iptables -F
sudo iptables -X

# 2. 设置默认策略:丢弃所有入站,放行出站和转发(默认安全)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 3. 放行已建立的连接和本地回环(必须!否则SSH断连)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT

# 4. 放行SSH(请改用你的端口)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 5. 放行常用服务HTTP/HTTPS(如有)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 6. 拦截常见扫描特征:
# 6.1 丢弃所有状态为INVALID的包(碎片、异常包)
sudo iptables -A INPUT -m state --state INVALID -j DROP

# 6.2 限制SYN包速率(防SYN Flood)
sudo iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

# 6.3 阻止端口扫描:记录并丢弃未使用的TCP标志组合
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP

# 6.4 限制ICMP(ping)频率
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/s --limit-burst 5 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

解释:第6.2条中--limit 10/s表示每秒最多10个SYN包,超过则丢弃,能有效压制SYN洪水。
第6.3条丢弃了不合法的TCP标志组合,让常见扫描工具如nmap的-sS-sT等模式失效。

避坑指南:规则顺序与持久化

规则顺序最重要:iptables按顺序匹配,一旦匹配就执行动作。
如果先把“拒绝所有”放在前面,后面的放行规则就不会生效。
因此务必先放行SSH等重要服务。

小心把自己锁在外面:如果配置错误,SSH会断掉。
建议先在本地终端或VNC控制台测试,或者写一个定时任务脚本在5分钟后恢复规则(iptables -F)。

持久化规则:重启后iptables规则会丢失。
常见方法:

  • Debian/Ubuntu:sudo apt install iptables-persistent,然后sudo netfilter-persistent save
  • CentOS/RHEL:sudo service iptables savesudo /sbin/iptables-save > /etc/sysconfig/iptables

验证保存是否成功:重启后执行sudo iptables -L -n看规则是否还在。

效果验证:用nmap探测你的服务器

在另一台机器上安装nmap:

# CentOS
sudo yum install nmap -y
# Ubuntu
sudo apt install nmap -y

使用nmap扫描你的服务器公网IP:

# 常见端口扫描
nmap -sS your_server_ip
# 不常见的标志组合探测
nmap -sF your_server_ip
nmap -sX your_server_ip

如果规则生效,你会看到类似“filtered”的状态,甚至超时无响应。
而正常端口(如80)应该显示open(前提是已放行)。

高频问题解答

Q:规则是否影响正常用户访问?
A:只限制了异常包速率和非法标志,正常TCP三次握手不受影响。耐心测试正常访问即可。

Q:为什么放行了某个端口,但nmap显示filtered?
A:检查规则顺序,确保放行规则写在拒绝规则之前。再检查云服务商安全组是否阻挡了端口。

Q:如何临时关闭所有规则?
A:sudo iptables -P INPUT ACCEPT && sudo iptables -F,但请确认无重要服务再执行。

总结

通过上述规则,你的服务器可以有效拦截绝大多数端口扫描和SYN洪水。
建议定期使用nmap自测,并结合fail2ban等工具协同防御。
如果你正在配置新服务器,先按本文步骤执行,再根据实际服务微调端口放行。
遇到异常时优先回看规则顺序和持久化部分。

分享到:
上一篇
Shell脚本批量运维多台住宅服务器集群
下一篇
Linux SELinux策略关闭适配宝塔建站详细教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意