防火墙 的定义
防火墙是一种由硬件和软件组合而成,在内部网和外部网之间,专有网与公共网之间构造的保护屏障,用以保护用户资料和信息安全的一种技术
防火墙的作用
主要在于及时发现并处理计算机网络运行时可能存在的安全风险,数据传输等问题,从而实现对计算机不安全网络因素的阻断。确保网络正常运行,保障信息安全,为用户提供良好的网络体验
防火墙分类
逻辑上分类:主机防火墙和网络防火墙
主机型防火墙:针对单个主机进行防护
网络型防火墙:针对网络进行保护,保护内部的局域网
物理上分类:硬件防火墙和软件防火墙
硬件防火墙:在硬件上实现进行防火墙功能,性能高,成本高
软件防火墙:依靠软件来实现防火墙功能,性能低,成本低
Linux包过滤防火墙
Linux防火墙是一种功能强大的信息包过滤系统
net filter
是一种内核中的一种包过滤功能体系
称为Linux防火墙“内核态”
iptables
位于/sbin/iptables,是防火墙规则的管理工具
称为;inux防火墙的“用户态”
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对数据包内的IP地址,端口等信息的处理上
IPtables的表,链结构
规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4规则表
raw表:是否对数据包进行状态追踪
mangle:是否为数据包设置标记
nat表:是否修改数据包中的源,目标iIP地址或端口号
filter表:是否放行该数据包(过滤)
规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT: 处理入站数据包
OUTPUT:处理出战数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
默认的表,链结构示意图![](https://i-blog.csdnimg.cn/direct/5580196fb7ee4b1db1c5153ddfdd456d.jpeg)
数据包过滤的匹配流程
规则表之间的顺序
raw→mangle→nat→filter
规则链之间的顺序
入站:PREROUTING→INPUT
出站:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
匹配流程示意图![](https://i-blog.csdnimg.cn/direct/2c707cdd2213422890f4c0f1abad9987.jpeg)
编写防火墙规则
数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
1.iptables安装
1.确认开启iptables防火墙(要使用iptables防火墙,要确认firewall防火墙关闭)
systemctl status firewalld //查看firewalld的运行状态
systemctl stop firewall //停止firewalld服务
systemctl disable firewalld //设置开机默认关闭
2.使用yum安装iptables
yum -y install iptables-services iptables //安装软件包
3.启动防火墙,并设置开机自启动
systemctl start iptables.service
systemctl enable iptables
2.基本语法,数据包控制
查询具有的iptables规则(-t指定查询表)
-nL:查询
[root@bogon ~]# iptables -t raw -nL //查看指定raw表
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
-F :清空防火墙规则
iptables -t raw -F //清理指定raw表
-A -I 添加规则
iptables -t filter -A INPUT -p icmp -j REJECT
//-t filter: 指定了要操作的表为 filter。iptables 防火墙系统中有多个表,但 filter 表是最常用的,它用于处理进入(INPUT)、转发(FORWARD)和离开(OUTPUT)的数据包。
//-A INPUT: 这意味着向 INPUT 链(chain)追加(Append)一条新规则。INPUT 链用于处理到达本地系统的数据包。
//-p icmp: 这指定了这条规则应用于 ICMP 协议的数据包。ICMP 是“Internet Control Message Protocol”的缩写,常用于网络诊断(如 ping 命令)和其他网络控制功能。
//-j REJECT: 这指定了当数据包与这条规则匹配时应该采取的动作。REJECT 意味着数据包将被拒绝,并且会向发送方返回一个错误消息(例如,对于 ICMP 数据包,这可能是一个“主机不可达”或“端口不可达”的消息
-D 删除防火墙规则
[root@bogon ~]# iptables -t filter -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
2 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
3 DROP udp -- 0.0.0.0/0 0.0.0.0/0
4 DROP udp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@bogon ~]# iptables -t filter -D INPUT 3
-P :设置默认规则
iptables -t filter -P INPUT DROP //设置默认规则为丢弃
规则匹配
通用匹配
协议匹配
-p 协议名
[root@bogon ~]# iptables -t filter -A INPUT ! -p tcp -j ACCEPT
地址匹配
iptables -t filter -A INPUT -S 192.168.2.1 -j ACCEPT
iptables -t filter -A INPUT -S 192.168.2.0/24 -J ACCEPT
-s源地址,-d目的地址
接口匹配
iptables -t filter -I INPUT -i ens33 -s 192.168.2.0 -p udp -j ACCEPT
-i入站网卡,-o出站网卡
常用的隐含匹配条件
端口匹配:--sport 源端口, --dport 目的端口
允许为网段 192.168.4.0/24 转发 DNS 查询数据包
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
ICMP类型匹配:--icmp-type ICMP类型
禁止从其他主机 ping本机,但是允许本机 ping 其他主机
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP
常用的显示匹配条件
多端口匹配:-m multiport --soprts 源端口列表
-m multiport --dports 目的端口列表
允许本机开放 25、80、110、143 端口
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
IP范围匹配: -m ipranage --src-range IP范围
禁止转发源 IP 地址位于 192.168.4.21 与 192.168.4.28 之间的 TCP数据包
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j DROP
MAC地址匹配: -m mac --mac-source MAC地址
根据 MAC 地址封锁主机,禁止其访问本机的任何应用
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
状态匹配: -m state --state连接状态
禁止转发与正常 TCP 连接无关的非--syn 请求数据包(如伪造的网络攻击数据包)
[root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP