firewalld防火墙基本配置
1.1区域概念
firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone)。然后要所数据包的源IP地址或传入的网络接口条件等将流量传入相应区域。每个区域都定义了自己打开或关闭的端口服务列表。其中默认区域为public区域,trusted区域默认允许所有流量通过,是一个特殊的区域。
区域名称 | 默认配置说明 |
---|---|
Trusted | 允许所有的传入流量 |
Home | 允许与ssh、mdns、ipp-client、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝 |
Internal | 默认值时与home区域相同 |
Work | 允许与ssh、ipp-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝 |
Public | 允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。 |
External | 允许与ssh预定义服务匹配的传入流量,其余均拒绝。默认将经过此区域转发的IPv4地址传出流量进行地址伪装。 |
Dmz | 允许与ssh预定义服务匹配的传入流量,其余均拒绝。 |
Block | 拒绝所有传入流量 |
Drop | 丢弃所有传入流量 |
用户可以根据具体环境选择使用区域。管理员也可以对这些区域进行自定义,使其具有不同的设置规则。
在流量经过防火墙时,firewalld防火墙会对传入的每个数据包进行检查,如果此数据包的源地址关联到特定的区域,则会应用该区域的规则对此数据包进行处理,如果该源地址没有关联到任何区域,则将使用传入网络接口所在的区域规则进行处理。如果流量与不允许的端口、协议或者服务匹配,则防火墙拒绝传入流量。
1.2字符管理工具
firewall-cmd是firewalld防火墙自带段字符管理工具,可以用来设置firewalld防火墙段各种规则。
firewalld的两种状态:
- runtime(正在运行生效的状态):在runtime状态添加新的防火墙规则,这些规则会立即生效,但是重新加载防火墙配置或者重启系统后这些规则将会失效。
- permanent(永久生效的状态):在permanent状态添加新的防火墙规则,这些规则不会马上生效,需要重新加载防火墙配置或者重启系统后生效。
例子:
firewall-cmd --add-service=http ----zone=public
runtime状态,立即生效,重载或重启消失
firewall-cmd --add-service=http ----zone=public --permanent permanent状态,不立即生效,重载或重启生效
firewall-cmd命令 | 说明 |
---|---|
–get-default-zone | 查看当前默认区域 |
–get–active-zones | 列出当前正在使用的区域及其所对应的网卡接口 |
–get-zones | 列出所有可用的区域 |
–set-default-zone= | 设置默认区域(注意此命令会同时修改运行时配置和永久配置) |
–add-source=[–zone=] | 将来自IP地址或网段的所有流量路由到指定区域,没有指定区域时使用默认区域。 |
–remove-source=[–zone=<ZONE] | 从指定区域中删除来自IP地址或网段的所有路由流量规则,没有指定区域时使用默认区域。 |
–add-interface=[–zone=<ZONE] | 将来自该接口的所有流量都路由到指定区域。没有指定区域时使用默认区域。 |
–change-interface=[–zone=<ZONE] | 将接口与指定区域做关联,没有指定区域时使用默认区域。 |
–list-all[–zone=<ZONE] | 列出指定区域已配置接口、源、服务、端口等信息,没有指定区域时使用默认区域。 |
–add-service=[–zone=<ZONE] | 允许到该服务的流量通过指定区域,没有指定区域时使用默认区域。 |
–remove-service=[–zone=<ZONE] | 从指定区域的允许列表中删除该服务,没有指定区域时使用默认区域。 |
–add-port=<PORT/PROTOCOL>[–zone=<ZONE] | 允许到该端口的流量通过指定区域,没有指定区域时使用默认区域。 |
–remove-port=<PORT/PROTOCOL>[–zone=<ZONE] | 从指定区域的允许列表中删除该端口,没有指定区域时使用默认区域。 |
2具体案例
2.1区域管理
-
查看默认区域:
firewall-cmd --get-default-zone
-
列出当前正在使用的区域及其所对应的网卡接口
firewall-cmd --get-active-zones
-
列出所有可用的区域
firewall-cmd --get-zones
-
设置默认区域
firewall-cmd --set-default-zone=block
2.2服务管理
-
查看预定义服务
firewall-cmd --get-services
-
添加http服务到public区域
firewall-cmd --add-service=http --zone=public --permanent systemctl restart firewalld
-
查看public区域已配置的规则
firewall-cmd --list-all --zone=public
-
移除pyblic区域的http服务,不使用–zone制定区域时使用默认区域
firewall-cmd --remove-service=http --permanent --zone=public systemctl restart firewalld
-
将多个服务添加到某一个区域,不添加–permanent选项表示立即生效的临时设置
firewall-cmd --add-service=http --add-service=https systemctl restart firewalld
2.3端口管理
-
允许TCP的3306端口到public区域
firewall-cmd --add-port=3306/tcp
-
从public区域将TCP的3306端口移除
firewall-cmd --remove-port=3306/tcp
-
允许某一范围的端口,如允许UDP的2048-2050端口到public区域
firewall-cmd --add-port=2048-2050/udp --zone=public
-
使用–list-port查看加入的端口操作是否成功
firewall-cmd --list-ports
2.4伪装IP
- 地址伪装:
通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包
源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改
为原始主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT)。IP地址伪装仅支持ipv4,不支持ipv6。
-
相关配置:
firewall-cmd --query-masquerade # 检查是否允许伪装IP firewall-cmd --permanent --add-masquerade # 允许防火墙伪装IP firewall-cmd --permanent --remove-masquerade# 禁止防火墙伪装IP
2.5端口转发
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
-
相关配置:
firewall-cmd --permanent --add-masquerade firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 firewall-cmd --add-port=8080/tcp firewall-cmd --remove-service=http
- 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
2.6多区域配置
-
一个接口只能对应一个区域,将接口与指定区域关联
firewall-cmd --change-interface=ens75 --zone=drop
-
根据不同的访问来源网段,设定至不同的区域规则
firewall-cmd --add-source=192.168.75.0/24 --zone=public firewall-cmd --add-source=192.168.85.0/24 --zone=drop firewall-cmd --get-active-zones
-
建议配置方案
将所有接口划分到对应的区域,
根据网段配置至不同的区域,
不同的区域配置不同的规则。