Capaz de se conectar a algumas portas abertas no iptables e não em outras

1

Este é o arch linux, kernel 4.18.0-rc3.

Eu executei estes comandos:

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

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Allow local
iptables -A INPUT -i lo -j ACCEPT

# Allow services
iptables -A INPUT -p tcp -m tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 53 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 8000 -s 192.168.0.0/24 -j ACCEPT

# Allow established
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

E a execução de iptables -nvL produz:

Chain INPUT (policy DROP 2120 packets, 121K bytes)
 pkts bytes target     prot opt in     out     source               destination
  116 15649 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x00
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:!0x17/0x02 state NEW
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x3F
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
   36  2432 ACCEPT     tcp  --  *      *       192.168.0.0/24       0.0.0.0/0            tcp dpt:22
    1    44 ACCEPT     tcp  --  *      *       192.168.0.0/24       0.0.0.0/0            tcp dpt:53
    4   160 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    3   132 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       192.168.0.0/24       0.0.0.0/0            tcp dpt:8000

O que eu acho que parece ser bom, omiti algumas cadeias de docker adicionais que ele mesmo adiciona. Mas então, se eu nmap de outro host na rede eu recebo:

Host is up (0.0020s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
53/tcp  open   domain
443/tcp closed https
MAC Address: D4:5D:DF:13:98:A5 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 4.89 seconds

Então, o bit que não funciona

  • a porta 80 não está lá, mas ss mostra que está ouvindo e posso fazer isso - nginx em execução no docker
  • a porta 53 está lá e ss mostra que está ouvindo, mas não consigo cavar, ela expira - o dnsmasq não está em execução no docker

Eu estou supondo que estes são relacionados como se eu parasse o serviço iptables tudo passa ok, não tenho certeza qual o caminho a percorrer a seguir. Alguma sugestão do que estou sentindo falta?

Editar:

$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                 NAMES
7c91645b13e0        jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   11 hours ago        Up 11 hours         8080/tcp, 50000/tcp   jenkins_jenkins_1
be584769dae7        nginx:1               "nginx -g 'daemon of…"   11 hours ago        Up 10 hours         0.0.0.0:80->80/tcp    website_nginx_1
6fdc045ae863        mongo:3               "docker-entrypoint.s…"   36 hours ago        Up 11 hours         27017/tcp             wikijs_mongo_1
abf884b83aeb        requarks/wiki         "supervisord --nodae…"   36 hours ago        Up 11 hours         3000/tcp              wikijs_wiki_1

$ ss -tlan
State    Recv-Q Send-Q          Local Address:Port           Peer Address:Port
LISTEN   0      32                    0.0.0.0:53                  0.0.0.0:*
LISTEN   0      128                   0.0.0.0:22                  0.0.0.0:*
ESTAB    0      0                192.168.0.12:34196         192.168.0.209:8009
TIME-WAIT0      0         192.168.0.12%enp5s0:37082        138.201.81.199:80
ESTAB    0      0                192.168.0.12:58514        151.101.17.140:443
ESTAB    0      0                192.168.0.12:22             192.168.0.99:58500
ESTAB    0      0                192.168.0.12:34380         192.168.0.147:8009
ESTAB    0      0                  172.19.0.1:59316            172.19.0.3:80
ESTAB    0      0                  172.19.0.1:59304            172.19.0.3:80
LISTEN   0      128                         *:80                        *:*
LISTEN   0      128                         *:4243                      *:*
LISTEN   0      32                       [::]:53                     [::]:*
LISTEN   0      128                      [::]:22                     [::]:*
ESTAB    0      0       [::ffff:192.168.0.12]:80    [::ffff:192.168.0.99]:60214
ESTAB    0      0       [::ffff:192.168.0.12]:80    [::ffff:192.168.0.99]:60323
    
por rich 04.07.2018 / 22:24

1 resposta

0

O DNS não funciona porque o iptables estava permitindo TCP não UDP. Isso é simples. HTTP Eu entendo um pouco menos, mas por padrão o daemon do docker é executado como:

/usr/bin/dockerd -H fd://

Eu fiz isso para expor o daemon do docker em uma porta TCP

/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock

O que isso tem a ver com as portas nas quais os serviços de contêiner são executados, não sei. Mas por não expor o daemon do docker (eu precisava disso, não mais) está funcionando agora.

    
por 05.07.2018 / 12:29

Tags