架构图

防火墙
1. 什么是防火墙:
防止其他用户恶意访问
2. 防火墙种类
硬件防火墙 :F5
软件防火墙 :iptables firewalld
安全组
iptables
用户 ---> 调用iptables ---> ip_tables内核模式 ---> Netfilter(系统安全构架) ---> 过滤请求

什么是包过滤防火墙
什么是包:
在数据传输过程,并不是一次性传输完成的,而是将数据分成若干个数据包,一点一点的传输。
什么是包过滤防火墙:
过滤数据包的防火墙
包过滤防火墙如何实现
通过系统安全框架,过滤数据包。
iptables四表五链
四表五链
1、那四个表,有哪些作用
具备某种功能的集合叫做表。
filter: 负责做过滤功能呢 : INPUT、OUTPUT、FORWARD
nat: 网络地址转换 PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容 PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪 PREROUTING、OUTPUT
2、那五条链,运行在那些地方
PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
4) FOWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
流入本机:PREROUTING --> INPUT --> PROCESS(进程)
经过本机:PREROUTING --> FORWARD --> POSTROUTING
从本机流出:PROCESS(进程) --> OUTPUT --> POSTROUTING

iptables流程图
流入本机:A ---> PREROUTING ---> INPUT ---> B
流出本机:OUTPUT ---> POSTROUTING ---> B
流过本机:A ---> OUTPUT ---> POSTROUTING ---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C ---> PORTOUTING ---> INPUT --->B
只要流出就要经过OUPUT
只要流入就要经过INPUT
POSTROUTING : 判断目标ip地址
PREROUTING : 判断是否是本机的IP地址
FORWARD : 中转站 PREROUTING 判断不是本机的ip地址就抛给中转战
当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去。
如果数据包就是进入本机的,它就会沿着图向下移动,到达 INPUT 链。数据包到了 INPUT 链后,任何进程都会收到它。
本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达POSTROUTING 链输出。
如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD 链,然后到达 POSTROUTING 链输出。
分解图

iptables的使用
准备工作:
1、安装 iptables
[root@m01 ~]
2、启动 iptables
[root@m01 ~]
3、关闭firewalld
[root@m01 ~]
4、查看状态
systemctl status iptables
使用格式:iptables -t 表名 选项 链名 条件 动作
-t : 指定操作的表
-L : 列出当前的规则(--list)
-v : 显示数据包和数据包大小
-n : 不反解地址
-A : 追加一条规则到链中(--append)
-I : 插入一条规则,插入到顶部(--insert)
-F :清空(--flush)
-Z :清空计数器(包数量。包大小)(--zero)
-D :删除链中的规则(--delete)
-R :修改(--replace)
-S :列出所有的规则(--list-rules)
-N :创建一个自定义链(--new-chain)
-X :删除一个自定义链(--delete-chain)
-P :指定链的默认策略(--policy)
iptables动作
ACCEPT :将数据包放行,进行完毕此处理动作后,将不再比对其他规则,直接跳往下一个规则链
REJECT :阻拦该数据包,并传送数据包通知对方
DROP :丢弃包不予处理,进行完此处理动作后,将不再比对其他规则,直接终端过滤程序
DEDIRECT :将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其他规则
iptables -s与-d参数
-s : 源地址 : 发送请求的地址
-d :目标地址 : 访问的地址
iptables端口
什么是端口:
可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
--sport :源端口 :发送请求的端口
--dport :目标端口 : 访问的端口
-i 、-o、-m、-j动作
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发动作
-p : 指定协议
应用案例:
案例一: 只允许22端口可以访问,其他端口全部无法访问
[root@root ~]
解析:-t 指定操作的表:filter, -A INPUT 追加一条规则到链INPUT中, -p TCP :指定TCP协议 --dport 22 :目标端口22, -j ACCEPT :转发ACCEPT动作
[root@root ~]
解析: -j DROP 中断所有过滤程序。
案例二: 只允许22,80,443 端口访问,其他端口无法访问
[root@root ~]
[root@root ~]
[root@root ~]
[root@root ~]
案例三: 只允许22,80,443 端口可以访问,其他端口全部无法访问,但是本机可以访问百度。
iptables -t filter -I INPUT -p TCP -o eth1 -j ACCEPT
案例四: 要求使用192.168.15.81 能够通过22端口连接,但是其他不行。
[root@root ~]
[root@root ~]
解析 : -d :指定目标地址 (说明只能访问 192.168.15.81 访问不到别的)
案例五: 只允许192.168.15.71能够通过22端口连接,其他的不行。
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
解析: -s 指定源地址 -d 指定目标地址。 其他的禁止 -j DROP
案例六: 要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP
解析: -d 指定目标地址 -j DROP 禁止。
案例七: 要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i eth0 -j DROP
案例八: 使用要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
解析: 端口转换:使用nat表 :网络地址转换.
使用 PREROUTING 链 。
REDIRECT : 将包导向另外一个端口。
--to-port : (参数) 导向另外一个端口
iptables -L -v -n -t nat (此时可以指定查看nat表)
案例九: 要求只允许windows通过ssh连接192.168.15.81,其他拒绝
iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 22 -j DROP
解析:进入windows cmd 执行ipconfig查看windowsip 。以windows作为源地址。
iptables模块
multiport模块
模块: 拓展iptables的功能
-m 指定模块
1、连续匹配多个端口(multiport)
--dports :指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)
案例:要求将22,80,443,以及3000-5000之间所有的端口向外暴露,其他端口拒绝
iptables -t filter -A INPUT -p TCP -m multiport --dports 20,80,443,3000:5000 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
iprange模块
2、指定一段连续的ip地址范围(iprange)
--src-range from[-to] : 源地址范围
--dst-range from[-to] : 目标地址范围
案例:要求192.168.15.1 - 192.168.15.10 之间所有的ip能够连接到192.168.15.81,其他拒绝
192.168.15.100
iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -d 192.168.15.81 -j ACCEPT
iptables it filter -A INPUT -p TCP -j DROP
string模块
3、匹配指定字符串(string)
--string pattern
--algo {bm|kmp}
案例:要求访问的数据包中包含HelloWorld的数据不允许通过
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
time模块
4、根据时间段匹配报文(time)
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--monthdays day[,day...]
--weekdays day[,day...]
这里使用的UTC时间 上海时间为东八区 所以要-8
案例:要求每天的12点到13点之间,不允许访问
iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP
icmp模块
5、icmp : 禁ping,默认本机无法ping别人、别人无ping自己
--icmp-type {type[/code]|typename}
echo-request (8) 请求
echo-reply (0) 回应
案例:要求别人不能ping本机,但是本机可以ping别人
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type "echo-request" -j DROP
connlimit模块
6、限制链接数,并发链接数(connlimit)
--connlimmit-upto n
--connlimit-above n
案例: 要求主机连接最多有两个
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit模块
7、针对 报文速率 进行限制。秒、分钟、小时、天。
--limit rate[/second|/minute|/hour|/day]
--limit-burst number
案例:要求限制速率在500k/s左右 (500k/s 相当于333个数据包)
iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)