Centos7 利用firewalld修改docker端口权限

本文解决了一个关于如何使用iptables和firewalld-cmd阻止公网访问运行在Docker中的Elasticsearch的9200端口的问题。通过在iptables的forward链上设置规则,成功实现了对9200端口的保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能是我的所有博客里最简短的一篇了……纯属记录下,如果有遇到同样问题的朋友请看:
我的服务器上用docker运行的elasticsearch,开放了9200端口,但我不想让我的9200端口暴露在公网上,因此我用iptables加了两条规则试图drop外网对9200端口的请求:

iptables -I INPUT -p tcp --dport 9200 -j DROP
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 9200 -j ACCEPT

但是!我发现iptables的规则并save不了,同样的9200端口也还是依旧可以被外网访问。查询后发现Centos7用的防火墙是firewalld-cmd,因此我又开始往firewalld-cmd里添加规则并reload保存:

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="9200" accept"

再次测试之,不幸的是外网依然可以访问9200端口……这简直是要我逼疯了= =继续谷歌,发现docker在运行的时候,rule并不在input链上,而是在forward链上,这就解释了我的规则为什么没有起作用,因为我的端口是在docker里开的啊!那么这时候问题来了,firewalld咋把规则加在forward上呢。我发现firewalld其实是把iptables进行了一些包装而来的,内里还是iptables这一套,于是我就直接在iptables上加了forward规则:

iptables -L DOCKER -n --line-number # 先查询9200端口对应的docker序号
iptables -R DOCKER 3 -p tcp -m tcp -s 127.0.0.1 --dport 9200 -j ACCEPT

OK,接下来也不需要对iptables save也不需要systemctl restart,直接测试,发现外网已经访问不了9200端口了,同时本机是可以正常访问数据库的!完美!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值