news 2026/4/16 18:05:40

Linux 脚本案例:适用iptables构建不同场景下的防火墙规则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 脚本案例:适用iptables构建不同场景下的防火墙规则

一、iptables 基础概念

1.1 iptables 四表五链

  • 四表

    • filter表:过滤数据包(默认表)
    • nat表:网络地址转换
    • mangle表:修改数据包
    • raw表:连接跟踪
  • 五链

    • INPUT:进入本机的数据包
    • OUTPUT:从本机出去的数据包
    • FORWARD:经过本机转发的数据包
    • PREROUTING:路由前(用于DNAT)
    • POSTROUTING:路由后(用于SNAT)

二、实战案例讲解

案例1:Web服务器防护

# 1. 清空所有规则iptables -F iptables -X iptables -Z# 2. 设置默认策略(拒绝所有,按需开放)iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT# 3. 允许本地回环接口iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT# 4. 允许已建立的连接和相关的连接iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 5. 开放SSH服务(限制源IP)iptables -A INPUT -p tcp --dport22-s192.168.1.0/24 -j ACCEPT# 6. 开放Web服务(HTTP/HTTPS)iptables -A INPUT -p tcp --dport80-j ACCEPT iptables -A INPUT -p tcp --dport443-j ACCEPT# 7. 允许ping(ICMP)iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT# 8. 记录被拒绝的数据包(最后一条规则)iptables -A INPUT -j LOG --log-prefix"IPTABLES-DROP: "

案例2:NAT网关服务器

# 1. 开启IP转发echo1>/proc/sys/net/ipv4/ip_forward# 2. 设置SNAT(内网访问外网)# eth0: 公网接口,eth1: 内网接口iptables -t nat -A POSTROUTING -o eth0 -s192.168.1.0/24 -j MASQUERADE# 或使用固定公网IPiptables -t nat -A POSTROUTING -o eth0 -s192.168.1.0/24 -j SNAT --to-source 公网IP# 3. 设置DNAT(外网访问内网服务器)# 将公网IP的80端口映射到内网Web服务器iptables -t nat -A PREROUTING -i eth0 -p tcp --dport80-j DNAT --to-destination192.168.1.100:80# 4. 允许转发流量iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -s192.168.1.0/24 -j ACCEPT

案例3:DDoS防护

# 1. 限制同一IP的连接数# 防止CC攻击,限制每个IP最多10个HTTP连接iptables -A INPUT -p tcp --dport80-m connlimit --connlimit-above10-j DROP# 2. 限制连接速率# 限制每个IP每秒最多10个新连接iptables -A INPUT -p tcp --dport80-m limit --limit10/second --limit-burst20-j ACCEPT iptables -A INPUT -p tcp --dport80-j DROP# 3. 阻止异常数据包iptables -A INPUT -p tcp!--syn -m state --state NEW -j DROP# 阻止无效的SYN包iptables -A INPUT -f -j DROP# 阻止分片包iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP# 阻止Xmas扫描iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP# 阻止Null扫描# 4. 屏蔽恶意IPiptables -A INPUT -s 恶意IP -j DROP# 或使用ipset管理黑名单ipset create blacklist hash:ip ipsetaddblacklist 恶意IP iptables -A INPUT -mset--match-set blacklist src -j DROP

案例4:端口转发和负载均衡

# 1. 本地端口转发# 将访问本机8080端口的数据转发到本机80端口iptables -t nat -A PREROUTING -p tcp --dport8080-j REDIRECT --to-port80# 2. 简单负载均衡(轮询)# 将80端口的请求分配到3台后端服务器iptables -t nat -A PREROUTING -p tcp --dport80-m statistic --mode nth --every3--packet0\-j DNAT --to-destination192.168.1.101:80 iptables -t nat -A PREROUTING -p tcp --dport80-m statistic --mode nth --every2--packet0\-j DNAT --to-destination192.168.1.102:80 iptables -t nat -A PREROUTING -p tcp --dport80\-j DNAT --to-destination192.168.1.103:80

案例5:高级应用 - VPN服务器

# OpenVPN服务器配置iptables -t nat -A POSTROUTING -s10.8.0.0/24 -o eth0 -j MASQUERADE iptables -A INPUT -p udp --dport1194-j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

