Linux 下 firewalld 防火墙服务设置

Linux 下 firewalld 防火墙服务设置

  • firewalld简述
    动态防火墙后台程序firewalld提供了一个动态管理的防火墙用以支持网络“zones”,以分配对一一个网络及其相关链接和界面一定程度的信任。它具备对IPV4和IP v6防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
  • 相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板)
    ,用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。

1. firewalld 中常用的区域名称及策略规则

区域 默认策略规则
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、amba-client 与 dhcpv6-client 服务相关,则允许流量
internal 等同于 home 区域
work 拒绝流入的流量,除非与流出的流量数相关;而如果流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关

2. firewall-cmd 命令中使用的参数以及作用

参数 作用
–get-default-zone 查询默认的区域名称
–set-default-zone=<区域名称> 设置默认的区域,使其永久生效
–get-zones 显示可用的区域
–get-services 显示预先定义的服务
–get-active-zones 显示当前正在使用的区域与网卡名称
–add-source= 将源自此 IP 或子网的流量导向指定的区域
–remove-source= 不再将源自此 IP 或子网的流量导向某个指定区域
–add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
–change-interface=<网卡名称> 将某个网卡与区域进行关联
–list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
–list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
–add-service=<服务名> 设置默认区域允许该服务的流量
–add-port=<端口号/协议> 设置默认区域允许该端口的流量
–remove-service=<服务名> 设置默认区域不再允许该服务的流量
–remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
–reload 刷新火墙配置(不中断不符合火墙要求但正在进行的操作)
–complete-reload 完全刷新火墙配置(终端修改后不符合的操作将会中断)

3. 操作示例

ip 及网络接口控制

 [root@client ~]# firewall-cmd --add-source=172.25.254.39 --zone=trusted 
 #将172.25.254.39加入到 trusted 中
 可通过 http 服务进行测试,以及 elinks 服务进行查看
 [root@client ~]# firewall-cmd --remove-source=172.25.254.39 --zone=trusted 
 #将172.25.254.39 从 trusted 中移除
 [root@client ~]# firewall-cmd --list-interfaces  
 #列出网络接口
 [root@client ~]# firewall-cmd --get-zone-of-interface=eth0   
 #查看接口所在区域
 [root@client ~]# firewall-cmd --change-interface=eth0 --zone=trusted  
 #修改接口所在区域
 [root@client ~]# firewall-cmd --remove-interface=eth0 --zone=trusted  
 #将接口从所在区域移除
 [root@client ~]# firewall-cmd --add-interface=eth0 --zone=public      
 #将接口添加到指定区域
 #以上操作是临时的,在重启防火墙,或者重新加载防火墙时将会失效
 [root@client ~]# firewall-cmd --reload     #刷新火墙配置

 执行下述命令永久修改火墙信息
 永久修改信息,在命令前添加 --permanent 
 [root@client ~]# firewalld-cmd --permanent --命令

执行如下:
将 ip 为 172.25.151.150 的主机加入 trusted 区域
Linux 下 firewalld 防火墙服务设置_第1张图片)
通过 httpd 服务进行测试
主机 172.25.151.150 访问本机 httpd 服务,成功
Linux 下 firewalld 防火墙服务设置_第2张图片
主机 172.25.151.250 访问本机 httpd 服务,失败
Linux 下 firewalld 防火墙服务设置_第3张图片
将 ip 为 172.25.151.150 的主机从 trusted 区域移除
Linux 下 firewalld 防火墙服务设置_第4张图片
查看网络接口信息
这里写图片描述
修改网络接口所在区域
Linux 下 firewalld 防火墙服务设置_第5张图片
将网络接口从区域移除
Linux 下 firewalld 防火墙服务设置_第6张图片
将网络接口添加到指定区域
Linux 下 firewalld 防火墙服务设置_第7张图片

端口与服务

 [root@client ~]# firewall-cmd --add-service=http --zone=public   
                # 为指定区域添加服务
 [root@client ~]# firewall-cmd --add-port=8080/tcp --zone=public  
                # 为指定区域添加端口
 [root@client ~]# firewall-cmd --remove-service=http --zone=public  
                # 将服务从指定区域中移除
 [root@client ~]# firewall-cmd --remove-port=8080/tcp --zone=public 
                # 将端口从指定区域中移除
 #以上操作是临时的,在重启防火墙,或者重新加载防火墙时将会失效
 #永久修改信息,在命令前添加 --permanent

执行如下:
为指定区域添加服务
Linux 下 firewalld 防火墙服务设置_第8张图片
为指定区域添加端口
Linux 下 firewalld 防火墙服务设置_第9张图片
删除指定区域的指定端口及服务
Linux 下 firewalld 防火墙服务设置_第10张图片

防火墙的配置文件在 /etc/firewalld/ 中,可通过直接修改配置文件来进行对防火墙的操作

 修改 /etc/firewalld/zones/public.xml public区域的配置文件

  1 
  2 <zone>
  3   <short>Publicshort>
  4   <description>For use in public areas. You do not trust the other
   compu    ters on networks to not harm your computer. Only selected 
   incoming conne    ctions are accepted.description>
  5   <service name="dhcpv6-client"/>
  6   <service name="ssh"/>
  7   <service name="http"/>  #添加 http 服务
  8 zone>

