更新

更新

我的服务器安装了几个 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-USERchain 来做这样的事情。Docker 不会以任何方式清除或操纵此链。

我的设置如下:(
注意INPUT_FDOCKER-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 容器中的互联网访问。

相关内容