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