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🌺点点关注,收藏不迷路🌺 |

