防火墙管理
Linux防火墙架构概念
Linux内核中的netfilter模块,是网络流量操作(数据包过滤、网络地址转换和端口转发)的框架。
iptables和firewall-cmd都是防火墙的管理工具

iptables管理防火墙

iptables 集成在Linux内核中,4表5链
-
filter表:过滤规则表。控制数据包的进出和转发,相关链路有INPUT、OUTPUT、FORWARD
-
nat表:地址转换规则表。相关链路有PREROUTING、POSTROUTING、INPUT、OUTPUT
-
mangle表:修改数据标记为规则表。修改数据包中的原数据,相关链路有PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
-
raw表:跟踪数据表规则表,控制nat表连接追踪机制的启用状态。相关链路有PREROUTING、OUTPUT
- INPUT 入站数据过滤
- OUTPUT 出站数据过滤
- FORWARD转发数据过滤
- PREROUTING路由前过滤
- POSTROUTING路由后过滤

iptables使用
- 语法:
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
Iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]

- 操作命令
- -A 添加规则
- -I num 插入到第几条规则
- -D [num] 删除规则
- -P 设置默认策略用
- -F 清空规则链
- -L 列出规则
- -n 以数字的形式显示ip和port,配合L使用
- -v 显示详细信息
iptables匹配规则
- 流入、流出接口(-i、-o) nat表
-i ens33 匹配是否从网络接口 ens33 进来
-i ppp0 匹配是否从网络接口 ppp0 进来
-o 匹配数据流出的网络接口 例如: -o ens33 -o ppp0
- 来源、目的地址(-s、-d) 可以是 IP、 网段、域名,也可空(任何地址)
s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包
例:iptables -A INPUT -s 192.168.0.1 -j DROP
- 协议类型 (-p) 可以是 TCP、UDP、ICMP 等,也可为空
-p tcp
-p udp
-p icmp --icmp-type 类型
- 来源、目的端口(--sport、--dport)可以是个别端口,可以是端口范围 配合-p协议类型


iptables动作
- ACCEPT
iptables -A INPUT -j ACCEPT
- DROP
iptables -A INPUT -j DROP
- REJECT
iptables -A INPUT -s 192.168.2.2 -j REJECT
- SNAT (nat 表的 POSTROUTING 链)
-j SNAT --to IP[-IP] [:端口-端口]
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 172.24.8.3
- DNAT(nat 表的 PREROUTING 链)
-j DNAT --to IP[-IP] [:端口-端口]
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 81 -j DNAT --to 192.168.0.1:81
- MASQUERADE 地址伪装 动态源地址转换
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens33 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址伪装,转换成 ens33 上的 IP 地址。ens33 为路由 器外网出口 IP 地址
路由转发(SNAT,DNAT)
- 开启内核
vim /etc/sysctl.conf #在文件未行添加如下 net.ipv4.ip_forward = 1
sysctl -p 命令使配置生效
- 设置SNAT、DNAT规则
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
- 内网主机网卡的配置

firewalld

firewalld 引用zone区域的概念
zone 默认共有 9 个,block ,dmz ,drop external, home, internal ,public , trusted , work.
firewalld有 runtime和premanent 两种模式,runtime修改规则立马生效,但重启失效,premanent持久模式修改规则后需要重载规则生效,重启服务依然有效

firewalld配置文件:
/usr/lib/firewall/ 系统配置
/etc/firewalld/ 用户配置
4种方式
- RHEL8 web控制台界面
要启动服务 9090端口
- firewall-config图形控制台
rhel8 需要安装软件包
- firewall-cmd命令行工具
- 编辑xml文件修改 /etc/firewalld/zone /usr/lib/firewalld/zones
firewall-cmd命令行管理
常用参数
| 参数 | 作用 |
|---|---|
| --add-interface=网卡名称 --zone= | 将该来自网卡的流量导向某个区域 |
| --change-interface=网卡名称 --zone | 改变网卡的作用区域 |
| --get-services | 显示预定义的服务 |
| --add-servece=服务名 | 设置默认区域允许该服务的流量 |
| --add-port=端口号/协议 | 设置默认区域允许该端口的流量 |
| --remove-service=服务名 | 将服务从默认区域移除 |
| --permanent | 配置永久生效 |
| --reload | 重载规则 |
防火墙规则匹配
firewalld对于收到的访问请求匹配规则:
- source、来源地址
- interface、接受请求的网卡
- firewalld配置的默认区域
匹配优先级依次降低,一旦匹配到规则就中止匹配,按照匹配到的规则去执行
查看与设置防火墙规则
firewall-cmd --zone=home --list-all #查看某个区域的规则
firewall-cmd --list-all #查看默认区域的规则

- 设置规则
firewall-cmd --permanent --add-source=ip --zone= #绑定地址到某个区域
firewall-cmd --permanent --remove-source=ip --zone #移除
--change-source=ip #修改地址
--add-interface=ens160 #绑定网卡到区域
--set-default-zone drop #设置默认的区域
--set-target=[default|accept|reject|drop] --zone #设置区域的默认目标
统一管理多个端口
写xml文件
可以将系统的xml文件/usr/lib/firewalld/services/*.xml拷贝到/etc/firewalld/services/下,自行修改即可
路由转发
开启路由转发功能
firewall-cmd --permanent --add-masquerade
执行命令会自动开启内核的路由转发
- 端口转发
firewall-cmd --permanent --add-forward-port=port=888:proto=tcp:toport=80
- 数据包转发
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.2.208
富规则
man 5 firewalld.richrule 查看语法


浙公网安备 33010602011771号