centos7防火墙白名单总结
需求:
某台服务器的es的8300,8200端口需要指定白名单访问,需要在不影响服务器上其他服务的前提下(因为是历史项目),完善防火墙配置。
首先梳理发现,这两个端口是docker映射出来的端口,开启防火墙。发现防火墙无法限制端口。
先解决:
centos中docker开放的端口 无法受防火墙 控制:
在 CentOS 中,Docker 容器开放的端口默认不受 firewalld 防火墙控制,因为 Docker 使用了自己的网络命名空间和 iptables 规则来管理容器的网络。这可能会导致在 firewalld 中设置的规则对 Docker 容器不生效。为了使 firewalld 能够控制 Docker 容器的端口,可以采取以下步骤:
1. **修改 Docker 配置**:编辑 `/etc/docker/daemon.json` 文件,添加或修改 `"iptables": false` 配置,这样 Docker 就不会自动设置 iptables 规则。例如:
{
"iptables": false
}
修改后需要重启 Docker 服务。
systemctl restart docker
注意:重启docker时候,最好先备份docker ps 的结果。
centos中指定端口访问地址
方法1:
随后配置public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone<rule family="ipv4"><source address="xx.21.0.16"/><source address="xx.21.0.99"/><port protocol="tcp" port="8200"/><port protocol="tcp" port="8300"/><accept/></rule><port protocol="tcp" port="80-8199"/><port protocol="tcp" port="8201-8299"/><port protocol="tcp" port="8301-30000"/>
</zone>
重启防火墙
systemctl restart firewalld
方法2:
也可以 public.xml配置
<?xml version="1.0" encoding="utf-8"?>
<zone<port protocol="tcp" port="80-8199"/><port protocol="tcp" port="8201-8299"/><port protocol="tcp" port="8301-30000"/>
</zone>
newszone.xml配置
<?xml version="1.0" encoding="utf-8"?>
<zone<source address="xx.21.0.16"/><source address="xx.21.0.99"/><port protocol="tcp" port="8200"/><port protocol="tcp" port="8300"/>
</zone>
注意,有的版本不支持这种合在一起的写法。
那就老老实实用命令行,一行一个规则:
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='182.12.14.3' port protocol='tcp' port='2181' accept"
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='145.2.4.5' port protocol='tcp' port='2181' accept"
sudo firewall-cmd --reload
这样生成的配置是:
<rule family="ipv4"><source address="182.12.14.3"/><port protocol="tcp" port="2181"/><accept/>
</rule><rule family="ipv4"><source address="145.2.4.5"/><port protocol="tcp" port="2181"/><accept/>
</rule>