Iptables: Bloqueio do tráfego de saída, exceto para determinados endereços IP

5

Usando o iptables, eu preciso bloquear todo o tráfego de saída no meu servidor, exceto:

  • acesso SSH a um pequeno número de endereços IP
  • acesso HTTPS à mesma lista pequena de endereços IP

Alguém pode me mostrar um conjunto adequado de regras?

Obrigado.

    
por Rob Watson 06.11.2010 / 20:11

3 respostas

4

iptables -I OUTPUT -d <remote_ip> -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 22 -j ACCEPT
iptables -I OUTPUT -d <remote_ip> -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Você precisará inserir as primeiras 4 regras para cada um dos IPs. Esteja avisado, no entanto, porque você terá que fazer o login através do console nesta máquina; todos os outros acessos a ele serão bloqueados.

    
por 06.11.2010 / 20:30
3

Agora eu entendo o contexto do seu quesiton, tente:

iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 443 -j ACCEPT

E assim por diante. Isso definirá a política padrão como DROP e permitirá apenas o acesso listado aos endereços IP (ou intervalos). A segunda linha permite tráfego relacionado (por exemplo, pacotes de saída para uma sessão SSH em andamento), o terceiro e quarto exemplos para suas pesquisas de DNS.

Não se esqueça que você precisará de uma regra INPUT semelhante à linha 2.

    
por 06.11.2010 / 20:24
0

As postagens acima conseguirão bloquear todo o tráfego de saída, exceto SSH e HTTPS, mas não atenderão ao objetivo declarado acima (nos comentários):

I want users who log in via SSH to be unable to send data from this machine.

Considere o seguinte: Se eu tivesse acesso SSH à sua caixa, poderia simplesmente fazer o upload de dados para um local não confiável usando um túnel SSH e acessar um dos destinos para os quais você permite o tráfego de saída. Assim, não creio que o problema possa ser resolvido apenas por regras de iptable no seu host que contenham os dados confidenciais, se você quiser que os dados confidenciais não sejam copiados para fora de sua rede de qualquer forma.

    
por 07.11.2010 / 19:00