- firewalld简述
动态防火墙后台程序firewalld提供了一个动态管理的防火墙用以支持网络“zones”,以分配对一一个网络及其相关链接和界面一定程度的信任。它具备对IPV4和IP v6防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口- 相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 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 | 拒绝流入的流量,除非与流出的流量相关 |
参数 | 作用 |
---|---|
–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 | 完全刷新火墙配置(终端修改后不符合的操作将会中断) |
[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 区域
)
通过 httpd 服务进行测试
主机 172.25.151.150 访问本机 httpd 服务,成功
主机 172.25.151.250 访问本机 httpd 服务,失败
将 ip 为 172.25.151.150 的主机从 trusted 区域移除
查看网络接口信息
修改网络接口所在区域
将网络接口从区域移除
将网络接口添加到指定区域
[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
执行如下:
为指定区域添加服务
为指定区域添加端口
删除指定区域的指定端口及服务
防火墙的配置文件在 /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 进行查看
防火墙的属性信息在 /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 服务
编辑配置文件,修改 httpd 服务端口
重启服务,并查看防火墙,允许 http 服务
此时进行访问,失败
- 直接选项,直接选项可以更直接地访问防火墙。这些选项要求用户了解基本的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 服务
进行 direct rules 的设置
)
再次尝试访问 httpd 服务,成功
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
尝试通过 ssh 服务访问 172.25.151.50 主机,发现访问成功后到达的是 172.25.151.239 主机
通过对主机的防火墙进行配置,实现主机的路由功能
实际是客户端借由防火墙主机的身份去访问外界
执行如下
客户端主机地址为 192.168.1.151 ,通过 ip 为 172.25.151.50 的主机进行不同网段的访问
设定防火墙主机的另一张网卡 ip 为 192.268.1.1。开启防火墙主机的防火墙伪装功能,masqueade
设定客户端主机的网关为,防火墙主机 第二章网卡 ip 192.168.1.1
具体如下
对防火墙进行配置,允许借助防火墙主机进行地址伪装
编辑配置文件,开启内核路由功能
在另一台主机进行测试,可以借由防火墙主机进行不同网段的连通
设定网关
进行 ping 命令
通过ssh服务可发现,是以防火墙主机的身份进行访问的