firewalld-cmd简介

firewalld-cmd简介

12ab81e4c2981c36b5a3b939fdcc6f84

 

firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念

firewalld有图形界面和工具界面,由于我在服务器上使用,图形界面请参照官方文档,本文以字符界面做介绍

firewalld的字符界面管理工具是 firewall-cmd

firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

zone概念:硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下区域(根据文档自己理解,如果有误请指正):

drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。(黑名单)

block(限制):任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。

public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。(默认区域)

external(外部):特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。

dmz(非军事区):用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。

work(工作):用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。

home(家庭):用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。

internal(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。

trusted(信任):可接受所有的网络连接。(白名单)

说明:firewalld 的默认区域是 public

显示所有支持的分区:

$ firewall-cmd –get-zones
block drop work internal external home dmz public trusted
网络请求如何判断使用哪个 zone 的   firewalld 是如何规定一个网络请求使用的时哪个 zone 上的规则呢?首先会根据 zone 上绑定的 source 进行判断,然后再根据 interface 进行判断。比如:我现在有两台机器,一台我本机(192.168.1.188),另一个是虚拟机(192.168.1.61)。以下操作未说明的情况下都是在虚拟机上:

root执行 # yum install firewalld firewall-config

3、运行、停止、禁用firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd –state

启动:# systemctl start firewalld

停止:# systemctl stop firewalld

使能:# systemctl enable firewalld

禁用:# systemctl disable firewalld

4、配置firewalld
查看版本:$ firewall-cmd –version

查看帮助:$ firewall-cmd –help

查看设置:

显示状态:$ firewall-cmd –state

查看区域信息: $ firewall-cmd –get-active-zones

查看指定接口所属区域:$ firewall-cmd –get-zone-of-interface=eth0
拒绝所有包:# firewall-cmd –panic-on

取消拒绝状态:# firewall-cmd –panic-off

查看是否拒绝:# firewall-cmd –query-panic

更新防火墙规则:# firewall-cmd –reload

# firewall-cmd –complete-reload

两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务

将接口添加到区域,默认接口都在public
firewall-cmd –zone=public –add-interface=eth0 永久生效再加上 –permanent 然后reload防火墙

设置默认接口区域
firewall-cmd –set-default-zone=public

立即生效无需重启

打开端口(貌似这个才最常用)
查看所有打开的端口:
firewall-cmd – -zone=dmz –list-ports

加入一个端口到区域:
firewall-cmd –zone=dmz –add-port=8080/tcp

打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹

firewall-cmd –zone=work –add-service=smtp

移除服务

firewall-cmd –zone=work –remove-service=smtp

启动firewalld服务并设置开机自动启动,下面的命令必须在防火墙开启的状态下才可用 ,由于firewalld默认不是放行所有端口,所以启动firewalld会造成该机器的某些端口无法访问。

systemctl enable firewalld

systemctl start firewalld

2、更改防火墙默认区域为trusted,默认放行所有连接请求

firewall-cmd –set-default-zone=trusted

3.新建一个zone,将想要访问本机80端口的ip,如:192.168.1.123 ,添加的这个zone中,同时在这个zone中放行80端口。

firewall-cmd –permanent –new-zone=newzone

firewall-cmd –permanent –zone=newzone –add-source=192.168.1.123

firewall-cmd –permanent –zone=newzone –add-port=80/tcp

4.除192.168.1.123这个ip以外的地址访问本机时会使用当前默认的trusted这个zone里的规则,即禁止访问本机的80端口。

firewall-cmd –permanent –zone=trusted –add-rich-rule=”rule family=”ipv4″ port protocol=”tcp” port=”80″ drop”

systemctl restart firewalld

查看配置是否生效:

firewall-cmd –list-all-zone

firewall-cmd –list-all

对于一个请求具体优先使用哪个zone,优先级如下:

我们知道每个zone就是一套规则集,但是有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:

1、source,也就是源地址 优先级最高

2、interface,接收请求的网卡 优先级第二

3、firewalld.conf中配置的默认zone 优先级最低

这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是在firewalld.conf中配置的默认zone

#限制某个ip访问 firewall-cmd –permanent –add-rich-rule=’rule family=ipv4 source address=”10.6.1.2″ drop’

#查看当前zones

firewall-cmd –get-active-zones

#显示当前开放端口

firewall-cmd –zone=public –list-ports

#添加端口到永久区

firewall-cmd –permanent –zone=public –add-port=61080/tcp –add-port=61446/tcp

#添加服务到永久区

firewall-cmd –permanent –zone=public –add-service=samba

firewall-cmd –add-service=nfs

#刷新配置,添加到永久区后必须刷新配置才能生效

firewall-cmd –reload

#显示当前开放端口

firewall-cmd –zone=public –list-ports

#显示当前开放的服务

firewall-cmd –zone=public –list-service

firewall-cmd –state 获取firewalld状态 firewall-cmd –complete-reload 完全重启,状态信息将会丢失 firewall-cmd –get-zones

firewall-cmd –permanent –add-rich-rule=’rule protocol value=icmp drop’`** 获取所有支持的服务,支持的服务存放在/usr/lib/firewalld/services目录下。 服务是firewalld所使用的有关端口和选项的规则集合。 被启动的服务会在firewalld服务开启或运行是自动加载。 我们还可以创建自己的服务,即添加端口和服务的对应关系,将在下面讲解。 firewall-cmd –get-icmptypes 获取所有支持的ICMP类型

firewall-cmd –list-all-zones 列出全部启用的区域的特性(即查询当前防火墙策略),特性是定义的防火墙策略。 策略如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP拦截或自定义规则等。 该命令会列出所有区域的所有特性,包括详细规则(rich-rules)。

firewall-cmd [–zone=区域] –list-all 输出指定区域启用的全部特性,如果区域被省略,将显示默认区域的信息。

firewall-cmd –get-default-zone 查默认区域,默认的默认区域为public

firewall-cmd –set-default-zone=区域 设置默认区域,也可通过/etc/firewalld/firewalldconf中的DefaultZone配置项定义默认区域。 流入默认区域中配置的接口的新访问请求将被置入新的默认区域。当前活动的连接将不受影响。

firewall-cmd –get-active-zones 获取活动的区域,同时会输出活动区域所包含的接口。

firewall-cmd –get-zone-of-interface=网卡名 查指定接口属于哪个区域

firewall-cmd [–zone=区域] –add-interface=接口名 将指定接口增加到指定区域,如果区域被省略了,将会被添加到默认区域。 一个接口同时只能属于一个区域,接口会在防火墙重新加载后重新应用。

firewall-cmd [–zone=区域] –change-interface=接口名 修改接口所属区域,这个选项与–add-interface选项相似。 但不同的是,当接口已经存在于另一个区域的时候,该接口将被重置到新的区域。

firewall-cmd [–zone=区域] –remove-interface=接口名 从指定区域中删除指定接口,删除后,这个接口的所有数据包将使用默认区域的规则。

firewall-cmd [–zone=区域] –query-interface=接口名 查指定区域中是否包含指定接口,如果区域被省略了,将被指定为默认区域。

firewall-cmd [–zone=区域] –list-services 列举区域中启用的服务,如果区域被省略了,将使用默认区域。

firewall-cmd –query-masquerade 检查是否允许NAT转发 firewall-cmd –zone=public –add-masquerade –permanent 永久开启路由转发 firewall-cmd –remove-masquerade 禁止防火墙NAT转发

firewall-cmd –panic-on 启用应急模式,将阻断所有网络连接,以防出现紧急状况。 firewall-cmd –panic-off 禁用应急模式 firewall-cmd –query-panic 查应急模式状态

firewalld中的富语言规则表示更细致,更详细的防火墙策略配置,他可以针对系统服务、端口号、原地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙策略中也是最高的,下面为firewalld富语言规则帮助手册Copy to clipboardErrorCopied

#富规则语法
[root@web02 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]

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” to-addr=”address”
accept | reject [type=”reject type”] | drop


#富语言规则相关命令
–add-rich-rule='<RULE>’ #在指定的区域添加一条富语言规则
–remove-rich-rule='<RULE>’ #在指定的区删除一条富语言规则
–query-rich-rule='<RULE>’ #找到规则返回0,找不到返回1
–list-rich-rules #列出指定区里的所有富语言规则Copy to clipboardErrorCopied
1、实列一 例题:允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问10050端口**

#允许10.0.0.1主机能够访问http服务
[root@web02 ~]# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=10.0.0.1 service name=http accept’

#允许172.16.1.0/24能访问10050端口
[root@web02 ~]# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept’Copy to clipboardErrorCopied
2、实列二例题:默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器

1)#允许public区域所有访问ssh,拒绝172.16.1.0/24网段连接
[root@web02 ~]# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject’

2)#允许public区域所有访问ssh,拒绝172.16.1.0/24网段连接
[root@web02 ~]# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=172.16.1.0/24 service name=ssh drop’

#drop和reject区别:
drop 直接丢弃,不返回任何内容
reject拒绝,返回拒绝的内容Copy to clipboardErrorCopied
3、实列三例题:当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口

#端口转发
[root@web02 ~]# firewall-cmd –add-rich-rule=’rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7′
success
[root@web02 ~]# firewall-cmd –add-masquerade
successCopy to clipboardErrorCopied
4、firewalld(禁ping)

[root@web02 ~]# firewall-cmd –permanent –add-rich-rule=’rule protocol value=icmp drop’

5、查看富规则

[root@web02 ~]# firewall-cmd –list-rich-rules
rule family=”ipv4″ source address=”10.0.0.1″ forward-port port=”5555″ protocol=”tcp” to-port=”22″ to-addr=”172.16.1.7″Copy to clipboardErrorCopied
注:一般所有的拒绝或接受都配置在默认区域,当指定IP访问指定端口或者服务的时候使用富规则
————————————————
原文链接:https://blog.csdn.net/Neviller_Ma/article/details/121828280

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容