Skip to main content

iptables settings

·141 words·1 min
Server iptables firewall

目标 #

限制对Docker容器内SSH服务的访问,确保只有通过VPN连接的用户(IP地址属于10.8.0.0/24网段)能够访问容器内的22端口。

做法 #

在宿主机添加service,在openvpn和docker启动之后执行添加iptables规则的脚本

#!/bin/bash
# file location: /admin/bootScript/setup-iptables.sh

# Flush FORWARD chain (optional, remove this if you want to keep existing rules)
# iptables -F FORWARD

# Insert iptables rules at the top of the FORWARD chain
iptables -I FORWARD  -d 172.30.0.0/24 -p tcp -m tcp --dport 22 -j REJECT --reject-with icmp-port-unreachable
iptables -I FORWARD  -d 172.30.0.0/24 -p tcp -m tcp --dport 22 -j LOG --log-prefix "SSH access into container out"
iptables -I FORWARD  -s 10.8.0.0/24 -d 172.30.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT

添加新的iptables规则:

首先拒绝所有尝试从任何源到达172.30.0.0/24网段(Docker内网)的22端口的TCP连接。

记录所有被拒绝的尝试进入容器的SSH连接请求。

允许从10.8.0.0/24网段(VPN客户端网段)到172.30.0.0/24网段的22端口的TCP连接。

添加为系统服务 #

创建一个systemd服务,确保在openvpn和docker启动之后执行添加iptables规则的脚本。

# file location:/etc/systemd/system/iptables-rules.service
[Unit]
Description=Insert iptables rules at boot
After=network.target docker.service openvpn.service

[Service]
Type=oneshot
ExecStart=/admin/bootScript/setup-iptables.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Docker内网 #

为了确保iptables控制的是Docker内网的流量,创建了一个docker network用于容器间通信,可以用以下命令查看docker network的配置:

docker network inspect container_system_network

可以得到包含以下内容的输入

"IPAM": {
    "Driver": "default",
    "Options": {},
    "Config": [
        {
            "Subnet": "172.30.0.0/16",
            "Gateway": "172.30.0.1"
        }
    ]
}

执行这些规则后,只有从VPN连接的用户才能访问Docker内部的SSH服务,其他所有未经授权的访问尝试都将被记录并拒绝。

Related

Openssh命令注入漏洞
·272 words·2 mins
Server openssh
OpenVPN Configuration Guide
·412 words·2 mins
Server vpn setup
·715 words·4 mins