v1.1 新增解决docker容器端口绕过firewall,centos7的防火墙不能控制docker容器端口的问题
v1.1 增加禁止ping操作
centos firewall 配置步骤建议
- 先加一些访问宽泛的无限制的访问策略,如IP白名单,端口白名单,22端口不限制访问等。避免配置防火墙策略过程中无法访问的问题
- 在txt中编写需要加载的所有策略,复制粘贴即可
- 重启加载防火墙服务,使(1)(2)策略生效
- 逐步移除(1)中增加的宽泛的和无用的策略(add换成remove即可),并重启加载防火墙服务
- 打印已生效规则,查看配置是否有误
- 如有docker,需要设置NAT映射,并开启docker地址访问权限。
各类命令如下
(1)常用查询命令:
// 重新加载防火墙服务
firewall-cmd --complete-reload
//查看已有默认规则集
firewall-cmd --list-all
//查看已开放的端口
firewall-cmd --list-ports
//当前运行策略写入配置文件(永久生效)
firewall-cmd --runtime-to-permanent
firewall-cmd --permanent --add-rich-rule 'rule family=ipv6 source address=fe80::ffff:ffff:ffff:ffff port port=xxxx protocol=tcp accept'
firewall-cmd --permanent --remove-service=dhcpv6-client
(2)常用4中策略配置方式(只针对访问进来的):
// IP+端口访问规则
(示例:允许192.168.1.1访问本机的22端口)
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.1 port port=80 protocol=tcp accept'
//端口白名单访问规则, 只在调试初期使用,使用完后删除。
(示例:对所有IP开放22端口)
firewall-cmd --zone=public --add-port=22/tcp --permanent
//IP白名单,建议针对多IP部署的业务使用,如果不想梳理端口,那就直接业务内部IP之间相互不限制端口访问
(示例:对192.168.1.1开放所有端口)
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.1 accept'
//策略删除只需要将对应命令的add修改为remove即可
(3)docker访问配置:
--设置防火墙允许NAT转发。配置完成后masquerade应该显示为yes
firewall-cmd --zone=public --add-masquerade --permanent
--把docker0网卡添加到trusted域
firewall-cmd --permanent --zone=trusted --change-interface=docker0
--加载策略
firewall-cmd --reload
--重启容器
systemctl restart docker
service docker restart
--查看docker0是否成功添加到trust区
firewall-cmd --get-zone-of-interface=docker0
--最后需要增加docker对应IP地址访问本机白名单策略
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.18.0.6 accept'
(4)收尾工作:
仔细检查确认后,逐步删除之前配置的宽泛服务及端口策略,不要一下删完了,每一步操作都留后路。
// 移除默认开启的没有访问限制的ssh服务,该服务开启后不限制访问,风险较高,所以建议最后删除。
firewall-cmd --permanent --remove-service=ssh
//策略删除只需要add替换为remove即可。
firewall-cmd --zone=public --remove-port=80/tcp --permanent
(5)其他辅助命令
//当前运行策略写入配置文件
firewall-cmd --runtime-to-permanent
//查看docker NAT规则是否存在
iptables -nL -t nat
//查看配置文件策略
cat /etc/firewalld/zones/public.xml
cat usr/lib/firewalld/zones/public.xml
//查看预定义服务
firewall-cmd --get-services
(6)解决docker容器端口绕过firewall,centos7的防火墙不能控制docker容器端口的问题
#修改/usr/lib/systemd/system/docker.service ,添加 --iptables=false
#vi /usr/lib/systemd/system/docker.service
#找到ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix://var/run/docker.sock 在中间添加 --iptables=false
#修改之后 :ExecStart=/usr/bin/dockerd --iptables=false -H tcp://127.0.0.1:2375 -H unix://var/run/docker.sock
重启容器,重启后需要重新加载程序
systemctl daemon-reload
systemctl restart docker
启动docker下的程序:
进入docker-compose.yml所在目录
#docker-compose up -d 启动程序
(7)禁止ping操作
禁止ping echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
恢复ping echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all