Luptă cu regulile de firewall cu containerele Docker.
Configurarea este după cum urmează.
Instalare subțire a Debian 11 care rulează Docker (autonom).
Instalat pe Docker este Portainer și alte 4 containere web.
Toate atașate la o singură rețea Bridged numită dkr-lan.
Ignorând containerul portainer, celelalte containere au următoarele porturi mapate
- web01 8081:80
- web02 8082:80
- web03 8083:80
- web04 8084:80
web01 și web03 pot fi accesate public de oriunde pe porturile 8081 și 8083.
Cu toate acestea, web02 poate fi accesat doar de două IP-uri publice 1.2.3.4 și 1.2.3.5.
De asemenea, web04 poate fi accesat doar de un IP public 1.2.3.4.
Folosesc iptables și am încercat inițial să stabilesc reguli în lanțul DOCKER-USER, totuși acest lucru pare să filtreze pachetele numai după ce a avut loc NAT și se pare că toate containerele după NAT folosesc portul 80. Nu am putut afla cum ACCEPT web02 și web04 pentru acele IP-uri și DROP restul.
După câteva căutări am început să cred că cea mai bună opțiune era filtrarea în lanțul PREROUTING.
cu reguli ca mai jos
# Pentru web01
iptables -t mangle -A PREROUTING -p TCP -s 0/0 --dport 8081 -j MARK --set-mark 1
# Pentru web02
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.4 --dport 8082 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.5 --dport 8082 -j MARK --set-mark 1
# Pentru web03
iptables -t mangle -A PREROUTING -p TCP -s 0/0 --dport 8083 -j MARK --set-mark 1
# Pentru web04
iptables -t mangle -A PREROUTING -p TCP -s 1.2.3.4 --dport 8084 -j MARK --set-mark 1
# Permiteți tot traficul marcat în PREROUTING
# Blocați restul traficului
iptables -A DOCKER-USER -m mark --mark 1 -j ACCEPT
iptables -A DOCKER-USER -p TCP --dport 8082 -j DROP
iptables -A DOCKER-USER -p TCP --dport 8084 -j DROP
Văd că traficul de intrare atinge regulile PREROUTING, deoarece contoarele cresc și pare ok.
Cu toate acestea, blocurile nu funcționează. Acest lucru se datorează faptului că s-au făcut în lanțul DOCKER-USER și în acel stadiu sunt după NAT.
Deci, cum pot configura reguli care să permită IP-uri bazate pe DPORT și apoi să blochez resetarea, de asemenea, pe baza DPORT?
Bănuiți că acest lucru trebuie făcut în lanțul PREROUTING?
Și, de asemenea, trebuie să fie perseverent. Ca și în acest moment, de fiecare dată când mă opresc și pornesc un container, pare să încalce regulile firewall și totul este din nou deschis pentru TOȚI. Acest lucru se face în lanțul DOCKER. Deci, cred că trebuie să-mi pun regulile în PREROUTING sau DOCKER-USER.
Ce îmi lipsește?