docker下的oracle数据库服务存在漏洞,解决难度较高,于是通过firewalld限制高危端口开放,只允许本机访问。发现即使配置规则firewalld把oracle 1521漏洞端口不开放出去,但其他服务器依然能访问这给服务器的1521端口,也就是说firewalld配置的规则失效。
docker容器在创建时会在iptables的INPUT表的DOCKER链下自动创建规则放行端口,为了保证docker启动的每一个容器都能被外界访问(自私!),所以导致firewalld不放行端口也能被外界访问。
Firewalld服务启动时,会将iptables上的规则全部清空,并把firewalld上的防火墙策略规则写入到iptables中,此时docker因为防火墙规则被删除就会不正常,需要重启systemctl restart docker服务来重新刷写防火墙规则到iptables上,所以我们在管理Docker端口时,应该使用iptables防火墙而不是firewalld防火墙服务
首先在docker容器启动时不让它自动在iptables上船舰规则,在docker配置文件中添加 “iptables”: false