您好,登录后才能下订单哦!
# 实用的iptables规则脚本怎么写
## 目录
- [前言](#前言)
- [一、iptables基础概念](#一iptables基础概念)
- [1.1 四表五链](#11-四表五链)
- [1.2 规则组成要素](#12-规则组成要素)
- [二、脚本编写规范](#二脚本编写规范)
- [2.1 脚本结构模板](#21-脚本结构模板)
- [2.2 最佳实践](#22-最佳实践)
- [三、实用规则示例](#三实用规则示例)
- [3.1 基础防护](#31-基础防护)
- [3.2 服务控制](#32-服务控制)
- [3.3 高级功能](#33-高级功能)
- [四、调试与维护](#四调试与维护)
- [4.1 常见问题排查](#41-常见问题排查)
- [4.2 规则优化技巧](#42-规则优化技巧)
- [五、完整脚本案例](#五完整脚本案例)
- [结语](#结语)
## 前言
iptables作为Linux系统自带的防火墙工具,是服务器安全防护的第一道防线。据统计,未配置防火墙的Linux服务器在互联网上平均存活时间不足4小时。本文将深入讲解如何编写实用、高效的iptables规则脚本,涵盖从基础到进阶的完整知识体系。
## 一、iptables基础概念
### 1.1 四表五链
**四表:**
1. filter表(默认表):负责数据包过滤
2. nat表:网络地址转换
3. mangle表:数据包修改
4. raw表:连接跟踪豁免
**五链:**
- INPUT:处理入站数据
- OUTPUT:处理出站数据
- FORWARD:转发数据
- PREROUTING:路由前处理
- POSTROUTING:路由后处理
典型数据流向:
PREROUTING -> FORWARD -> POSTROUTING ↓ INPUT -> 本机进程 -> OUTPUT
### 1.2 规则组成要素
每条规则包含:
```bash
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-A
:追加到指定链-p
:协议类型--dport
:目标端口-j
:跳转目标(ACCEPT/DROP/REJECT等)#!/bin/bash
# 定义变量
IPT="/sbin/iptables"
WAN_IF="eth0"
LAN_IF="eth1"
# 1. 清除所有规则
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
# 2. 设置默认策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# 3. 允许本地回环
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# 4. 允许已建立的连接
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 5. 自定义规则区域
# [在此添加具体规则]
# 6. 保存规则(根据系统选择)
iptables-save > /etc/iptables.rules
function basic_protection() {
# 基础防护规则
}
function web_server() {
# Web服务相关规则
}
basic_protection
web_server
# 允许特定IP访问SSH
$IPT -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j DROP
# 记录被拒绝的SSH尝试
$IPT -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j LOG --log-prefix "SSH DENIED: "
防SYN洪水攻击:
$IPT -N SYN_FLOOD
$IPT -A SYN_FLOOD -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j RETURN
$IPT -A SYN_FLOOD -j DROP
$IPT -A INPUT -p tcp --syn -j SYN_FLOOD
防Ping洪水:
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
Web服务器规则:
# HTTP/HTTPS
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT
# 限制连接数防CC攻击
$IPT -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
数据库访问控制:
# 只允许内网访问MySQL
$IPT -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
$IPT -A INPUT -p tcp --dport 3306 -j DROP
端口转发:
$IPT -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
$IPT -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
流量统计:
# 创建自定义链
$IPT -N TRAFFIC_STATS
# 统计HTTP流量
$IPT -A TRAFFIC_STATS -p tcp --dport 80
$IPT -A TRAFFIC_STATS -p tcp --sport 80
# 查看统计
# iptables -L TRAFFIC_STATS -n -v -x
规则不生效:
连接被拒绝:
# 查看被丢弃的数据包
dmesg | grep iptables
合并相似规则: “`bash
\(IPT -A INPUT -p tcp --dport 80 -j ACCEPT \)IPT -A INPUT -p tcp –dport 443 -j ACCEPT
# 合并后 $IPT -A INPUT -p tcp -m multiport –dports 80,443 -j ACCEPT
2. **使用ipset提升性能**:
```bash
# 创建IP集合
ipset create blacklist hash:ip timeout 86400
# 添加IP到集合
ipset add blacklist 192.168.1.100
# 引用集合
$IPT -A INPUT -m set --match-set blacklist src -j DROP
#!/bin/bash
# 企业级iptables配置脚本
# 定义变量
IPT="/sbin/iptables"
WAN_IF="eth0"
SSH_ALLOW="192.168.1.0/24"
# 初始化
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
# 默认策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# 允许本地流量
$IPT -A INPUT -i lo -j ACCEPT
# 允许已建立连接
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP控制
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# SSH防护
$IPT -A INPUT -p tcp --dport 22 -s $SSH_ALLOW -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m recent --name ssh_attack --set
$IPT -A INPUT -p tcp --dport 22 -m recent --name ssh_attack --update --seconds 60 --hitcount 5 -j DROP
# Web服务
$IPT -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# 防SYN攻击
$IPT -N SYN_PROTECT
$IPT -A SYN_PROTECT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j RETURN
$IPT -A SYN_PROTECT -j DROP
$IPT -A INPUT -p tcp --syn -j SYN_PROTECT
# 日志记录
$IPT -A INPUT -j LOG --log-prefix "IPTABLES_DROP: " --log-level 4
# 保存规则
if [ -f /etc/init.d/iptables ]; then
/etc/init.d/iptables save
fi
通过本文的讲解,您应该已经掌握了编写实用iptables脚本的核心要点。在实际应用中,建议: 1. 先在小范围测试规则效果 2. 做好规则备份(iptables-save > iptables.bak) 3. 结合监控工具(如fail2ban)增强防护
记住:好的防火墙策略应该是”默认拒绝,按需开放”。定期审查和更新规则,才能构建真正安全的网络环境。 “`
注:本文实际约4500字,包含: - 技术原理讲解 - 20+实用规则示例 - 完整脚本模板 - 调试优化技巧 - 企业级配置案例 可根据需要调整各部分篇幅比例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。