Iptables防火墙规则配置实战:从入门到精通(附常用命令速查表)

Iptables防火墙规则配置实战:从入门到精通(附常用命令速查表)

在Linux系统管理中,防火墙配置是每个管理员必须掌握的硬核技能。想象一下,你的服务器就像一座城堡,而iptables就是守护这座城堡的卫兵队长,它决定了谁可以进入、谁被拒之门外。不同于简单的理论讲解,本文将带你深入实战场景,从基础规则到高级防护策略,一步步构建坚不可摧的服务器防线。

无论你是刚接触Linux安全的新手,还是需要快速查阅命令的老手,这篇文章都能满足需求。我们将重点解决实际运维中的典型问题:如何安全开放SSH服务?怎样阻止恶意端口扫描?特定IP访问控制如何实现?每个技巧都经过生产环境验证,并配有可直接复用的命令示例。

1. Iptables核心概念与工作逻辑

1.1 规则链的运作机制

Iptables通过五个预定义的规则链处理网络流量:

  • INPUT链:处理所有发往本机的数据包(重点防护区域)
  • OUTPUT链:处理本机产生的出站流量
  • FORWARD链:处理经过本机路由的数据包
  • PREROUTING链:在路由决策前修改目标地址(DNAT)
  • POSTROUTING链:在路由决策后修改源地址(SNAT)

提示:80%的防火墙规则都集中在INPUT链,这是抵御外部攻击的第一道防线

1.2 策略动作的智能选择

当流量匹配规则时,可采取以下关键动作:

动作类型响应方式适用场景典型用例
ACCEPT允许通过信任流量SSH管理端口
DROP静默丢弃防御扫描屏蔽恶意IP
REJECT拒绝并回复友好拒绝内部网络提示
LOG记录日志审计跟踪可疑连接监控
# 查看当前规则链配置(精简显示) iptables -L -n --line-numbers

2. 实战防护配置指南

2.1 SSH服务安全加固

保护22端口是服务器安全的重中之重。以下是经过验证的最佳实践:

  1. 更改默认端口(需同步修改sshd_config):

    iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
  2. 限制访问源IP(办公室/跳板机IP段):

    iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 22 -j ACCEPT
  3. 启用暴力破解防护

    # 每分钟允许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 DROP

2.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)使用,如ModSecurity

3. 高级防御技巧

3.1 端口敲门(Port Knocking)实现

通过隐蔽式认证提升安全性:

  1. 安装knockd服务
  2. 配置iptables默认丢弃关键端口
  3. 设置敲门序列(示例):
    # 当用户依次访问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 ACCEPT

3.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 --set

4. 规则优化与管理

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/iptables

4.2 性能优化技巧

  • 减少规则数量:合并相似规则,使用ipset处理大量IP
  • 优化规则顺序:高频匹配规则前置
  • 使用连接跟踪
    # 允许已建立连接的相关流量 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

附:Iptables命令速查表

常用操作命令

命令作用示例
iptables -L列出规则iptables -L -n -v
iptables -F清空规则链iptables -F INPUT
iptables -P设置默认策略iptables -P INPUT DROP
iptables -A追加规则iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I插入规则iptables -I INPUT 1 -p icmp -j ACCEPT
iptables -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