说明

这里已经对 CentOS7 和 ReadHat7 的firewalld配置验证了。

FirewallDiptables的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:

(1)FirewallD 使用区域和服务而不是链式规则;

(2)它动态管理规则集,允许更新规则而不破坏现有会话和连接;

本文重点讲解下firewalld的一些使用场景,更多FirewallD基本介绍,详见传送门

需求说明

推荐系统所在机器资源信息(白名单):

所属平台 机器IP 机器品牌 系统版本
智能推荐平台(REC60) 192.168.246.60 HW2280 ReadHat7.6
智能推荐平台(REC61) 192.168.246.61 HW2280 ReadHat7.6
智能推荐平台(REC62) 192.168.246.62 HW2280 ReadHat7.6
智能推荐平台(REC63) 192.168.246.63 HW2280 ReadHat7.6
智能推荐平台(REC64) 192.168.246.64 HW2280 ReadHat7.6

要求:设置CentOS 7防火墙,以便除我白名单中的原始IP地址外,所有传入请求都将被阻止。对于白名单IP地址,所有端口都应可访问。

firewall 防火墙规则如下:

## public所在区域的IP来源
firewall-cmd --permanent --zone=public --list-sources
## 添加public所在区域的IP来源,这里是 192.168.246.60
firewall-cmd --permanent --zone=public --add-source=192.168.246.60
## 允许192.168.246.60访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.246.60" accept' --permanent
firewall-cmd --permanent --zone=public --add-source=192.168.246.61
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.246.61" accept' --permanent
firewall-cmd --permanent --zone=public --add-source=192.168.246.62
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.246.62" accept' --permanent
firewall-cmd --permanent --zone=public --add-source=192.168.246.63
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.246.63" accept' --permanent
firewall-cmd --permanent --zone=public --add-source=192.168.246.64
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.246.64" accept' --permanent
## 加载firewalld规则
firewall-cmd --reload
## 查看public区域下所有信息
firewall-cmd --zone=public --list-all

安装、启用、关闭firewalld(非必需)

如果系统上已经安装有firewalld,请忽略此步骤:

## 安装firewalld
yum install firewalld firewall-config
## 启动服务
systemctl start  firewalld
## 开机自动启动服务
systemctl enable firewalld
## 查看状态
systemctl status firewalld
firewall-cmd --state
## 关闭服务
systemctl stop firewalld
## 取消开机启动
systemctl disable firewalld

防火墙规则说明

一些常用基本的命令

## 查看状态:
firewall-cmd --state        ## 输出应该是 running 或者 not running
## 重新加载配置:
firewall-cmd --reload
# 防火墙的区域
## 获取所有区域:
firewall-cmd --get-zones    ## 输出 work drop internal external trusted home dmz public block
## 查看默认区域:
firewall-cmd --get-default-zone
## 修改默认区域:
firewall-cmd --set-default-zone=internal
## 查看你网络接口使用的区域:
firewall-cmd --get-active-zones
## 要得到特定区域的所有配置:
firewall-cmd --zone=public --list-all
## 要得到所有区域的配置: 
firewall-cmd --list-all-zones

开启或关闭端口和服务

## 比如:允许或者禁用 12345 端口的 TCP 流量。
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --zone=public --remove-port=12345/tcp --permanent
## 批量添加或者移除区间端口
firewall-cmd --zone=public --add-port=4400-4600/udp --permanent
firewall-cmd --zone=public --add-port=4400-4600/tcp --permanent
firewall-cmd --zone=public --remove-port=4400-4600/udp --permanent
firewall-cmd --zone=public --remove-port=4400-4600/tcp --permanent
## 查看默认的可用服务:
firewall-cmd --get-services
## 比如,要启用或禁用 HTTP 服务: 
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --remove-service=http --permanent
## 重新加载配置:
firewall-cmd --reload
## 查看端口列表
firewall-cmd --permanent --list-port

说明⚠️:

(1)默认情况下,firewall-cmd 命令适用于运行时配置,但使用 --permanent 标志将保存到持久配置中。

(2)如果要通过上面命令添加任何端口或服务,则所有来源都可以访问它!!!

高级配置

一些使用的例子:

更多实例可以参考传送门

## 允许来自主机 192.168.0.14 的所有 IPv4 流量和所有端口:
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept' --permanent
## 移除 192.168.0.14 所有访问所有端口
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept' --permanent
## 拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量:
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
## 允许192.168.2.0/24(0-255)网段访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.2.0/24" accept' --permanent

关于 firewall 使用注意点

(1)我们有时候使用firewall来处理docker的流量时,发现并不能起到效果,具体原因可见传送门;

(2)使用firewall防火墙可屏蔽除指定IP外的所有IP,具体可参考传送门