firewalld

打开firewalld systemctl disable iptables //关闭iptables systemctl stop iptables //禁止iptables开机启动 systemctl enable firewalld //开启firewalld systemctl start firewalld //让firewalld开机启动

firewalld的9个zone

firewalld默认有9个zone 默认zone为public

drop(丢弃):任何接收的网络数据包都被丢弃,没有回复。仅能有发送出去的网络连接; block(限制):任何接收的网络连接都会被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited所拒绝; public(公共):在公共区域内使用,不能相信网络中的其他计算机不会队你造成危害,只接收经过选取的连接; external(外部):为路由器启用伪装功能的外部网络。只接收经过选取的连接; dmz(非军事区):用于你的非军事区的电脑,此区域内可以公开访问,可以有限的进入内部网络;只接收经过选取的连接; work(工作):用于工作区,基本相信网络内的其它计算机;只接收经过选取的连接; home(家庭):用于家庭网络,基本相信网络内的其他计算机;只接收经过选取的连接; internal(内部):用于内部网络,基本相信;只接收经过选取的连接; trusted(信任):可以接受所有的物理链接;

查询默认的区域名称

--get-default-zone

设置默认的区域,使其永久生效

--set-default-zone=<区域名称>

显示可用的区域

--get-zones

显示预先定义的服务

--get-services

显示当前正在使用的区域与网卡名称

--get-active-zones

将源自此 IP 或子网的流量导向指定的区域

--add-source=

不再将源自此 IP 或子网的流量导向某个指定区域

--remove-source=

将源自该网卡的所有流量都导向某个指定区域

--add-interface=<网卡名称>

显示当前区域的网卡配置参数、资源、端口以及服务等信息

--change-interface=<网卡名称> 将某个网卡与区域进行关联 --list-all

显示所有区域的网卡配置参数、资源、端口以及服务等信息

--list-all-zones

设置默认区域允许该服务的流量

--add-service=<服务名>

设置默认区域允许该端口的流量

--add-port=<端口号/协议>

设置默认区域不再允许该服务的流量

--remove-service=<服务名>

让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量 --reload

开启应急状况模式

--panic-on

关闭应急状况模式

--panic-off

查看系统所有zone

firewall-cmd --get-zones [root@jinkai ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work

查询系统默认的zone

firewall-cmd --get-default-zone [root@jinkai ~]# firewall-cmd --get-default-zone Public

更改系统默认的zone

Firewall-cmd --set-default-zone=work [root@jinkai ~]# firewall-cmd --set-default-zone=work success [root@jinkai ~]# firewall-cmd --get-default-zone work

查询指定网卡所在的zone firewall-cmd --get-zone-of-interface=ens33 [root@jinkai ~]# firewall-cmd --get-zone-of-interface=ens33 work

查询所有网卡所在zone

firewall-cmd --get-active-zones [root@jinkai ~]# firewall-cmd --get-active-zones work interfaces: ens33 ens37

给指定网卡设置zong firewall-cmd --zone=dmz --add-interface=lo lo默认是没有zone的,可以给lo指定一个zone

[root@jinkai ~]# firewall-cmd --zone=block --add-interface=lo success [root@jinkai ~]# firewall-cmd --get-active-zones work interfaces: ens33 ens37 block interfaces: lo

针对网卡更改zone firewall-cmd --zone=work --change-interface=lo lo原先为block zone针对网卡lo更改zone为work;

[root@jinkai ~]# firewall-cmd --get-zone-of-interface=lo block [root@jinkai ~]# firewall-cmd --zone=work --change-interface=lo success [root@jinkai ~]# firewall-cmd --get-zone-of-interface=lo work

针对网卡删除zone

firewall-cmd --zone=dmz --remove-interface=lo 针对网卡lo删除掉zone; [root@jinkai ~]# firewall-cmd --zone=work --remove-interface=lo success [root@jinkai ~]# firewall-cmd --get-zone-of-interface=lo no zone

firewalld的service操作 列出当前系统所有的service

firewall-cmd --get-services

查看当前zone下有哪些service

firewall-cmd --list-services [root@jinkai ~]# firewall-cmd --list-services ssh dhcpv6-client

查看指定zone下有哪些service

firewall-cmd --zone=work --list-services

查看work下有哪些service

[root@jinkai ~]# firewall-cmd --zone=work --list-services ssh dhcpv6-client

增加新的service到zone下,默认不加指定参数,为存在于内存中生效,重启后失效 firewall-cmd --zone=public --add-service=http 将http服务增加到public下;

[root@jinkai ~]# firewall-cmd --zone=public --add-service=http success [root@jinkai ~]# firewall-cmd --zone=public --list-services ssh dhcpv6-client http

删除zone中指定的service firewall-cmd --zone=public --remove-service=http 将public中的http服务删除掉;

[root@jinkai ~]# firewall-cmd --zone=public --remove-service=http success [root@jinkai ~]# firewall-cmd --zone=public --list-services ssh dhcpv6-client

永久增加service到zone下,会写入配置文档中 zone的配置文档:/etc/firewalld/zones (一旦更改某个zone的模板配置文件,就会在这个目录下生产对应zong的配置文件xml后缀) zone的模板文档:/usr/lib/firewalld/zones Service的配置文档:/etc/firewalld/services service的模板文档:/usr/lib/firewalld/services firewall-cmd --zone=public --add-service=http --perma

将http服务增加到public下,并写入配置文档中,后面加参数 --permanent;可以通过新生产的配置文档public.xml查看;查询list-services是没有的,必须重启才有效;

[root@jinkai ~]# firewall-cmd --zone=public --add-service=http --permanent Warning: ALREADY_ENABLED: http success [root@jinkai ~]# cat /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>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.</description> <service name="ssh"/> <service name="dhcpv6-client"/> <service name="http"/> </zone> [root@jinkai ~]#

启动/关闭 firewalld 防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时请慎用):

