Como proteger o VPS pelo firewall UFW corretamente?

2

Eu configurei um novo VPS no DO e agora estou tentando proteger meu servidor usando o firewall do UFW. Mas estou confuso só um pouquinho.

Portanto, meu objetivo é permitir o único SSH, portas relacionadas a HTTP / HTTPS. O resto deve estar fechado. O que eu fiz para obtê-lo:

# ufw allow ssh
# ufw allow http
# ufw allow https

# ufw enable

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Como você pode ver, tudo está bem aqui: todo o tráfego de entrada é negado, exceto 22, 80, 443 portas conforme o esperado.

A propósito, eu uso o Docker para meu aplicativo PHP Laravel. Para iniciar containers eu uso o comando: "docker-compose up -d".

$ docker-compose ps
  Name                Command              State                 Ports
------------------------------------------------------------------------------------
app        docker-php-entrypoint php-fpm   Up      9000/tcp
database   docker-entrypoint.sh mysqld     Up      0.0.0.0:3307->3306/tcp, 33060/tcp
web        nginx -g daemon off;            Up      0.0.0.0:81->80/tcp

Algumas portas estão disponíveis na máquina host: 3307, 81.

Para garantir que o firewall funcione corretamente, eu uso o nmap:

$ nmap -Pn [server ip]
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-13 12:17 EEST
Nmap scan report for [server host] ([server ip])
Host is up (0.054s latency).
Not shown: 995 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  closed smtp
80/tcp  open   http
81/tcp  open   hosts2-ns
443/tcp closed https

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

Aqui não consigo entender duas coisas:

25/tcp  closed smtp

Por que isso está aqui?

81/tcp  open   hosts2-ns

Por que esta porta está aberta?

Provavelmente, preciso inserir o contêiner da web e especificar explicitamente o endereço IP 127.0.0.1 na seção do servidor nginx. Tanto quanto eu sei, mysql por padrão é aberto apenas para localhost (my.conf), então como resultado não vemos a porta mysql na lista abaixo. Mas, afinal, por que o UFW não bloqueia as portas expostas do docker?

Agradeço antecipadamente a todos que podem me explicar o que é isso.

    
por Anton Kozytskyi 13.09.2018 / 11:56

1 resposta

0

Provavelmente ufw mostra apenas a configuração ufw e quaisquer regras inseridas diretamente na configuração do seu firewall (com iptables ou outra ferramenta como docker) sem passar pelo ufw NÃO são exibidas.

25/tcp  closed smtp

Why is this here?

Uma razão freqüente é que muitos ISPs (consumidores) e organizações bloqueiam o tráfego SMTP de saída.

81/tcp  open   hosts2-ns

Why is this port opened?

Não apenas a porta 81 está aberta, o nmap parou de varrer na porta 1024, mas eu espero que quando você verificar que a porta 3307 também esteja aberta.

Ele é aberto pela janela de encaixe, já que sua janela de encaixe é instruída a publicar as portas 81 e 3307 e mapeá-las para as instâncias da janela de encaixe ...

$ docker-compose ps
  Name                Command              State                 Ports
------------------------------------------------------------------------------------
app        docker-php-entrypoint php-fpm   Up      9000/tcp
database   docker-entrypoint.sh mysqld     Up      0.0.0.0:3307->3306/tcp, 33060/tcp
web        nginx -g daemon off;            Up      0.0.0.0:81->80/tcp

Inspecione a configuração de firewall ativa real sem a interface ufw amigável com por exemplo iptables-save ou com iptables -L -v -n -t nat (a maioria das interesing docker acontece nas seções NAT e de roteamento) e talvez iptables -L -v -n

Entradas relevantes seriam algo como:

# Generated by iptables-save v1.6.0 on Thu Sep 13 13:50:12 2018
*nat
:PREROUTING ACCEPT [21796:1434198]
:INPUT ACCEPT [9101:666864]
:OUTPUT ACCEPT [20943:1960461]
:POSTROUTING ACCEPT [118496:7063513]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 3307 -j DNAT --to-destination 172.17.0.3:33060
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 81   -j DNAT --to-destination 172.17.0.8:80

O que você provavelmente precisa fazer, se não quiser publicar as portas 81 e 3307 em toda a Internet, é alterar a maneira como você as publica na janela de encaixe. link

    
por 13.09.2018 / 13:48