news 2026/5/23 18:56:33

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/5/10 13:12:36

PHP Error: 常见错误及其解决方法

PHP Error: 常见错误及其解决方法 引言 PHP作为一种广泛使用的服务器端脚本语言,在网站开发中扮演着重要的角色。然而,在使用PHP进行编程时,难免会遇到各种错误。本文将详细介绍PHP中常见的错误类型及其解决方法,帮助开发者更好地应对这些问题。 常见PHP错误类型 1.语法…

作者头像 李华
网站建设 2026/5/23 18:38:50

已有安全措施确认(上)

网络安全已有安全措施确认已有安全措施确认是网络安全体系建设的基础复盘环节,指通过技术核查、配置审计、实操验证、制度核对的方式,对企业已部署的技术防护措施、制定的管理管控措施、落地的运营保障措施进行全面核查,确认其是否有效部署、…

作者头像 李华
网站建设 2026/5/14 17:46:40

从巴菲特投资看A股投资机会

从巴菲特投资看A股投资机会 关键词:巴菲特投资、A股市场、投资机会、价值投资、长期投资 摘要:本文旨在通过深入剖析巴菲特的投资理念和策略,探寻其对A股市场投资机会的启示。详细介绍了巴菲特投资理念的核心要素,分析了A股市场的…

作者头像 李华
网站建设 2026/5/22 2:52:36

【小程序毕设源码分享】基于springboot+Android的大学生勤工助学管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

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

作者头像 李华
网站建设 2026/5/14 17:45:14

【小程序毕设源码分享】基于springboot+小程序的电影信息推荐APP的设计与实现(程序+文档+代码讲解+一条龙定制)

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

作者头像 李华
网站建设 2026/5/10 1:11:57

【小程序毕设全套源码+文档】基于Android宠物饲养管理APP的设计与实现(丰富项目+远程调试+讲解+定制)

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

作者头像 李华