欢迎光临
我们一直在努力

Linux iptables防火墙完全指南:从入门到实战

Linux iptables防火墙完全指南:从入门到实战

    • 1. iptables概述
      • 核心概念
    • 2. 基本语法结构
      • 常用命令选项
    • 3. 防火墙策略配置实战
      • 3.1 基础安全配置
      • 3.2 Web服务器配置
      • 3.3 数据库服务器配置
    • 4. 高级功能配置
      • 4.1 NAT网络地址转换
      • 4.2 流量控制与限速
      • 4.3 字符串匹配和内容过滤
    • 5. 安全防护配置
      • 5.1 DDoS防护
      • 5.2 Web应用防护
    • 6. 管理和维护
      • 6.1 规则查看和管理
      • 6.2 监控和日志
    • 7. 实用脚本示例
      • 7.1 完整的服务器防火墙脚本
      • 7.2 网关路由器配置
    • 8. 故障排除
      • 8.1 常见问题解决
      • 8.2 规则调试技巧

🌺The Begin🌺点点关注,收藏不迷路🌺

iptables是Linux系统中最强大的防火墙工具之一,掌握iptables对于系统安全和网络管理至关重要。本文将全面介绍iptables的核心概念、语法规则和实战应用。

1. iptables概述

iptables是Linux内核集成的IP信息包过滤系统,是netfilter项目的一部分。它通过规则表、链和规则三个层次来管理网络数据包。

核心概念

四个表(Tables):

  • filter表:默认表,用于包过滤
  • nat表:用于网络地址转换
  • mangle表:用于修改数据包
  • raw表:用于配置数据包免除连接跟踪

五个链(Chains):

  • INPUT:处理进入本机的数据包
  • OUTPUT:处理本机发出的数据包
  • FORWARD:处理转发的数据包
  • PREROUTING:数据包进入路由之前
  • POSTROUTING:数据包离开路由之后

2. 基本语法结构

iptables [-t 表名] 命令选项 [链名] [规则匹配条件] [-j 目标动作]

常用命令选项

命令说明
-A, –append 在链尾添加规则
-I, –insert 在指定位置插入规则
-D, –delete 删除规则
-L, –list 列出规则
-F, –flush 清空规则
-P, –policy 设置链的默认策略
-N, –new-chain 创建自定义链
-X, –delete-chain 删除自定义链

3. 防火墙策略配置实战

3.1 基础安全配置

#!/bin/bash
# 基础防火墙配置脚本

# 清空所有规则
iptables -F
iptables -X
iptables -Z

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

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 允许已建立的连接和相关的连接
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# 允许ICMP (ping)
iptables -A INPUT -p icmp –icmp-type 8 -j ACCEPT

# 保存配置
iptables-save > /etc/sysconfig/iptables

3.2 Web服务器配置

#!/bin/bash
# Web服务器防火墙配置

# 清空规则
iptables -F

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

# 基本规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# 开放服务端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp –dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp –dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -p tcp –dport 21 -j ACCEPT # FTP
iptables -A INPUT -p tcp –dport 20 -j ACCEPT # FTP数据

# 允许ICMP
iptables -A INPUT -p icmp -j ACCEPT

# 记录被拒绝的连接(可选)
iptables -A INPUT -j LOG –log-prefix "IPTABLES-DROPPED: "

3.3 数据库服务器配置

#!/bin/bash
# 数据库服务器防火墙配置

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

# 基础规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# 管理端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 22 -j ACCEPT # SSH来自内网
iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 22 -j ACCEPT # SSH来自管理网络

# 数据库端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 3306 -j ACCEPT # MySQL内网访问
iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 5432 -j ACCEPT # PostgreSQL管理网络

# 监控和备份
iptables -A INPUT -s 192.168.1.100 -p tcp –dport 9100 -j ACCEPT # Node Exporter

4. 高级功能配置

4.1 NAT网络地址转换

# 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# SNAT:内网访问外网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT –to-source 公网IP

# MASQUERADE:动态IP环境
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

# DNAT:端口映射
iptables -t nat -A PREROUTING -d 公网IP -p tcp –dport 80 -j DNAT –to-dest 192.168.1.100:80
iptables -t nat -A PREROUTING -d 公网IP -p tcp –dport 2222 -j DNAT –to-dest 192.168.1.200:22

4.2 流量控制与限速

# 限制SSH连接频率
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 60 –hitcount 4 -j DROP

# 限制HTTP连接数
iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT

# 限制ICMP频率(防ping洪水)
iptables -A INPUT -p icmp –icmp-type 8 -m limit –limit 1/s –limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp –icmp-type 8 -j DROP

# 端口扫描防护
iptables -A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

4.3 字符串匹配和内容过滤

# 阻止特定字符串
iptables -A FORWARD -p tcp -m string –string "malware.com" –algo kmp -j DROP
iptables -A FORWARD -p tcp -m string –string "cmd.exe" –algo kmp -j DROP