[root@linuxprobe ~]# firewall-cmd --panic-on success [root@linuxprobe ~]# firewall-cmd --panic-off Success

**查询 public 区域是否允许请求 SSH 和 HTTPS 协议的流量: **

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh yes [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https no

把在 firewalld 服务中访问 8080 和 8081 端口的流量策略设置为允许,但仅限当前生效:

[root@jinkai ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp success [root@jinkai ~]# firewall-cmd --zone=public --list-ports 8080-8081/tcp

Firewall的端口转发(端口映射) 把原本访问本机 888 端口的流量转发到 22 端口,要且求当前和长期均有效: 流量转发命令格式为:firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

[root@jinkai ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.111.136 success [root@jinkai ~]# firewall-cmd --reload

[root@jinkai02 ~]# ssh 192.168.111.136 -p 888 root@192.168.111.136's password: Last login: Fri Aug 28 19:27:03 2020 from 192.168.111.1 [root@jinkai ~]#

**firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。比如,我们可以在 firewalld 服务中配置一条富规则,使其拒绝 **

192.168.111.0/24 网段的所有用户访问本机的 ssh 服务(22 端口): [root@jinkai ~]# firewall-cmd --permanent --zone=public --add-rich-rule=" rule family="ipv4" source address="192.168.111.0/24" service name="ssh" reject" success [root@jinkai ~]# firewall-cmd --reload success

在客户端使用 ssh 命令尝试访问 192.168.111.136 主机的 ssh 服务(22 端口):

[root@jinkai02 ~]# ssh 192.168.111.136 ssh: connect to host 192.168.111.136 port 22: Connection refused [root@jinkai02 ~]# ssh 192.168.111.136 -p 888 ssh: connect to host 192.168.111.136 port 888: Connection refused [root@jinkai02 ~]#

针对某个端口只允许某个IP或IP段访问

使mysql服务的3306端口只允许192.168.111.136的服务器能访问 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.111.136" port protocol="tcp" port="3306" accept"

小实验: 需求:ftp服务自定义端口1121,需要在work zone下面放行ftp; 思路: 用模板操作、先将ftp服务模板复制到配置模板下,这样firewall就会套用该模板,记得修改好端口为1121; 在work zone下面放行ftp,也就是将ftp服务添加到work中;但是之前不许讲work模板复制到firewall的zone下, 并在配置中添加ftp就ok; 1、复制ftp模板到/etc/firewalld/services/目录下

[root@jinkai ~]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/ [root@jinkai ~]# ls /etc/firewalld/services/ ftp.xml

**2、修改文件、将ftp端口21给为1121; vim /etc/firewalld/services/ftp.xml 将port=“21”改成port=“1121”

[root@jinkai ~]# vim /etc/firewalld/services/ftp.xml ** [root@jinkai ~]# cat !$ cat /etc/firewalld/services/ftp.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>FTP</short> <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description> <port protocol="tcp" port="1121"/> <module name="nf_conntrack_ftp"/> </service>

3、将work zone模板文件复制或移动到zone目录下;

[root@jinkai ~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/ [root@jinkai ~]# ls /etc/firewalld/zones/ public.xml public.xml.old work.xml

4、修改zone配置文件work.xml vim /etc/firewalld/zones/work.xml 在文档中添加一行 <service name="ftp"/> 表示在work zone中增加ftp服务;

[root@jinkai ~]# vim /etc/firewalld/zones/work.xml [root@jinkai ~]# cat !$ cat /etc/firewalld/zones/work.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Work</short> <description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="ftp"/> <service name="dhcpv6-client"/> </zone>

5、重新加载firewall

firewall-cmd --reload [root@jinkai ~]# firewall-cmd --reload success

测试: 验证下work zone里面的service是否有FTP

[root@jinkai ~]# firewall-cmd --zone=work --list-services ssh ftp dhcpv6-client