Linux iptables防火墙全攻略 实战详解
一、概述
本文全面覆盖Linux iptables防火墙的核心知识点与实操场景,包括4表5链基础架构、filter表安全防护(封IP/端口/网段)、nat表网络配置(共享上网/端口转发/IP映射)、规则管理(备份/恢复/限制并发)等核心功能。内容兼顾理论与实战,既适合Linux运维新手入门学习防火墙配置,也适合资深运维人员复习巩固生产环境常用技巧,可直接用于服务器安全防护、内网网络规划等实际工作场景。
二、核心知识点
2.1 防火墙种类及选型
类型代表产品/工具核心特点适用场景硬件防火墙深信服、绿盟、奇安信、Cisco性能强、防护全面,部署于企业入口大型企业、高并发场景软件防火墙iptables(Linux内核级)内置Linux系统,轻量高效,4层防护服务器单机防护、内网网关firewalld(CentOS7)、nftables(CentOS8)动态规则,操作更便捷CentOS7+系统默认防护ufw(Ubuntu)简化配置,适合Ubuntu桌面/服务器Ubuntu系统环境云防火墙阿里云安全组、NAT网关、WAF云端托管,无需本地部署公有云服务器(AWS/阿里云/腾讯云)2.2 关键名词解释
名词定义类比场景表(Table)功能分类容器,iptables核心为4表,按功能划分(过滤、NAT、修改数据包等)大楼里的不同功能房间链(Chain)规则的存储容器,对应数据包流转路径,共5条默认链房间里的货架规则(Policy)具体的防护/转发策略,包含匹配条件(IP/端口/协议)和动作(ACCEPT/DROP)货架上的物品摆放规则NetfilterLinux内核中的网络过滤框架,iptables是其用户态管理工具防火墙的“内核引擎”2.3 iptables 4表5链核心架构
2.3.1 4表功能划分(核心为filter+nat表)
表名核心功能常用链优先级filter数据包过滤(封IP/端口/网段、白名单),默认表,主机防火墙核心INPUT、OUTPUT、FORWARD⭐️⭐️⭐️⭐️⭐️nat网络地址转换(共享上网、端口转发、IP映射)PREROUTING、POSTROUTING、OUTPUT⭐️⭐️⭐️⭐️⭐️raw关闭数据包追踪,提升性能(运维极少使用)PREROUTING、OUTPUT⭐️mangle修改数据包标记/TTL(特殊场景使用)所有链⭐️2.3.2 5链数据流转路径
链名数据包流转场景关联表INPUT目标地址为本机的数据包(外部访问服务器)filter、natOUTPUT源地址为本机的数据包(服务器访问外部)filter、natFORWARD流经本机的数据包(转发给其他服务器)filter、natPREROUTING数据包到达本机前(修改目标地址/端口,用于端口转发)nat、raw、manglePOSTROUTING数据包离开本机前(修改源地址/端口,用于共享上网)nat、mangle2.4 iptables 执行流程原理
- 数据包按链的顺序流转:PREROUTING → INPUT/FORWARD → OUTPUT → POSTROUTING;
- 规则按“从上到下”匹配,匹配成功即执行动作(ACCEPT/DROP),不再向下匹配;
- 无匹配规则时,执行链的默认策略(ACCEPT/DROP);
- 拒绝规则(DROP)需放在允许规则前,否则会被允许规则覆盖。
2.5 核心命令参数分类
参数类型关键参数含义说明表操作-t指定操作的表(默认filter表,如-t nat操作nat表)规则操作-A追加规则到链末尾(允许类规则常用)-I插入规则到链开头(拒绝类规则常用,如-I INPUT 1插入到第1条)-D删除规则(按序号-D INPUT 1或按条件-D INPUT -s 10.0.0.1 -j DROP)-F清空所有规则(需先备份)-X删除自定义链-Z清零链的数据包/字节计数器规则匹配-s指定源IP/网段(如-s 10.0.0.0/24)-d指定目标IP/网段-p指定协议(tcp/udp/icmp,如-p tcp)--dport指定目标端口(如--dport 80)--sport指定源端口-i指定入站网卡(如-i eth0)-o指定出站网卡-m加载扩展模块(multiport多端口、limit限速、state连接状态)动作指定-j匹配后的动作(ACCEPT允许、DROP丢弃、REJECT拒绝并返回信息、SNAT/DNAT地址转换)规则查看-L列出规则(-nL不反向解析IP/端口,-nL --line-number显示规则序号)-v详细显示(包含数据包/字节计数)三、步骤/命令
3.1 ⭐️ 环境准备(必做)
操作场景:安装iptables服务,关闭firewalld,加载核心模块,开启IP转发。- # 1. 安装iptables服务(CentOS7)
- yum install -y iptables-services &>/dev/null
- # 2. 关闭并禁用firewalld(避免冲突)
- systemctl stop firewalld
- systemctl disable firewalld
- # 3. 启动iptables并设置开机自启
- systemctl start iptables
- systemctl enable iptables
- # 4. 加载iptables核心模块(filter/nat/连接追踪)
- modprobe ip_tables
- modprobe iptable_filter
- modprobe iptable_nat
- modprobe ip_conntrack
- modprobe ip_conntrack_ftp
- modprobe ipt_state
- # 5. 开启内核IP转发(nat表共享上网/转发必备)
- echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
- sysctl -p &>/dev/null
- # 6. 验证环境(查看默认规则)
- iptables -nL
复制代码 效果验证:输出filter表默认规则(INPUT链允许22端口、RELATED/ESTABLISHED连接),无报错即环境就绪。
3.2 ⭐️ filter表核心规则配置(安全防护)
3.2.1 封单个IP(禁止10.0.0.188访问服务器)
- # 插入规则到INPUT链开头,拒绝源IP 10.0.0.188
- iptables -I INPUT -s 10.0.0.188 -j DROP
- # 验证规则(查看序号和内容)
- iptables -nL --line-number
复制代码 效果验证:规则列表第1条显示DROP tcp -- 10.0.0.188 0.0.0.0/0,从10.0.0.188访问服务器失败。
3.2.2 封指定端口(禁止访问80端口)
- # 拒绝所有IP访问80端口(HTTP服务)
- iptables -I INPUT -p tcp --dport 80 -j DROP
- # 验证规则
- iptables -nL -t filter | grep 80
复制代码 效果验证:外部访问服务器80端口超时,规则列表显示DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80。
3.2.3 禁止网段访问(禁止10.0.0.0/24访问8888端口)
- # 加载multiport模块(可选,单端口可省略),拒绝10.0.0.0/24网段访问8888端口
- iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8888 -j DROP
- # 测试:从10.0.0.7访问8888端口
- nc -zv 服务器IP 8888
复制代码 效果验证:10.0.0.0/24网段内主机访问8888端口提示“connection refused”,其他网段正常。
3.2.4 白名单配置(仅允许172.16.1.0/24网段访问)
- # 方法1:修改默认策略为DROP,仅允许指定网段
- iptables -P INPUT DROP # 默认拒绝所有入站连接
- iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT # 允许白名单网段
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 额外允许SSH端口(可选)
- # 方法2:排除非白名单网段(默认策略ACCEPT)
- iptables -I INPUT ! -s 172.16.1.0/24 -j DROP
- # 验证:白名单网段访问正常,其他网段拒绝
- ping 服务器IP
复制代码 效果验证:172.16.1.0/24网段可ping通服务器,其他网段ping超时。
3.2.5 禁止ping(屏蔽ICMP协议)
- # 方法1:iptables规则禁止ICMP类型8(ping请求)
- iptables -I INPUT -p icmp --icmp-type 8 -j DROP
- # 方法2:内核参数禁止ping(永久生效)
- echo 'net.ipv4.icmp_echo_ignore_all = 1' >> /etc/sysctl.conf
- sysctl -p
- # 验证:外部ping服务器无响应
- ping 服务器IP
复制代码 效果验证:执行ping 服务器IP显示“100% packet loss”,服务器无ICMP响应。
3.2.6 限制并发与速率(每分钟最多10个ICMP数据包)
- # 加载limit模块,限制ICMP协议速率:10个/分钟,突发5个
- iptables -I INPUT -p icmp -m limit --limit 10/min --limit-burst 5 -j ACCEPT
- iptables -P INPUT DROP # 默认拒绝其他ICMP请求
- # 验证:从客户端持续ping,前5个快速响应,后续每6秒1个响应
- ping 服务器IP
复制代码 效果验证:ping命令输出中,前5个icmp_seq连续,后续icmp_seq间隔约6秒,符合速率限制。
3.2.7 ⭐️ 规则保存与恢复(防止重启丢失)
- # 保存规则到默认配置文件(永久生效)
- iptables-save > /etc/sysconfig/iptables
- # 恢复规则(如误删规则后)
- iptables-restore < /etc/sysconfig/iptables
- # 重启iptables服务(自动读取配置文件)
- systemctl restart iptables
- # 验证:重启后查看规则,配置不丢失
- iptables -nL
复制代码 效果验证:服务器重启后,执行iptables -nL仍能看到之前配置的规则,无丢失。
3.3 ⭐️ nat表核心配置(网络转发)
3.3.1 共享上网(172.16.1.0/24网段通过公网IP 10.0.0.61上网)
[code]# 1. 配置SNAT(源地址转换),公网IP固定时iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61# 2. 公网IP不固定时(动态伪装)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE# 3. 后端主机配置(网关指向防火墙内网IP 172.16.1.61)# 编辑后端主机网卡配置(如web01)cat > /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/iptables保存;IP转发必须开启:nat表的共享上网、端口转发功能依赖net.ipv4.ip_forward = 1,需写入/etc/sysctl.conf永久生效;
云服务器限制:公有云(阿里云/腾讯云)的nat表功能被“NAT网关”替代,iptables仅支持filter表规则(封IP/端口);
模块加载:使用扩展功能(如multiport多端口、limit限速)时,需加载对应内核模块(如modprobe xt_multiport);
避免重复规则:配置前先清空规则(iptables -F),或查看规则序号(--line-number)删除冗余规则;
REJECT与DROP区别:DROP直接丢弃数据包,无响应;REJECT拒绝并返回“connection refused”,建议对外用DROP(隐藏服务),对内用REJECT(方便排查)。
</ol>六、结尾
6.1 总结
本文核心覆盖iptables防火墙的四大核心模块,是Linux运维服务器安全与网络配置的必备技能:
- 基础架构:掌握4表5链的定义、流转流程,理解filter表(过滤)和nat表(转换)的核心差异;
- filter表配置:熟练实现封IP/端口/网段、白名单、禁止ping、限速限流,掌握规则保存/恢复;
- nat表配置:精通SNAT共享上网、DNAT端口转发/IP映射,适配内网网络规划场景;
- 生产实践:掌握白名单模式配置,结合默认策略和规则顺序,构建安全可靠的服务器防护体系。
6.2 避坑指南(坑点+解决方案)
坑点解决方案规则配置后不生效1. 检查规则顺序(拒绝规则是否在前面);2. 验证表是否正确(如nat表需加-t nat);3. 查看是否加载扩展模块(如multiport)共享上网失败1. 确认开启IP转发(sysctl net.ipv4.ip_forward返回1);2. 检查SNAT规则的源网段和公网IP;3. 后端主机网关指向防火墙内网IP端口转发无法访问1. 检查PREROUTING链的DNAT规则;2. 确认防火墙FORWARD链默认策略为ACCEPT;3. 后端主机防火墙放行目标端口重启后规则丢失1. 执行iptables-save > /etc/sysconfig/iptables保存;2. 启用iptables服务开机自启(systemctl enable iptables)配置默认DROP后远程断开1. 紧急情况:本地登录服务器添加SSH允许规则(iptables -A INPUT -p tcp --dport 22 -j ACCEPT);2. 预防:配置DROP前先备份规则,先添加关键允许规则云服务器nat表规则无效1. 公有云不支持iptables nat表,改用云厂商“NAT网关”;2. 仅用iptables filter表配置封IP/端口,配合云安全组限速规则不生效1. 确认加载limit模块(modprobe xt_limit);2. 检查规则顺序(限速规则需在允许规则前);3. 验证--limit和--limit-burst参数格式lo接口通信失败1. 添加允许lo接口规则(iptables -A INPUT -i lo -j ACCEPT);2. 避免默认DROP策略覆盖lo接口允许规则
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
|
|
相关推荐
|
|
|