CentOS 7/8 预装的新型防火墙firewalld配置详解,你会用吗( 五 )


立即禁止区域的 ICMP 阻塞功能
firewall-cmd [--zone=] --remove-icmp-block=
查询区域的 ICMP 阻塞功能
firewall-cmd [--zone=] --query-icmp-block=
如果启用,此命令将有返回值 。没有输出信息 。
例: 阻塞区域的响应应答报文:
[root@zcwyou ~]# firewall-cmd --zone=public --add-icmp-block=echo-reply10. 通过配置文件来使用Firewalld的方法
系统本身已经内置了一些常用服务的防火墙规则,存放在/usr/lib/firewalld/services/
注意!!!!!请勿编辑/usr/lib/firewalld/services/,只有 /etc/firewalld/services 的文件可以被编辑 。
以下例子均以系统自带的public zone 为例子.
当然firewalld也可以使用图形界面管理:

CentOS 7/8 预装的新型防火墙firewalld配置详解,你会用吗

文章插图
 
firewalld使用图形界面管理
10.1 案例1: 如果想开放80端口供外网访问http服务,操作如下
Step1:将 http.xml复制到/etc/firewalld/services/下面,以服务形式管理防火墙,
这个cp命令其实是可以省略的,系统会优先去读取 /etc/firewalld 里面的文件,读取完毕后,会去/usr/lib/firewalld/services/ 再次读取,为了方便修改和管理,强烈建议复制到/etc/firewalld
[root@zcwyou ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/修改/etc/firewalld/zones/public.xml,加入http服务
vi /etc/firewalld/zones/public.xml
Public For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted. # 加入这行,要匹配 /etc/firewalld/services/文件夹下的文件名
以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息:
[root@zcwyou ~]# firewall-cmd --reload或者以 root 身份输入以下信息,重新加载防火墙并中断用户连接,即丢弃状态信息:
[root@zcwyou ~]# firewall-cmd --complete-reload注意:通常在防火墙出现严重问题时,这个命令才会被使用 。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接 。
10.2 案例2: SSH为非默认端口,要求能正常访问
[root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/[root@zcwyou ~]# vi /etc/firewalld/services/ssh.xml把默认22修改为目前的SSH端口号[root@zcwyou ~]# firewall-cmd --reload10.3 案例3:修改区域配置文件只允许特定主机192.168.23.1连接SSH
[root@zcwyou ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/[root@zcwyou ~]# vi /etc/firewalld/zones/public.xml确保配置文件有以下内容
配置结束
重启防火墙后生效[root@zcwyou ~]# firewall-cmd --reload11. firewalld直接模式
对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个Direct接口,允许你给它传递原始 iptables 命令 。直接接口规则不是持久的,除非使用 --permanent 。
直接选项主要用于使服务和应用程序能够增加规则 。规则不会被保存,在重新加载或者重启之后必须再次提交 。传递的参数 与 iptables, ip6tables 以及 ebtables 一致 。
选项 –direct 需要是直接选项的第一个参数 。
将命令传递给防火墙 。参数 可以是 iptables, ip6tables 以及 ebtables 命令行参数 。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb }
为表
增加一个新链。
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }从表
中删除链。
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb }查询 链是否存在与表
. 如果是,返回0,否则返回1.
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb }
如果启用,此命令将有返回值 。此命令没有输出信息 。获取用空格分隔的表
中链的列表 。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb }为表
增加一条参数为 的链,优先级设定为。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }从表
中删除带参数 的链。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }查询 带参数 的链 是否存在表
中. 如果是,返回0,否则返回1.
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb }
如果启用,此命令将有返回值 。此命令没有输出信息 。获取表
中所有增加到链 的规则,并用换行分隔 。
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb }以iptables的命令允许端口号,重启生效
[root@zcwyou ~]# firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT[root@zcwyou ~]# firewall-cmd --reload添加富规则:
[root@zcwyou ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'


推荐阅读