防火墙基础
- firewalld:守护进程
- firewall-cmd:管理工具
- nftables:8的防火墙架构,7之前版本依然使用iptables的netfilter
默认规则
- 经过防火墙进入的流量默认是阻止的
- 经过防火墙流出的流量默认是允许的
- 默认zone为public
- 默认接口都属于public域
原则:
- 数据包进入必须要属于一个域(zone)才能被转发
- 数据包匹配zone的3个条件顺序
- 源地址zone匹配
- 接口zone匹配
- 默认zone匹配
- 配置都是临时生效,永久生效要加–permanent,重新加载永久生效–reload
- firewall使用域(zone)定义规则,而iptables使用链(Chain)
终端命令
查看系统自带的zone
- drop 输入的数据包默认经过防火墙会丢弃并且无回应,只有传出网络连接可用
- block 拒绝所有出入的数据包并且进行回应一条禁止主机ICMP的消息,只有传出网络连接可用
- public 只接受被选择的网络连接,用于公共区域
- extermal 去外部网络的时候会进行地址的伪装,只接受被选择的网络连接
- dmz 外部部分指定的地区访问内部网络,只接受被选择的网络连接
- work 处在工作区域内的计算机,只接受被选择的传入网络连接
- home 处在家庭区域的计算机,只接受被选择的传入网络连接
- internal 对于处在你内部网络的计算机,只接受被选择的传入网络连接
- trusted 所有网络连接都接受
详细zone规则
firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160 ens224
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
规则理解
- target:在zone中没有匹配到规则的数据包最终走的规则
- default:走默认zone,一般为public域
- ACCEPT:全部通过
- DROP:丢弃包,无ICMP回应
- REJECT:拒绝包,返回ICMP回应
- sources: 源地址 (ipv4/ipv6)
- interfaces:加入到当前zone的接口,默认一个接口必须属于一个zone下
firewall-cmd --get-default-zone
查看默认zone
firewall-cmd --get-zone-of-interface=ens160
查看网卡默认的zone
决定一个数据包属于哪个zone,就看sources和interfaces的配置规则
基础规则
实现粗精度基本防火墙控制需求
- services: 服务 (http、ssh…)
- ports: 端口号(1-35535)
- protocols: 协议(tcp/udp)
firewall-cmd --add-service=http --permanent --zone=public
永久添加http服务到piblic域中
firewall-cmd --add-port=80/tcp --permanent --zone=public
永久添加80端口到piblic域中,注意端口需要添加协议
firewall-cmd --add-protocol=tcp --permanent --zone=public
firewall-cmd --reload
每次配置都需要执行加载,不然不会生效
--remove-
移除规则
富规则
实现细精度使用防火墙控制需求
- rich rules: 实现个性化到某个IP、某个端口、某个服务、某个动作
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.119.131 port protocol=tcp port=80 accept'
firewall-cmd --reload
允许源地址是192.168.119.131 访问端口80 协议是tcp
masquerade规则
实现SNAT的功能,也就是源nat转换
应用场景:同网段内由于权限的问题,只有一台电脑A可以访问固定的资源,要想其他机器都可以访问,就需要使用masquerade,把流量转发到可以访问电脑A,利用masquerade进行源地址转换后就能实现同网段内的其他机器都可以访问资源
- masquerade:开启或者关闭
条件必须为同网段,因为需要把网关配置成可以访问资源的IP,这样就把流量全部转发到这台机器上进行masquerade,而跨网段是无法实现的,因为跨网段需要借助网关
1、修改网关IP为实现SNAT的电脑IP
2、开启SNAT的功能
firewall-cmd --add-masquerade --permanent --zone=public
forward-ports规则
实现DNAT功能,也就是端口映射
应用场景:常见为公网的环境,外部需要访问内部资源情况下,需要把公网地址进行DNAT,由公网IP实现内部的转发访问
- forward-ports
firewall-cmd --permanent --add-forward-port=port=11111:proto=tcp:toport=80:toaddr=192.168.119.129
firewall-cmd --reload
把端口11111协议tcp的报文转发到192.168.119.129的80端口上