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或iptables-save > /etc/sysconfig/iptables(防火墙规则永久生效),但前提是不重启服务器
在关闭iptables防火墙的前提下配置的iptables防火墙策略,不重启服务器,即使开启iptables防火墙服务配置也会生效。
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端口,并应用不用重启当前立即生效 |