学完这篇文章,你就会用firewalld防火墙啦
学完这篇文章,你就会用firewalld防火墙啦
ZhangCurry学完这篇文章,你就会用firewalld防火墙啦
firwalld是个啥
firewalld是一个Linux上防火墙服务守护进程,准确的是红帽系的Linux上的一个防火墙管理器,可以使用firewalld来配置大多数典型情况所需的数据包过滤,firewalld使用区、策略和服务的概念来简化流量管理。区域以逻辑方式分隔网络。网络接口和源可以分配给区。策略用于拒绝或允许区域间的流量流。防火墙服务是预定义的规则,覆盖了允许特定服务的传入流量的所有必要设置,并在区域内应用。
02
防火墙的区域
刚才也说了,firewalld是有区域的概念,现在许多的硬件防火墙也有划分区域,例如华为防火墙,可以手动的某一个接口或者多个接口划入到指定的区域下,添加策略时需要选择区域,例如从UNtrust到trust区域。
firewalld默认区域划分如下:
—block
适合于:任何传入的网络连接都会被拒绝,并对 IPv4 显示 icmp-host-prohibited 消息,对 IPv6 显示 icmp6-adm-prohibited 消息。
接受:只有从系统内启动的网络连接。
—dmz
适用于:DMZ 中可使用访问您的内部网的有限权限公开访问的计算机。
接受: 只有所选的传入连接。
—drop
适合于:任何被丢失,但没有任何通知的传入网络数据包。
接受:只有传出的网络连接。
—external
适用于:启用了伪装的外部网络,特别是路由器。不信任网络上其他计算机的情况。
接受: 只有所选的传入连接。
—home
适用于:家庭环境,基本上信任网络上的其他计算机。
接受: 只有所选的传入连接。
—internal
适用于:内部网络,基本上信任网络上其他计算机的。
接受: 只有所选的传入连接。
—public
适用于:公共区域,不信任网络上的其他计算机。
接受: 只有所选的传入连接。
—trusted
接受:所有网络连接。
—work
适用于:工作环境,信任大多数网络上的其他计算机。
接受: 只有所选的传入连接。
当接口连接被添加到 NetworkManager 中时,它们会被分配到默认区。初次安装时firewalld 中的默认区域是 public 区域。同时可以更改默认区域。
同时firewalld有如下原则
1、流量只流入一个区域。
2、流量只流出一个区域。
3、一个区域定义一个信任级别。
4、默认允许区域内流量(在同一区域内)。
5、默认拒绝区域内流量(从区域到区域)。
使用命令查看默认区域
1 | firewall-cmd --get-default-zone |
设置新的默认区
1 | firewall-cmd --set-default-zone 区域名 |
将接口分配到区域
1 | firewall-cmd --zone=public --change-interface=ens4f0 --permanent |
03
添加一条简单防火墙策略
我们再添加防火墙策略时网络需要某些参数,例如源IP地址、目的IP地址、目的端口、协议、动作等等这些参数,一般就只需要者四种参数,源端口一般是不需要的,因为普通的请求发起方往往源端口是随机的,无法指定,只有一些特殊的服务源端口才是固定。
添加一条简单的策略
例如要放开访问本机的22号端口,那么策略可以这样使用:
这样就放开访问本机的ssh服务,如果你的ssh服务改了默认的端口,那么就不能用这个了,就需要改成下边这样的:
1 | firewall-cmd --zone=public --add-port=22/tcp |
如果你想要你的这条策略永久保存,那么还应该加上一个永久保存的参数,不然你下次重启服务器这条策略就没了,应该如下:
1 | firewall-cmd --zone=public --add-service=ssh --permanent |
在后边加一条–permanent参数即可
04
使用IP地址对象组
现在防火墙都有地址对象、地址组这个功能,就是可以把许多地址加到一个组里,然后策略里面去引用这个地址组,firewalld也有这个。
首先我们创建一个地址组,地址组名称为test123
1 | firewall-cmd --permanent --new-ipset=test123 --type=hash:ip |
然后我们加入我们要增加10.10.10.0/24、20.20.20.0/24这两个个地址段,又不想单独加一条策略,那么就需要将两个地址段加入到这个组内,然后引用。
1 | firewall-cmd --permanent --ipset=test123--add-entry=10.10.10.0/24firewall-cmd --permanent --ipset=test123--add-entry=20.20.20.0/24 |
创建一条引用的策略
1 | firewall-cmd --permanent --zone=public --add-source=ipset:test123 |
重新载入防火墙配置启用这条策略
1 | firewall-cmd --reload |
然后使用firewalld –get-ipsets就可以看到
看下这个地址组里面有那些地址
看看public这个区域的策略情况
大家可能也注意到了,我们上述添加策略时只用了一部分参数,例如区域、源地址或者目的端口,那么为啥源地址和源端口不一起用呢,那是因为firewalld默认上同时只支持一个参数的变化,两个参数会造成互斥,不像iptables可以加一条参数,有许多参数,当然firewalld也有办法添加多个参数的策略,那就是“富规则”,下一篇文章学习这个富规则的用法。



