还在为Linux防火墙配置头疼吗?被各种表、链、规则搞得晕头转向?别担心!这篇文章将用最通俗的语言,帮你理清iptables的来龙去脉。无论你是运维新手,还是想自己管理服务器的开发者,看完这篇文章,你一定能掌握iptables的精髓!
1. 表链关系总览表名\链名
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
filter
❌
✅
✅
✅
❌
nat
✅
❌
❌
✅
✅
mangle
✅
✅
✅
✅
✅
raw
✅
❌
❌
✅
❌
2. 链的功能说明链名
说明
应用场景
INPUT
处理入站数据包
访问本机服务
OUTPUT
处理出站数据包
本机对外访问
FORWARD
处理转发数据包
路由器转发
PREROUTING
路由前数据包处理
目的地址转换(DNAT)
POSTROUTING
路由后数据包处理
源地址转换(SNAT)
3. 表的功能说明表名
优先级
功能说明
raw
最高
连接跟踪处理
mangle
次高
数据包修改
nat
次低
网络地址转换
filter
最低
数据包过滤
4. 常见应用场景应用类型
使用的表
使用的链
防火墙过滤
filter
INPUT, FORWARD, OUTPUT
地址转换(NAT)
nat
PREROUTING, POSTROUTING
数据包修改
mangle
全部五链
关闭连接跟踪
raw
PREROUTING, OUTPUT
数据包处理流程进入本机数据包:PREROUTING → INPUT转发数据包:PREROUTING → FORWARD → POSTROUTING本机发出数据包:OUTPUT → POSTROUTING一、基础介绍1. netfilter 与 iptables 的关系netfilter:Linux 内核中的包过滤框架(内核态)iptables:用户空间的防火墙管理工具(用户态)2. 四表五链结构代码语言:javascript代码运行次数:0运行复制四表优先级(从高到低):
raw → mangle → nat → filter
五链处理顺序:
入站:PREROUTING → INPUT
转发:PREROUTING → FORWARD → POSTROUTING
出站:OUTPUT → POSTROUTING二、安装和基本配置1. CentOS 7 安装步骤代码语言:javascript代码运行次数:0运行复制# 1. 关闭 firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
# 2. 安装 iptables
yum -y install iptables iptables-services
# 3. 启动并设置开机启动
systemctl start iptables.service
systemctl enable iptables.service2. 基本命令格式代码语言:javascript代码运行次数:0运行复制iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]三、常用管理选项选项
说明
示例
-A
在链末尾添加规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-I
在链开头插入规则
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
-D
删除规则
iptables -D INPUT 1
-F
清空规则
iptables -F
-L
列出规则
iptables -L -n -v
-P
设置默认策略
iptables -P INPUT DROP
四.实验操作利用iptables防火墙来完成下列操作:
允许SSH连接(端口22)允许HTTP和HTTPS连接(端口80和443)允许ping拒绝其他所有入站连接记录被拒绝的连接本次实验
服务器:192.168.14.111 搭建了httpd服务
客户端:192.168.14.1112
默认规则设置
代码语言:javascript代码运行次数:0运行复制# 设置默认策略为DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT默认是开放的所有流量,关闭由外到内的所有流量,只允许出站
1v
规则设置
代码语言:javascript代码运行次数:0运行复制# 允许SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS连接
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许ping
iptables -A INPUT -p icmp -j ACCEPT客户端访问测试
服务访问测试
ping测试
规则管理代码语言:javascript代码运行次数:0运行复制# 列出规则(带行号)
iptables -L --line-numbers
# 删除特定规则
iptables -D INPUT 1 # 删除INPUT链的第1条规则
# 插入规则
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT # 在INPUT链的第1位置插入规则
# 替换规则
iptables -R INPUT 1 -p tcp --dport 8080 -j ACCEPT # 替换INPUT链的第1条规则
# 保存规则
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
# 恢复规则
service iptables restart
# 或
iptables-restore < /etc/sysconfig/iptables
# 将80端口转发到8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080看到这里,相信你已经对iptables有了清晰的认识!让我们回顾一下关键点:
🌟 四表五链不再神秘:就像快递分拣,每个包都有它的去处🚀 常用配置其实很简单:允许SSH登录(别把自己锁在门外)开放网站端口(80/443)允许ping检测安全起见,默认拒绝其他连接💡 规则管理也不难:增删改查,就像管理你的购物清单一样直观记住:配置防火墙不是什么高深技术,重要的是理解它的工作方式。就像设置家里的安全门,只需要清楚谁能进,谁不能进就够了!
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子