文章目录
- 一、操作目的和应用场景
- 二、平台及工具版本
- 三、操作步骤
一、操作目的和应用场景 最近做了一些CentOS 7系统的安全加固,涉及到firewalld防火墙的配置。以前对iptables比较熟悉,用firewalld比较少,所以特意学习了firewalld的用法,并在这里分享。
firewalld和iptables都是防火墙的前端配置工具,真正工作的是linux内核的netfilter。firewalld借鉴了其它防火墙系统/设备的理念,例如区域(zone)的概念以及配置信息管理的当前配置和持久配置(runtime和permanent),这使得防火墙规则的管理工作更加方便。
二、平台及工具版本 host系统:linux mint 19.3
虚拟机管理程序:virtualbox 6
虚拟机:CentOS 7
软件:firewalld
计算机硬件:小米笔记本电脑
三、操作步骤 (一)设置zone(区域)
1、zone的作用是什么?
firewalld与iptables相比,一个重要的特性就是使用了zone的概念。不同的zone对应不同类型的网络,不同的网络也对应着不同的包过滤规则集。这与windows 7防火墙的“网络位置”的功能类似。
例如windows 7防火墙有4个网络位置,分别是家庭网络、工作网络、公共网络和域,每个网络位置由于受到的威胁不同而具有不同的包过滤规则集。就以“远程协助”功能为例,不同网络位置允许“远程协助”进行入站连接的规则是不同的:
“域”网络位置关于“远程协助”的入站规则:
CentOS 7系统使用firewalld防火墙创建包过滤规则
“专用”网络位置(工作网络)关于“远程协助”的入站规则:
CentOS 7系统使用firewalld防火墙创建包过滤规则
“公用”网络位置(工作网络)关于“远程协助”的入站规则:
CentOS 7系统使用firewalld防火墙创建包过滤规则
而firewalld有公共、外部、非军事区等9个zone,另外也可以创建自定义的zone。每个zone也都拥有自己的包过滤规则集,用户也可以对zone中的已有规则进行增删改。firewalld根据网络接口当前关联的zone中的规则进行包过滤操作。防火墙规则的创建、修改和删除,实际上就是针对网络接口当前关联的zone中的服务、端口以及富规则等所进行的增删改操作。也可以通过将网络接口关联到新的zone来应用新的包过滤规则。
2、不同zone的含义
firewalld有9个内置的zone:
firewall-cmd –get-zones //查看防火墙全部的zone
CentOS 7系统使用firewalld防火墙创建包过滤规则
drop(丢弃) //任何接收到的连接都被丢弃,没有任何回复。只允许出站的网络连接。
block(阻塞) //任何接收的网络连接都被阻塞,并给出IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息作为回应。
public(公共) //用于连接公共区域。不能相信来自这个区域的连接不会危害你的计算机,只接受经过选择的连接。
external(外部) //如果Linux服务器作为路由器使用,可以将连接外部的接口的zone设置为external。不信任来自external网络的连接,只接受经过选择的连接。
dmz(非军事区) //用于非军事区的计算机。非军事区可以被公开访问,可以有限地进入内部网络,只接受经过选择的连接。
work(工作) //连接工作的区域,可以基本相信来自这个区域的连接不会危害你的计算机。只接受经过选择的连接。
home(家中) //用于家中的网络,可以基本相信来自home区域的计算机不会危害你的电脑。只接受经过选择的连接。
internal(内部) //用于内部网络,可以基本相信来自internal区域的计算机不会危害你的电脑。只接受经过选择的连接。
trusted(信任) //连接被信任的区域,接受所有连接。
3、修改firewalld的默认zone
//查看默认的zone
firewall-cmd –get-default-zone
CentOS 7系统使用firewalld防火墙创建包过滤规则
默认的zone是public
//将默认的zone设置为work
firewall-cmd –set-default-zone=work
CentOS 7系统使用firewalld防火墙创建包过滤规则
默认的zone已改成work
4、查看网卡的zone
//查看enp0s3网卡对应的zone
firewall-cmd –get-zone-of-interface=enp0s3
CentOS 7系统使用firewalld防火墙创建包过滤规则
enp0s3网卡的zone是work。同时也能看到,只有部分网卡被分配了zone。
5、将网卡添加到zone
//将virbr0接口加入到internal zone
firewall-cmd –zone=internal –add-interface=virbr0
CentOS 7系统使用firewalld防火墙创建包过滤规则
添加成功,现在virbr0接口的zone是internal。 6、修改网卡的zone
firewall-cmd –zone=block –change-interface=enp0s3
CentOS 7系统使用firewalld防火墙创建包过滤规则
enp0s3网络接口的zone已改为block 7、删除网卡的zone
firewall-cmd –zone=block –remove-interface=enp0s3
CentOS 7系统使用firewalld防火墙创建包过滤规则
删除zone之后,这个网卡就没有zone了。有人说删除网卡的zone之后会改为默认的zone,在这里不是这样的。 //重新将enp0s3的zone设置为work
firewall-cmd –zone=work –change-interface=enp0s3
CentOS 7系统使用firewalld防火墙创建包过滤规则
8、查看所有网卡所在的zone
firewall-cmd –get-active-zones
CentOS 7系统使用firewalld防火墙创建包过滤规则
(二)设置service(服务)
1、查看所有的服务
firewall-cmd –get-service
CentOS 7系统使用firewalld防火墙创建包过滤规则
可以看到forewall的中已定义的全部服务。 2、查看默认zone的服务
firewall-cmd –list-service
CentOS 7系统使用firewalld防火墙创建包过滤规则
默认的work区域有两个服务:dhcpv6-client和ssh
3、查看指定zone的服务
firewall-cmd –zone=区域名称 –list-service //查看drop区域的服务
CentOS 7系统使用firewalld防火墙创建包过滤规则
可以看到,不同的zone中的服务是不同的。
4、将服务添加到zone
firewall-cmd –zone=public –add-service=http //临时向public区域添加http服务
CentOS 7系统使用firewalld防火墙创建包过滤规则
firewall-cmd –zone=public –add-service=ftp –permanent //持久化(写入配置文件)
CentOS 7系统使用firewalld防火墙创建包过滤规则
从输出中可以看出,使用–permanent选项将服务添加到zone,实际上是将服务写入了zone的配置文件中。这样在重新读取zone的配置后才能生效,当前是不生效的。
可以将firewalld的配置文件理解成思科设备的startup-config。修改startup-config,对于running-configs是没有影响的。firewalld重读配置文件相当于copt running-config startup-config,当前生效的配置会被配置文件中的信息所覆盖从而不再生效。
5、从zone中删除服务
//从public区域删除ssh服务
firewall-cmd –zone=public –remove-service=ssh //删除内存中的策略
CentOS 7系统使用firewalld防火墙创建包过滤规则
public区域的ssh服务被删除。
firewall-cmd –zone=public –remove-service=ssh –permanent //删除配置文件中的策略
CentOS 7系统使用firewalld防火墙创建包过滤规则
public区域的ssh服务从配置文件中被删除。
(三)firewalld应用实例
1、通过向区域添加服务来创建防火墙规则
(1)要求
临时允许任意源地址访问enp0s3网卡监听的ftp、ssh、http服务
(2)实施方法
1)将指定的服务添加到enp0s3网卡对应的zone中
firewall-cmd –get-zone-of-interface=enp0s3 //查看网卡对应的zone
CentOS 7系统使用firewalld防火墙创建包过滤规则
firewall-cmd –zone=work –list-service //查看work区域中的服务
CentOS 7系统使用firewalld防火墙创建包过滤规则
已经包含了ssh服务,那么只要将ftp和http服务添加到work区域即可。
firewall-cmd –zone=work –add-service=http
firewall-cmd –zone=work –add-service=ftp
CentOS 7系统使用firewalld防火墙创建包过滤规则
服务添加成功。
(3)验证防火墙阻断效果
//服务器端运行netcat(两个窗口中运行),模拟ftp服务和http服务监听21和80端口。
nc -l -p 21
nc -l -p 80
//客户端访问
CentOS 7系统使用firewalld防火墙创建包过滤规则
客户端连接成功。 //服务端netcat监听2121端口
nc -l -p 2121
//客户端访问
CentOS 7系统使用firewalld防火墙创建包过滤规则
由于不存在允许访问2121端口的策略,客户端连接失败。 2、通过向区域添加端口范围来创建防火墙规则
(1)要求
永久允许访问enp0s3网卡监听的8080到8089端口
(2)实施方法
//查看网卡对应的zone
firewall-cmd –get-zone-of-interface=enp0s3
CentOS 7系统使用firewalld防火墙创建包过滤规则
//由于是自定义端口,现有的服务无法与之对应。可直接向zone中添加端口范围
firewall-cmd –zone=work –add-port=8080-8089/tcp –permanent
CentOS 7系统使用firewalld防火墙创建包过滤规则
自定义的端口范围已经写入了配置文件。 (3)验证防火墙阻断效果
//服务端使用netcat监听8080端口
CentOS 7系统使用firewalld防火墙创建包过滤规则
//客户端访问
CentOS 7系统使用firewalld防火墙创建包过滤规则
无法访问,显然是被防火墙阻断了。这是因为–permanent只是将规则写入了配置文件,内存中还没有修改。需要将配置文件的内容重新读入内存才能生效。 //重新读取firewall防火墙配置
firewall-cmd –reload
CentOS 7系统使用firewalld防火墙创建包过滤规则
//客户端连接
CentOS 7系统使用firewalld防火墙创建包过滤规则
连接成功。说明新的规则生效了。但还是需要注意,重新装载配置后,前面临时设置的那些规则就都失效了。
CentOS 7系统使用firewalld防火墙创建包过滤规则
CentOS 7系统使用firewalld防火墙创建包过滤规则
3、通过向区域添加富规则(rich-rules)来创建防火墙规则
(1)要求
只允许192.168.1.3访问本地的23端口,拒绝其它IP对访问23端口。
(2)实施方法
//允许192.168.1.3访问23端口
firewall-cmd –zone=work –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.3″ port port=”23″ protocol=”tcp” accept’
//拒绝任意IP访问23端口
firewall-cmd –zone=work –add-rich-rule=’rule family=”ipv4″ source address=”0.0.0.0″ port port=”23″ protocol=”tcp” reject’
//查看富规则
firewall-cmd –zone=work –list-rich-rules
CentOS 7系统使用firewalld防火墙创建包过滤规则
(3)验证防火墙阻断效果
//服务器监听23端口
nc -l -p 23
//客户端直接访问
nping -tcp -p 23 -c 1 192.168.1.7
-p //指定目标端口
-c //指定发送数据包的数量
//客户端修改源地址后访问
nping -tcp -p 23 -c 1 -S 192.168.1.100 192.168.1.7
-S //将任意IP指定为源地址
//服务器端针对23端口抓包
CentOS 7系统使用firewalld防火墙创建包过滤规则
可以看到,当使用防火墙允许的源地址访问时,服务器的23端口给出回应。但是当使用其它的IP作为源地址访问时,服务器不给出回应。这说明防火墙规则生效了。 四、其它
(一)图形界面
上面介绍了通过命令行配置firewalld的基本方法,也可以运行图形界面程序进行配置:
firewall-config
CentOS 7系统使用firewalld防火墙创建包过滤规则
理解了原理之后配置方法就比较简单了,这里不再详述。
(二)默认zone
针对默认zone,在使用firewall-cmd命令进行操作时可不指定zone的名称
firewall-cmd –add-service=https //向默认zone中添加服务
firewall-cmd –list-service //查看默认zone中的服务
CentOS 7系统使用firewalld防火墙创建包过滤规则
由于网络接口enp0s3关联到了默认的work区域,那么允许访问本地的https服务这条规则自然就生效了。 *本文作者:regitnew,转载请注明来自FreeBuf.COM
|