将http 服务添加到 public 区域中,重新加载防火墙,或者重启防火墙后,
可通过 firewall-cmd --list-all --zone=public 进行查看

执行如下:
编辑配置文件
Linux 下 firewalld 防火墙服务设置_第11张图片
进行查看
Linux 下 firewalld 防火墙服务设置_第12张图片

防火墙的属性信息在 /usr/lib/firewalld/ 中 ,如防火墙中添加服务,是以服务来代替端口相关的信息内容,若是单纯修改服务端口号,就算允许服务,也无法进行操作

 #示例:
 查看 /usr/lib/firewalld/services/http.xml 
 内容如下:
  1 xml version="1.0" encoding="utf-8"?>
  2 
  3   <short>WWW (HTTP)short>
  4   HTTP is the protocol used to serve Web pages. If you 
  plan     to make your Web server publicly available, enable this 
  option. This op    tion is not required for viewing pages locally or 
  developing Web pages.<    /description>
  5   "tcp" port="80"/>  #端口号为 80
  6 

 修改 httpd 主配置文件 /etc/httpd/conf/httpd.conf
 编辑第 42 行,修改端口为 8080
 42 Listen 8080
 重启服务后,不可访问

 防火墙中规定以 http 服务来映射 80 端口 若是修改 http 服务的配置文件,将 http 的端口修改为
 8080 重启httpd 服务后,将无法访问 httpd 服务。由此可知火墙限制服务是通过端口来限制而不是服务本身

执行如下:
修改端口前访问主机的 httpd 服务
Linux 下 firewalld 防火墙服务设置_第13张图片
编辑配置文件,修改 httpd 服务端口
这里写图片描述
重启服务,并查看防火墙,允许 http 服务
Linux 下 firewalld 防火墙服务设置_第14张图片
此时进行访问,失败
Linux 下 firewalld 防火墙服务设置_第15张图片

4. Firewalld 的 direct rules 与 rich rules

4.1 direct rules

  • 直接选项,直接选项可以更直接地访问防火墙。这些选项要求用户了解基本的iptables概念,直接选项只能做为最终选择当 –add-service 或者 –add-rich-rule 不能使用时,才应该还是用 direct options
  • 通过firewall-cmd工具,可以使用–direct选项在运行时间里增加或者移除链。如果不熟悉iptables ,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用

如为本机filter 表的INPUT 链中添加内容,允许 172.25.131.250 主机访问本机的 80 端口
执行如下

 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.151.250 -j ACCEPT
  filter: iptables 的 filter 表
  INPUT: INPUT 链
  ipv4: 互联网协议 
  -p: 协议
  -dport: 目的地端口
   -s: 数据来源
   -j: 参数   ACCEPT 允许
              REFECT 直接拒绝,有回应
              DROP   直接丢弃,无回复
通过此操作,允许172.25.254.39 主机访问本机的 80 端口

执行如下:
在允许前,由于防火墙,无法访问主机的 httpd 服务
Linux 下 firewalld 防火墙服务设置_第16张图片
进行 direct rules 的设置
这里写图片描述)
再次尝试访问 httpd 服务,成功
Linux 下 firewalld 防火墙服务设置_第17张图片

4.2 rich rules

Rich Rules
通过“rich language”语法,可以用比直接接口方式更易理解的方法建立复杂防火墙规则。此外,还能永久保留设置。这种语言使用关键词值,是iptables工具的抽象表示。这种语言可以用来配置分区,也仍然支持现行的配置方式

端口转发

firewall-cmd –permanent –add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.151.239
进行伪装,当通过 22 端口访问本机时,将请求转发到 172.25.151.239 主机上
还要开启 masquerade
Linux 下 firewalld 防火墙服务设置_第18张图片
Linux 下 firewalld 防火墙服务设置_第19张图片
尝试通过 ssh 服务访问 172.25.151.50 主机,发现访问成功后到达的是 172.25.151.239 主机
Linux 下 firewalld 防火墙服务设置_第20张图片

地址伪装

通过对主机的防火墙进行配置,实现主机的路由功能
实际是客户端借由防火墙主机的身份去访问外界
执行如下

客户端主机地址为 192.168.1.151 ,通过 ip 为 172.25.151.50 的主机进行不同网段的访问
设定防火墙主机的另一张网卡 ip 为 192.268.1.1。开启防火墙主机的防火墙伪装功能,masqueade
设定客户端主机的网关为,防火墙主机 第二章网卡 ip 192.168.1.1

具体如下
对防火墙进行配置,允许借助防火墙主机进行地址伪装
Linux 下 firewalld 防火墙服务设置_第21张图片
编辑配置文件,开启内核路由功能
这里写图片描述
Linux 下 firewalld 防火墙服务设置_第22张图片
在另一台主机进行测试,可以借由防火墙主机进行不同网段的连通
设定网关
这里写图片描述
进行 ping 命令
Linux 下 firewalld 防火墙服务设置_第23张图片
通过ssh服务可发现,是以防火墙主机的身份进行访问的
Linux 下 firewalld 防火墙服务设置_第24张图片

你可能感兴趣的:(linux,系统服务管理)