三、实用脚本示例

3.1 防火墙初始化脚本

#!/bin/bash# firewall_init.sh# 定义变量SSH_PORT=22ALLOWED_NETWORKS="192.168.1.0/24 10.0.0.0/8"PUBLIC_INTERFACE="eth0"# 清空规则iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X# 设置默认策略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 icmp --icmp-type echo-request -j ACCEPT# 开放服务端口fornetworkin$ALLOWED_NETWORKS;doiptables -A INPUT -p tcp --dport$SSH_PORT-s$network-j ACCEPTdoneiptables -A INPUT -p tcp --dport80-j ACCEPT iptables -A INPUT -p tcp --dport443-j ACCEPT# 防止端口扫描iptables -N PORTSCAN iptables -A PORTSCAN -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit1/s -j RETURN iptables -A PORTSCAN -j DROP# 保存规则(根据系统选择)# CentOS/RHEL: service iptables save# Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4

3.2 动态阻止暴力破解

#!/bin/bash# block_ssh_bruteforce.sh# 分析日志,自动屏蔽尝试失败的IPLOG_FILE="/var/log/auth.log"ATTEMPTS=5# 尝试次数BLOCK_TIME=3600# 封锁时间(秒)# 提取失败IP并加入黑名单grep"Failed password"$LOG_FILE|awk'{print $(NF-3)}'|\sort|uniq-c|awk-vlimit=$ATTEMPTS'$1 > limit {print $2}'|\whilereadip;doif!iptables -L INPUT -n|grep-q$ip;theniptables -A INPUT -s$ip-j DROPecho"$(date): Blocked$ipfor$ATTEMPTSfailed attempts">>/var/log/iptables.log# 一小时后自动解封(sleep$BLOCK_TIME&&iptables -D INPUT -s$ip-j DROP)&fidone

四、调试和监控

4.1 查看规则

# 查看所有规则iptables -L -n -v# 查看NAT规则iptables -t nat -L -n -v# 查看规则编号iptables -L --line-numbers# 实时监控iptables日志tail-f /var/log/kern.log|grepiptables

4.2 规则管理

# 插入规则(第2条位置)iptables -I INPUT2-p tcp --dport3306-j ACCEPT# 删除规则(按编号)iptables -D INPUT2# 删除规则(按内容)iptables -D INPUT -p tcp --dport3306-j ACCEPT# 清空计数器iptables -Z

五、最佳实践建议

  1. 先放行后拒绝:规则顺序很重要
  2. 最小权限原则:只开放必要的端口
  3. 使用状态检测-m state --state ESTABLISHED,RELATED
  4. 记录重要事件:使用LOG链记录异常
  5. 定期备份规则iptables-save > iptables.backup
  6. 测试规则:在应用前先测试,避免被锁
  7. 使用ipset管理大量IP:提高性能
  8. 结合fail2ban:动态防护暴力破解

六、常见问题排查

# 1. 检查规则是否生效iptables -L -n -v# 2. 检查连接跟踪cat/proc/net/nf_conntrack# 3. 检查内核参数sysctl -a|grepnet.ipv4# 4. 测试端口telnet IP PORTnc-zv IP PORT# 5. 查看被拒绝的包dmesg|grepiptables
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:26:41

有你!我的git有救了

Git 核心知识点简便手册一、核心概念(3 个关键)三大区域:工作区(本地项目文件夹)→ 暂存区(git add 后)→ 版本库(.git 目录,git commit 后);核心…

作者头像 李华
网站建设 2026/4/16 2:43:11

【小程序毕设全套源码+文档】基于Android的电影信息推荐APP的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/16 12:28:14

深入浅出:使用Linux系统函数构建高性能TCP服务器

🌟 深入浅出:使用Linux系统函数构建高性能TCP服务器 🌟引言:网络编程的艺术一、TCP服务器基础架构1.1 服务器工作流程图1.2 核心系统调用概览二、构建TCP服务器的详细步骤2.1 创建Socket:通信的起点2.2 绑定地址&#…

作者头像 李华
网站建设 2026/4/16 12:28:05

斑马优化算法优化BP神经网络风电功率预测附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华