firewalld防火墙总结

firewalld防火墙说明

firewalld新增了“zone区域”概念,把预设好的区域防火墙规则集合,点击一下就能切换上百条策略,提高防火墙策略应用效率,如一台笔记本电脑每天都要在办公室、咖啡厅、家里使用,按常理最安全的应该是家里的内网,其次是办公室,最后是咖啡厅,如果需要在办公室内允许文件共享服务的请求流量,回到家要允许所有服务,而在咖啡厅则是除了上网外不允许任何其他流量,以前只能频繁进行手动设置,现在把预设好的区域防火墙规则集合,点击一下就能切换上百条策略。常见zone区域名称及应用如下(默认为public):

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

注意!!!

跟iptables防火墙不一样,firewalld防火墙需要先开启systemctl start firewalld.service策略才能生效,才能写入规则,而且也是重启后会失效,想要永久生效在防火墙策略中加入--permanent参数,但是这个要重启后才能永久生效,不重启使永久生效可以执行firewalld-cmd --reload让永久生效策略当前立即生效。而iptables防火墙不用开启,写入的iptables防火墙策略会立即生效,但是重启后策略会失效,如果想要永久生效,执行service iptables save

firewalld的默认规则都是拒绝,而iptables默认规则是允许,即firewalld需要在每个服务器上设置了才能放行

查看防火墙状态

firewall-cmd --state   #查看防火墙状态
或
systemctl status firewalld #查看防火墙状态

停止firewall

systemctl stop firewalld.servcie   #停止firewall

开启firewall

systemctl start firewalld.service   #开启firewall

开机启动防火墙

systemctl enable firewalld   #开机启动防火墙

禁止firewall开机启动

systemctl disable firewalld.service  #禁止firewall开机启动

终端管理工具

firewall-cmd命令是firewalld动态防火墙管理器服务的命令行终端

firewalld常用参数记不住也没关系,可以使用firewalld帮助命令查看即firewall-cmd --help

防火墙就是firewall-cmd 参数(即下图所示的参数)=值

防火墙就是firewall-cmd --permanent  参数(即下图所示的参数)=值

参数 作用
--get-default-zone 查看默认区域名称
--set-default-zone=<区域名称> 设置默认的区域、永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将来源于此IP或子网流量导向指定区域
--add-service=ssh 将来源此服务的流量导向指定的区域如ssh
--remove-source= 不再将此IP或子网流量导向某个指定区域
--add-interface=<网卡名称> 将来自于该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域做关联
--list-all 显示当前区域的网卡配置参数、资源、端口及服务信息等
--list-all-zones 显示所有区域的网卡配置参数、资源、端口及服务信息等
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 允许默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让"永久生效"的配置规则立即生效,覆盖当前的

firewalld服务对防火墙策略的配置默认是当前生效模式(RunTime),配置信息会随着计算机重启而失效,如想让配置策略一直存在就要使用永久生效模式(Permanent),在防火墙策略中加入--permanent参数就可以代表针对于永久生效模式的命令了。但即使添加了这个参数,也需要重启后才能生效,如果想不重启又立即生效需要在防火墙策略中添加--reload参数,覆盖当前的,不过要注意,是在写完防火墙规则后,在后面追加firewalld-cmd --reload才能让刚写的防火墙策略立即生效。

防火墙规则示例:

firewall-cmd --get-default-zone   #查看firewalld服务当前所使用的zone区域
firewall-cmd  --get-zone-of-interface=eno16777728   #查询eno16777728网卡在firewalld服务中的区域
firewall-cmd  --permanent --zone=external --change-interface=eno16777728  #将来自网卡eno16777728的流量导入到区域为external,并永久生效

firewall-cmd --get-zone-of-interface=eno16777728 --permanent  #查看网卡eno16777728的永久生效的区域
firewall-cmd --set-default-zone=public  #把firewalld防火墙服务的当前默认区域设置为public

firewall-cmd  --get-default-zone        #查看fairewalld当前默认的区域是那个区域
启动/关闭firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时慎用)


