Как включить пересылку только для одного docker -контейнера в iptables? - PullRequest
0 голосов
/ 02 апреля 2020

Еще один вопрос по поводу iptables. Я перепробовал множество комбинаций правил, но не могу найти подходящего решения.

У меня есть сервер с S SH, OpenVPN и некоторыми docker контейнерами. За исключением S SH и OpenVPN, я хочу разрешить доступ извне только для одного из docker контейнеров (обратный прокси-сервер Traefik на порту 80). И все остальные контейнеры docker должны быть доступны только через VPN.

Теперь мой скрипт sh выглядит следующим образом. Это работает, но таким образом мне нужно перечислить все отключенные службы. И у меня гораздо больше контейнеров, чем 3. Как это сделать правильно?

#!/bin/sh

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

# disable all except of ssh and OpenVPN
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# enable ftp (21 and 21100-21110) in docker for VPN users only
iptables -A FORWARD -p tcp ! -i tun0 --dport 21 -j DROP
iptables -A FORWARD -p tcp ! -i tun0 --match multiport --dports 21100:21110 -j DROP

# enable web (8080) in docker for VPN users only
iptables -A FORWARD -p tcp ! -i tun0 --dport 8080 -j DROP
...