在CentOS/RHEL 8上如何设置防火墙
时间:2019-11-20 08:52:51 来源:igfitidea点击:
在CentOS/RHEL 8上如何使用FirewallD设置防火墙?
在RHEL 8中,nftables将iptables替换为默认的Linux网络数据包过滤框架。
RHEL 8带有带有D-Bus接口的动态,可自定义的基于主机的防火墙。您可以添加或删除或更新防火墙规则,而无需重启防火墙守护程序或服务。 firewall-cmd充当nftable的前端。
FirewallD的基本概念
Firewalld简化了网络流量管理的概念。
在CentOS/RHEL 8上进行防火墙保护时,有两个术语
1.区域zone
防火墙zone是预定义的规则集。
您可以使用ls命令来查看所有区域:
$ ls -l /usr/lib/firewalld/zones/
使用cat命令查看drop zone(定义丢弃数据包规则):
$ cat /usr/lib/firewalld/zones/drop.xml
了解预定义的zone
block
所有传入的网络连接被拒绝。仅可从系统内部启动的网络连接。dmz
经典非军事区(DMZ)区域,对您的LAN的访问受到限制,并且仅允许选定的传入端口。drop
丢弃所有传入的网络连接,仅允许传出的网络连接。external
对于路由器的连接类型很有用。您还需要LAN和WAN接口,以使伪装(NAT)正常工作。- `home'对您信任其他计算机的局域网内的家用计算机(例如笔记本电脑和台式机)有用。仅允许选择的TCP/IP端口。
internal
,当您主要信任LAN上的其他服务器或计算机时,用于内部网络。public
您不信任网络上的任何其他计算机和服务器。您仅允许所需的端口和服务。对于云服务器或您所托管的服务器,请始终使用公共区域。trusted
接受所有网络连接。我不建议将该区域用于连接到WAN的专用服务器或VM。work
用于您信任同事和其他服务器的工作场所。
使用以下命令即可查看所有区域:
$ firewall-cmd --get-zones
输出示例:
block dmz drop external home internal public trusted work
如何查看默认区域
查看默认zone,请运行:
$ firewall-cmd --get-default-zone
查看活动的zone
$ firewall-cmd --get-active-zones
2.服务
服务是本地端口,协议,源端口,目标和防火墙帮助程序模块的列表。
比如
- 端口80 (提供web服务)
- 服务SSH
- 协议ICMP
如何查看与public zone相关联的防火墙规则或者服务
运行:
$ sudo firewall-cmd --list-all $ sudo firewall-cmd --list-all --zone=public
在防火墙中,如何从默认zone删除服务?
删除服务dhcpv6-client和cockpit示例:
$ sudo firewall-cmd --remove-service=cockpit --permanent $ sudo firewall-cmd --remove-service=dhcpv6-client --permanent $ sudo firewall-cmd --reload $ firewall-cmd --list-services
如何查看当前区域中有哪些服务
$ sudo firewall-cmd --list-services
或者
$ sudo firewall-cmd --list-services --zone=public $ sudo firewall-cmd --list-services --zone=home
在CentOS/RHEL 8上如何启动,停止,重启Firewalld服务
现在激活和配置防火墙了。
在CentOS/RHEL 8上启动防火墙并设置开机自启动
$ sudo systemctl start firewalld $ sudo systemctl enable firewalld
在CentOS/RHEL 8上禁用防火墙firewalld
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld
在CentOS/RHEL 8上检查防火墙状态
$ sudo firewall-cmd --state
CentOS/RHEL 8在更改防火墙规则时重新加载配置
$ sudo firewall-cmd --reload
CentOS/RHEL 8获取防火墙服务的状态
$ sudo systemctl status firewalld
使防火墙规则永久生效
下面更改防火墙规则的命令是临时的,在重启Linux框或重启Firewalld服务时,会失效。
$ sudo firewall-cmd --zone=public --add-service=http
如何将规则添加到防火墙中并永久生效
我们需要使用 --permanent
选项使规则永久生效:
$ sudo firewall-cmd --zone=public --add-service=https --permanent $ sudo firewall-cmd --reload
确认一下:
$ sudo firewall-cmd --list-services $ sudo firewall-cmd --list-services --permanent
如何查看防火墙支持的服务
语法是
$ sudo firewall-cmd --get-services $ sudo firewall-cmd --get-services | grep mysql $ ls -l /usr/lib/firewalld/services/ $ cat /usr/lib/firewalld/services/dns.xml
防火墙规则集示例
如何向防火墙区域中添加服务
在防火墙中允许dns服务通过(TCP/UDP端口53):
sudo firewall-cmd --zone=public --add-service=dns --permanent
如何在防火墙zone中删除服务
删除vnc服务器服务(TCP端口范围5900-5903):
sudo firewall-cmd --zone=public --remove-service=vnc-server --permanent
如何打开TCP/UDP端口/协议
打开TCP端口9009:
sudo firewall-cmd --zone=public --add-port=9009/tcp --permanent
查看zone开放的端口
$ sudo firewall-cmd --zone=internal --list-ports
防火墙如何拒绝/阻止某个端口
拒绝TCP端口23:
sudo firewall-cmd --zone=public --remove-port=23/tcp --permanent
防火墙如何编写端口转发规则
将TCP端口443转发到同一服务器上的8080:
$ sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
删除端口转发:
$ sudo firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
将流量(端口443)转发到192.168.2.42端口443
$ sudo firewall-cmd --zone=public --add-masquerade $ sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
删除上述伪装规则:
$ sudo firewall-cmd --zone=public --remove-masquerade $ firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42 --permanent
富规则示例
在防火墙中设置,只允许从10.8.0.8 的IP地址访问SSH端口22:
sudo firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" source address="10.8.0.8" port port=22 protocol=tcp accept'
查看新规则:
$ sudo firewall-cmd --list-rich-rules --permanent
在防火墙中设置,只允许192.168.1.0/24子网访问tcp端口11211:
sudo firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="11211" accept'