# 阻止P2P流量(示例)
iptables -A FORWARD -p tcp -m string –string "BitTorrent" –algo kmp -j DROP
iptables -A FORWARD -p udp -m string –string "BitTorrent" –algo kmp -j DROP

5. 安全防护配置

5.1 DDoS防护

#!/bin/bash
# DDoS防护配置

# SYN洪水攻击防护
iptables -A INPUT -p tcp –syn -m limit –limit 1/s –limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp –syn -j DROP

# 限制同一IP的连接数
iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 -j REJECT

# 防止端口扫描
iptables -N port-scan
iptables -A port-scan -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j RETURN
iptables -A port-scan -j DROP

# UDP洪水防护
iptables -A INPUT -p udp -m limit –limit 5/s –limit-burst 10 -j ACCEPT
iptables -A INPUT -p udp -j DROP

5.2 Web应用防护

#!/bin/bash
# Web应用防火墙规则

# 防止SQL注入
iptables -A INPUT -p tcp –dport 80 -m string –string "union" –algo bm -j DROP
iptables -A INPUT -p tcp –dport 80 -m string –string "select" –algo bm -j DROP
iptables -A INPUT -p tcp –dport 80 -m string –string "drop" –algo bm -j DROP

# 防止XSS攻击
iptables -A INPUT -p tcp –dport 80 -m string –string "<script>" –algo bm -j DROP

# 限制POST请求大小
iptables -A INPUT -p tcp –dport 80 -m length –length 10000: -j DROP

# 阻止特定User-Agent
iptables -A INPUT -p tcp –dport 80 -m string –string "badbot" –algo bm -j DROP

6. 管理和维护

6.1 规则查看和管理

# 查看所有规则
iptables -L -n -v

# 查看带行号的规则
iptables -L -n –line-numbers

# 查看指定表的规则
iptables -t nat -L -n

# 删除指定规则
iptables -D INPUT 3 # 删除INPUT链的第3条规则

# 清空计数器
iptables -Z

# 保存规则
iptables-save > /etc/sysconfig/iptables

# 恢复规则
iptables-restore < /etc/sysconfig/iptables

6.2 监控和日志

# 启用详细日志
iptables -A INPUT -j LOG –log-prefix "IPTABLES: " –log-level 4

# 查看iptables日志
tail -f /var/log/messages | grep IPTABLES

# 实时监控连接
watch -n 1 'iptables -L -n -v'

# 统计规则命中次数
iptables -L -n -v -x

7. 实用脚本示例

7.1 完整的服务器防火墙脚本

#!/bin/bash
# 完整的服务器防火墙配置

# 定义变量
SSH_PORT=22
HTTP_PORT=80
HTTPS_PORT=443
DB_PORT=3306
INTERNAL_NET="192.168.1.0/24"
ADMIN_IP="192.168.1.100"

# 清理规则
iptables -F
iptables -X
iptables -Z

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

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

# 已建立连接
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# 管理服务
iptables -A INPUT -s $ADMIN_IP -p tcp –dport $SSH_PORT -j ACCEPT
iptables -A INPUT -s $INTERNAL_NET -p tcp –dport $SSH_PORT -j ACCEPT

# Web服务
iptables -A INPUT -p tcp –dport $HTTP_PORT -j ACCEPT
iptables -A INPUT -p tcp –dport $HTTPS_PORT -j ACCEPT

# 数据库(仅内网)
iptables -A INPUT -s $INTERNAL_NET -p tcp –dport $DB_PORT -j ACCEPT

# ICMP
iptables -A INPUT -p icmp –icmp-type 8 -m limit –limit 1/s -j ACCEPT

# 安全防护
iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT
iptables -A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP

# 日志记录
iptables -A INPUT -j LOG –log-prefix "IPTABLES-DROP: " –log-level 4

echo "防火墙配置完成"

7.2 网关路由器配置

#!/bin/bash
# 网关路由器防火墙配置

# 启用转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 清理规则
iptables -F
iptables -t nat -F
iptables -X

# NAT配置
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 转发规则
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state –state ESTABLISHED,RELATED -j ACCEPT

# DMZ配置
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.1.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j DNAT –to 192.168.1.10:443

echo "网关配置完成"

8. 故障排除

8.1 常见问题解决

# 检查规则是否生效
iptables -L -n

# 查看连接跟踪
cat /proc/net/ip_conntrack

# 检查内核参数
sysctl -a | grep net.ipv4.ip_forward

# 调试规则
iptables -t raw -A PREROUTING -p tcp –dport 80 -j TRACE

8.2 规则调试技巧

# 临时允许所有流量进行测试
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT

# 逐步添加规则测试
iptables -A INPUT -p tcp –dport 22 -j LOG –log-prefix "SSH: "

# 使用tcpdump配合调试
tcpdump -i eth0 port 80

在这里插入图片描述

🌺The End🌺点点关注,收藏不迷路🌺

赞(0)
未经允许不得转载:171主机测评 » Linux iptables防火墙完全指南:从入门到实战
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址