防火墙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 save 或 sudo /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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意