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