防火墙Firewalld
防火墙Firewalld
firewalld概述
在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。
对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定要求,所以学习成本较高。但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少,所以建议刚接触
CentOS7系统的人员直接学习Firewalld。

需要注意的是:如果开启防火墙工具,并且没有配置任何允许的规则,那么从外部访问防火墙设备默认会被阻止,但是如果直接从防火墙内部往外部流出的流量默认会被允许。
firewalld 只能做和IP/Port相关的限制,web相关的限制无法实现

防火墙区域管理
那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换


需要注意的是Firewalld中的区域与接口
一个网卡仅能绑定一个区域, eth0 -->A区域 A区域-->eth0 eth1 eth2 但一个区域可以绑定多个网卡。 还可以根据来源的地址设定不同的规则。比如:所有人能访问80端口,但只有公司的IP才允许访问22端口。
防火墙配置策略
runtime 运行时: 修改规则马上生效,但如果重启服务则马上失效,测试建议。 permanent 持久配置: 修改规则后需要reload重载服务才会生效,生产建议。
# 1.查看默认区域
[root@web03 ~]# firewall-cmd --get-default-zone
public
# 2.查看活动区域
[root@db01 ~]# firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
# 3.查看当前默认区域的规则
[root@db01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# 4.查看指定区域规则
[root@db01 ~]# firewall-cmd --list-all --zone=drop
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@db01 ~]# firewall-cmd --list-all --zone=trusted
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
## 安装一个补全包
[root@db01 ~]# yum install -y bash-completion-extras
添加一个放行端口
[root@db01 ~]# firewall-cmd --add-port=8081/tcp --permanent
success
[root@db01 ~]# firewall-cmd --add-port=8081/tcp
success
添加一个放行服务
[root@db01 ~]# firewall-cmd --add-service=mysql
success
[root@db01 ~]# firewall-cmd --add-service=mysql --permanent
success
规则配置
- 1.使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是10.0.0.0/24网段则允
许
[root@db01 ~]# firewall-cmd --remove-service=ssh --remove-service=mysql --removeservice=dhcpv6-client
[root@db01 ~]# firewall-cmd --remove-port=8080/tcp --remove-port=8081/tcp --removeport=8083/tcp --permanent
[root@db01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
[root@db01 ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1
trusted
sources: 10.0.0.0/24
[root@db01 ~]# firewall-cmd --add-service=http --add-service=https
success
防火墙自定义服务
# 1.查找firewalld服务定义的目录
[root@db01 ~]# rpm -ql firewalld
/usr/lib/firewalld/services/
# 2.定义
[root@db01 ~]# cp /usr/lib/firewalld/services/{https,qqq}.xml
# 3.修改端口
[root@db01 ~]# vim /usr/lib/firewalld/services/qqq.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Secure WWW (HTTPS)</short>
<description>HTTPS is a modified HTTP used to serve Web pages when security is
important. Examples are sites that re
quire logins like stores or web mail. This option is not required for viewing pages
locally or developing Web pages. Y
ou need the httpd package installed for this option to be useful.</description>
<port protocol="tcp" port="8888"/>
</service>
# 4.重新加载防火墙
[root@db01 ~]# systemctl reload firewalld
防火墙端口转发
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议
>:toport=<目标端口号>:toaddr=<目标IP地址>
10.0.0.51 5555 转发到 10.0.0.7 80
firewall-cmd --add-forward-port=port=5555:proto=tcp:toport=80:toaddr=10.0.0.7
firewall-cmd --add-masquerade
富语言规则
firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册
语法:
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" toaddr="address"
举例:
- 1.比如允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问3306端口
accept | reject | drop
允许 拒绝 拒绝
同意 拒绝 不搭理
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=http accept'
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=3306 protocol=tcp accept'
- 2.默认public区域对外开放10.0.0.8能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.8/32 service name=ssh accept'
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop'
- 3.使用firewalld,允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务
[root@db01 ~]# firewall-cmd --add-rich-rule='rule family=ipv4 service name={http,https} accept'
- 4.当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口
本文来自博客园,作者:远方还很远,转载请注明原文链接:https://www.cnblogs.com/moqiqingyu/p/15173589.html

浙公网安备 33010602011771号