iptables保护Web服务器的完整配置指南 (2026)

Web服务器暴露在公网中,面临端口扫描、暴力破解、DDoS等多种威胁。iptables作为Linux内核级防火墙,是保护Web服务器的第一道防线。本文从实战角度出发,给出一套完整、可落地的iptables防护方案。

一、iptables基础概念

iptables基于Netfilter框架工作,通过定义规则链(Chain)对网络数据包进行过滤。核心概念包括:

  • 表(Table):filter表最常用,负责包过滤;nat表处理地址转换;mangle表修改包头部
  • 链(Chain):INPUT(入站)、OUTPUT(出站)、FORWARD(转发)三条内置链
  • 规则(Rule):匹配条件 + 执行动作,按顺序依次匹配

对于Web服务器防护,我们主要关注 filter表的INPUT链

二、安全配置的核心原则

默认拒绝策略

最安全的做法是默认拒绝所有入站流量,再逐条放行所需服务:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

先放行回包

必须首先允许已建立连接的回包,否则服务器无法正常通信:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许本地回环

iptables -A INPUT -i lo -j ACCEPT

三、Web服务端口放行

HTTP与HTTPS

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

SSH管理端口

建议修改默认22端口,并限制来源IP:

# 仅允许指定IP访问SSH
iptables -A INPUT -p tcp -s 你的管理IP --dport 22 -j ACCEPT

如果无法固定管理IP,至少启用连接速率限制:

iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 5 -j ACCEPT

四、防暴力破解策略

利用recent模块封禁扫描器

对SSH端口短时间内多次尝试连接的IP自动封禁:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name ssh -j DROP

60秒内超过3次新连接则丢弃后续请求。

对Web端口也做速率限制

防止应用层CC攻击和暴力扫描:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/min --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/min --limit-burst 100 -j ACCEPT

五、防DDoS基础措施

SYN Flood防护

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

禁止无效包

iptables -A INPUT -m state --state INVALID -j DROP

防止Ping洪水

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

六、日志与调试

对被拒绝的包记录日志,便于排查问题:

iptables -A INPUT -j LOG --log-prefix "iptables-dropped: " --log-level 4

日志会写入 /var/log/messages/var/log/syslog,可通过 grep iptables-dropped 快速筛选。

七、规则持久化

iptables规则重启后丢失,必须持久化保存:

# CentOS/RHEL
yum install iptables-services
service iptables save

# Ubuntu/Debian
apt install iptables-persistent
netfilter-persistent save

八、完整配置脚本汇总

将以上规则整合为一个可执行脚本,按正确顺序排列:

#!/bin/bash
# 清空现有规则
iptables -F
iptables -X

# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 回包放行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 本地回环
iptables -A INPUT -i lo -j ACCEPT

# SSH(限速+recent防暴力)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name ssh -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# SYN Flood防护
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 禁止无效包
iptables -A INPUT -m state --state INVALID -j DROP

# Ping限速
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# 日志
iptables -A INPUT -j LOG --log-prefix "iptables-dropped: " --log-level 4

九、注意事项

  1. 远程操作务必谨慎:设置DROP默认策略前,确保SSH放行规则已就位,否则会被锁在外面
  2. 规则顺序很重要:iptables从上到下匹配,先匹配到的规则生效,放行规则要排在拒绝规则之前
  3. 配合应用层防护:iptables是网络层防火墙,对应用层攻击(如SQL注入、XSS)无能为力,需搭配WAF使用
  4. 定期审查规则:业务变化后及时调整端口放行策略,避免开放不必要的服务端口
  5. 考虑使用firewalld:CentOS 7+默认使用firewalld作为前端,它底层仍调用iptables/nftables,可根据团队习惯选择

iptables虽然语法略显复杂,但作为内核级防火墙,性能开销极低,是Web服务器安全防护的必备工具。配合fail2ban等自动化工具,可以构建更加完善的防御体系。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注