firewall-cmd  --panic-on     #开启防火墙服务的应急状况模式,阻止一切网络连接

firewall-cmd  --panic-off    #关闭防火墙服务的应急状况模式,恢复一切网络连接                            
firewall-cmd --zone=public --query-service=ssh   #查询public的区域是否允许ssh服务的请求流量

firewall-cmd --zone=public  --query-service=https  #查询public的区域是否允许https服务的请求流量
firewall-cmd --permanent --zone=public --add-service=ssh  #防火墙public区域永久允许ssh的请求流量,即对外开放ssh服务

firewall-cmd  --reload   #让刚写的防火墙策略立即生效
firewall-cmd --permanent --zone=public --remove-service=http   #配置防火墙public区域永久拒绝http的请求流量,即不对外开放https服务

firewall-cmd --reload                                          #让当前策略不用重启立即生效
firewall-cmd --zone=public --add-port=8080-8081/tcp  #配置防火墙public区域放行8080-8081的请求流量即端口对外开放,仅限当前(因为没有添加--permanent永久生效参数)

firewall-cmd --zone=public --list-port              #产看防火墙public区域放行的端口有那些

流量转发命令格式:

firewall-cmd --permanent --zone=public --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目的端口号>:toaddr=<目标地址、本机地址>
firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.2.1  #防火墙public区域,访问本机888端口的请求流量转发到22端口号,目标IP地址为1192.168.2.1

firewall-cmd --reload   #让永久生效策略不用重启当前立即生效

ssh -p 888 192.168.2.1  #在客户机使用ssh命令尝试访问192.168.2.1主机的888端口,查看是否转发到了22端口,是否登录成功

 关闭端口访问:

要先确保需要关闭的端口已经关闭。如果已开放则关闭端口。public区域开放的端口,是所有IP都可以进行访问的

firewall-cmd --zone=public --list-ports   #查询开放的端口有那些

 关闭端口,如果端口本来就没有开放则不用关闭

firewall-cmd --zone=public --remove-port=<端口号>/tcp或udp --permanent #在public区域关闭该端口号,即不对外开放该端口号

firewall-cmd --reload     #使得永久生效的防火墙策略立即生效

firewall-cmd --zone=public --list-ports   #查看对外开放的端口,是否还包含该不对外开放端口

 开放IP访问端口和拒绝IP访问访问服务:

firewall-cmd permanent --add-rich-rule="rule family="ipv4" source address="源IP" port-protocol="tcp或udp" port="端口" accept"   #配置允许某源IP可以访问本机某端口

firewall-cmd --reload  #使得永久生效的防火墙策略立即生效

firewall-cmd --zone=public --list-rich-rules   #查看已设置的rich-rule的防火墙规则
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" service name="ssh"  reject"   #在防火墙public区域中,拒绝所有来自于192.168.2.0/24网段的用户访问本机的ssh服务(端口22)

firewall-cmd --reload   #让永久生效的策略不用重启当前立即生效


ssh -p 22 192.168.2.1     #在客户机使用ssh命令尝试访问192.168.2.1主机的22端口,应该是不能访问的

其他防火墙命令:

firewall-cmd --list-all   #查看防火墙清单

firewall-cmd --zone=public --add-port=端口/tcp或udp --permanent  #对外开放某端口

firewall-cmd --reload     #使得永久生效的防火墙策略立即生效

firewall-cmd --zone=public --query-port=端口/tcp或udp  #查看某端口防火墙策略是否生效

firewall-cmd --zone=public --list-ports   #查看public区域开放的端口,即对外开放的端口
firewall-cmd --zone=public --remove-port=端口/tcp或udp --permanent   #在public区域取消某端口对外开放,即取消某端口对外开放

firewall-cmd --reload  #使得永久生效的防火墙策略立即生效

批量开放或限制端口:

firewall-cmd --zone=public --add-port=开始端口-结束端口/tcp或udp --permanent  #对外开放某范围的端口

