Regra IPTables para permitir conexões SSH de entrada

9

O objetivo deste script é permitir apenas o tráfego pela VPN, exceto o localhost < - > localhost e o tráfego SSH de entrada. Mas quando executo o script pelo SSH estou desconectado e forçado a reiniciar o VM. O que há de errado com o meu roteiro?

#!/bin/bash
iptables -F

#Allow over VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

#Localhost
iptables -A INPUT -s 127.0.0.1/8 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1/8 -j ACCEPT

#VPN
iptables -A INPUT -s 123.123.123.123 -j ACCEPT
iptables -A OUTPUT -d 123.123.123.123 -j ACCEPT

#SSH
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

#Default Deny
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
    
por Steven 09.06.2014 / 12:53

2 respostas

7

A cadeia de saída é responsável pelo qualquer pacote que sai.

Seu script só permite pacotes de saída para a interface de túnel, host local e host remoto em 123.123.123.123.

Se você estiver se conectando ao servidor de uma maneira que requeira que o daemon SSH envie pacotes para o destino diferente de um dos itens acima, o tráfego não poderá ser apagado.

Para permitir pacotes de saída do seu daemon SSH para o cliente SSH, você precisa adicionar a seguinte regra:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

Você também pode adicionar critérios de IP de destino à regra acima, se estiver conectando apenas de um único local. Esta regra precisa vir antes da última regra 'DROP anything else' para a cadeia de saída.

    
por 09.06.2014 / 13:33
12

Sua regra #SSH implica que o ssh é uma forma de comunicação unidirecional, o que não é. Os dados estão sendo enviados e de volta.

A maneira normal de lidar com isso, desde que você não pode saber o número da porta no lado do cliente com antecedência, é permitir conexões que são consideradas "established "ou" related " para uma conexão estabelecida. Para fazer isso, você precisa:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Antes das regras de DROP (e de preferência no topo, já que as regras são processadas em ordem e estas duas serão aplicadas à maioria dos pacotes).

Há uma explicação de como uma conexão TCP se torna ESTABELECIDA aqui ; essencialmente, o fato de o servidor responder ao pacote permitido pela regra #SSH INPUT faz isso.

    
por 09.06.2014 / 13:27

Tags