宝塔与docker都是用iptables作为防火墙设置,但是宝塔是用的是 INPUT 链,而DOCER使用的是 DOCER-USER链

限制与Docker主机的连接
默认情况下,允许所有外部源IP连接到Docker主机。要仅允许特定的IP或网络访问容器,请在DOCKER-USER过滤器链的顶部插入一个否定的规则。例如,以下规则限制从以下所有IP地址进行的外部访问192.168.1.1:

iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.1 -j DROP

请注意,您将需要更改ext_if以与主机的实际外部接口相对应。您可以改为允许来自源子网的连接。以下规则仅允许从子网进行访问192.168.1.0/24:

iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.0/24 -j DROP

最后,您可以指定要接受的IP地址范围--src-range (请记住-m iprange在使用--src-range或时也要添加--dst-range):

iptables -I DOCKER-USER -m iprange -i eth0 ! --src-range 192.168.1.1-192.168.1.3 -j DROP

您可以结合使用-s或--src-range与-d或--dst-range一起控制源和目标。例如,如果Docker守护程序同时监听 192.168.1.99和10.1.2.3,则可以制定特定于10.1.2.3并保持 192.168.1.99打开的规则。

比如我的服务器的对外网卡名是 eth0,执行以下命令,则可限制容器端口只可以 192.168.2.0 子网访问

iptables -I DOCKER-USER -i eth0 ! -s 192.168.2.0/24 -j DROP

PVE创建带特权的alpine小鸡后不要启动,在关机下执行这条命令挂载宿主机内核模块目录,100是容器id,请根据情况修改

pct set 100 -mp0 /lib/modules,mp=/lib/modules

然后就可以启动虚拟机了,在虚拟机内执行以下命令

安装内核开发包

apk update && apk add linux-lts linux-firmware

生成模块依赖关系

depmod -a

最后执行tunnelbroker的route命令新增隧道即可
卸载内核开发包以节省空间

apk del linux-lts linux-firmware

Mar 19 10:15:50 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility...
Mar 19 10:15:50 raspberrypi rc.local[1057]: [27B blob data]
Mar 19 10:15:50 raspberrypi systemd[1]: rc-local.service: Control process exited, code=exited, status=1/FAILURE
Mar 19 10:15:50 raspberrypi systemd[1]: rc-local.service: Failed with result 'exit-code'.
Mar 19 10:15:50 raspberrypi systemd[1]: Failed to start /etc/rc.local Compatibility.

‌最后检查换行符格式‌发现脚本包含 r 符号,需转换为 Unix 格式:

sudo sed -i 's/\r//' /etc/rc.local

使用 nftables 实现
‌创建规则文件‌
编辑 /etc/nftables.conf,添加以下内容(以禁止TCP端口80为例):

table inet filter {
    chain input {
        type filter hook input priority 0;
        tcp dport 80 drop
    }
}

‌加载规则‌生效配置:

sudo nft -f /etc/nftables.conf