firewall-cmd --reload  #使得永久生效的防火墙策略立即生效
firewall-cmd --zone=public --remove-port=开始端口-结束端口/tcp或udp --permanent   #不对外开放某范围的端口

firewall-cmd --reload   #使得永久生效的策略立即生效

 开放或限制IP:

firewall-cmd --permanent --add-rich-rule="rule-family="ipv4" source address="192.168.0.0"     port protocol="tcp或udp" port="端口" accept"  #开放对来源为192.168.0.0的IP地址访问本机某端口

firewall-cmd --reload   #使得永久生效的防火墙策略立即生效

firewall-cmd --zone=public --list-rich-rules  #查看已设置的rich-rules防火墙策略
firewall-cmd --permanent  --add-rich-rule="rule family="ipv4" source address="192.168.0.0" port protocol="tcp或udp" port="9001"  reject"   #拒绝来源为192.168.0.0的IP地址访问本机某端口

firewall-cmd --reload    #使得永久生效的防火墙策略立即生效

firewall-cmd --zone=public --list-rich-rules   #查看rich-rule防火墙策略是否生效


firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.0.0" port protocol="tcp或udp" port="端口" accept"   #移除(删除这条策略)开放对来源为192.168.0.0的IP地址访问本机某端口


firewall-cmd --reload   #使得永久生效的防火墙策略立即生效

附防其他火墙常用命令

命令 说明
systemctl start firewalld.service 启动防火墙
systemctl satus firewalld.service 查看防火墙状态
systemctl  disable firewalld.service 禁止开机启动防火墙
systemctl enable firewalld.service 开机启动防火墙
systemctl stop  firewalld.service 关闭防火墙
systemctl is-enbale firewalld.service 查看防火墙是否开机启动
systemctl list-unit-files|grep enabled 查看已启动的服务列表
systemctl --failed 查看启动失败的服务列表
firewall-cmd --version 查看防火墙版本
firewall-cmd --state 显示防火墙状态
firewall-cmd --get-service 获取防火墙所支持的服务
firewall-cmd --zone=public --list-service 查看防火墙public区域,允许访问的服务有那些
firewall-cmd --zone=public --list-ports 查看防火墙public区域,允许访问的端口有那些
firewall-cmd --reload 更新防火墙规则,使得永久生效策略不用重启当前立即生效,覆盖当前的
firewall-cmd  --get-active-zones 查看防火墙当前活跃的区域
firewall-cmd --get-default-zone 查看防火墙当前工作的默认的区域是那个
firewall-cmd --get-zone-of-interface=eth100 查看防火墙指定接口eth100所属的区域
firewall-cmd --panic -on 拒绝所有包,需要远程连接服务器ssh的慎用
firewall-cmd --panic-off 取消拒绝所有包
firewall-cmd --query-panic 查看是否拒绝所有包

firewall-cmd --zone=public --add-service=https --permanent

firewall-cmd --reload

在防火墙public区域配置永久允许https请求流量,并应用不用重启当前立即生效

firewall-cmd --zone=public --remove-service=https --permanent

firewall-cmd --reload

在防火墙public区域配置永久拒绝https请求流量,并应用不用重启当前立即生效
firewall-cmd --zone=public --query-service=http --permanent 查看防火墙public区域是否永久允许http请求流量

firewall-cmd --zone=public --add-port=80/tcp --permanent

firewall-cmd --reload

在防火墙public区域配置永久允许80端口tcp请求流量,并应用不用重启当前立即生效

firewall-cmd --zone=public --add-port=8080-8085/tcp --permanent

firewall-cmd --reload

在防火墙public区域配置永久允许8080-8085端口tcp请求流量,并应用不用重启当前立即生效
firewall-cmd --zone=public --query-port=80/tcp --permanent 查看80端口是否开启

firewall-cmd --zone=public --remove-port=80/tcp --permanent

firewall-cmd --reload

防火墙public区域永久关闭80端口,并应用不用重启当前立即生效

猜你喜欢

转载自blog.csdn.net/weixin_45190065/article/details/126646699