我的服务器安装了几个 Docker 容器。
端口 3306 是某些 Docker 容器的转发器。
我想阻止这个端口,但又不破坏docker。
我这样做是
因为列表中只有端口 22 和 80,所有其他端口都应该关闭。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
...但是这显然不起作用,因为 Docker 在 FORWARD 通道中安装了其规则。
有什么想法可以让我轻松修复这个问题,而无需“接触”docker 容器?
答案1
以下是我想出的办法。
我正在回答的答案是,不确切地问题问的是什么。它不阻止访问,而是仅允许来自特定 IP 地址的访问,但现在阻止访问已经微不足道了。
https://docs.docker.com/network/iptables/
文章解释了你可以使用DOCKER-USER
chain 来做这样的事情。Docker 不会以任何方式清除或操纵此链。
我的设置如下:(
注意INPUT_F
和DOCKER-USER_F
不是标准链,是我定义的)
#!/bin/sh
# Turbo mode
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
# Disable ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
#Enable SYN Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#========================================================
DEV_EXTERNAL=enp2s0
#========================================================
iptables -N INPUT_F
iptables -N HOSTS_ALLOW
iptables -N DOCKER-USER
iptables -N DOCKER-USER_F
#========================================================
iptables -F INPUT
iptables -F INPUT_F
iptables -F HOSTS_ALLOW
iptables -F DOCKER-USER
iptables -F DOCKER-USER_F
#========================================================
iptables -P INPUT ACCEPT
#========================================================
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A DOCKER-USER -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $DEV_EXTERNAL -j INPUT_F
iptables -A DOCKER-USER -i $DEV_EXTERNAL -j DOCKER-USER_F
#========================================================
iptables -A INPUT_F -p tcp --dport 22 -j HOSTS_ALLOW
iptables -A INPUT_F -p tcp --dport 2022 -j ACCEPT
iptables -A INPUT_F -j DROP
#========================================================
iptables -A DOCKER-USER_F -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER_F -p tcp --dport 443 -j ACCEPT
iptables -A DOCKER-USER_F -j HOSTS_ALLOW
#========================================================
iptables -A HOSTS_ALLOW -s 199.217.118.213 -j ACCEPT
iptables -A HOSTS_ALLOW -s 185.154.12.78 -j ACCEPT
iptables -A HOSTS_ALLOW -s 46.200.74.21 -j ACCEPT
iptables -A HOSTS_ALLOW -j DROP
#========================================================
# iptables -L -n -v
# iptables-save > /etc/iptables/iptables.rules
更新
我确实做了一些改变,因为我似乎破坏了 docker 容器中的互联网访问。