iptables: Permitir apenas acesso HTTP para navegação na web

4

Tenha uma caixa linux, quer que ela seja bloqueada, mas apenas consiga navegar na internet nela. Por que esse script está bloqueando o http também?

#!/bin/sh
#
#
iptables -F

#
#Set default policies for INPUT, FORWARD and OUTPUT chains
#
iptables -P INPUT DROP                
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#
# Allow TCP connections on tcp port 80
#
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

#
# Set access for localhost
#
iptables -A INPUT -i lo -j ACCEPT


#
# List rules
#
iptables -L -v
    
por user1448260 02.07.2012 / 15:57

6 respostas

3

Porque a regra

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

com uma política DROP na cadeia OUTPUT requer duas coisas que são altamente relevantes aqui:

  1. A conexão já deve ter sido estabelecida
  2. A porta de origem deve ser 80 / tcp

As portas de origem abaixo de 1024 são privilegiadas e geralmente não são usadas para conexões de saída, mesmo quando o processo de propriedade do soquete está sendo executado como raiz. É mais provável que você veja um número de porta de origem alto saindo, bem acima de 30000 parece ser comum.

Também não há como estabelecer uma conexão, pois o único tráfego de saída permitido deve estar relacionado a uma conexão já estabelecida.

Assim, na prática, nada pode corresponder a essa regra.

Tente:

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

que deve permitir qualquer conexão de saída para a porta TCP 80 destino onde o tráfego é roteado através da eth0, que é muito mais compatível com o que você deseja.

E, como já foi apontado, não se esqueça de HTTPS, DNS, ...

    
por 02.07.2012 / 16:33
2

Olhando para estas duas regras você tem

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

O que você tem é o que você diria para permitir a entrada em um servidor da Web que você executa.

O que você tem é idêntico ao que esta página diz Para permitir a entrada ... link

6. Allow Incoming HTTP and HTTPS

The following rules allow all incoming web traffic. i.e HTTP traffic to port 80.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Mas você quer permitir a saída, de acordo com sua pergunta. Você pode consultar essa página novamente

Aqui está um exemplo para permitir a saída.

iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Está claro nessa página, parece que você estava consultando a seção errada.

Então, as duas regras que você tinha estavam erradas.

    
por 04.06.2014 / 22:30
1

Se possível, tente limpar tabelas ip e veja se você realmente pode se conectar via http. ( iptables -F )

Como o Darth Android estava dizendo, verifique se você não está tentando se conectar via https.

Além disso, você tem mais de uma interface ethernet? Ou é a sua interface ethernet chamada outra coisa além da eth0. um ifconfig rápido mostrará a você quais são os nomes das suas interfaces.

    
por 02.07.2012 / 16:21
1
iptables -I  INPUT 1 -i lo -j ACCEPT
iptables -I  INPUT 2 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I  INPUT 3 -j DROP
iptables -I  OUTPUT 1 -o lo -j ACCEPT
iptables -I  OUTPUT 2 -p tcp -m multiport --dports 80,443 -j ACCEPT 
iptables -I  OUTPUT 3 -j DROP
iptables -I  FORWARD 1  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I  FORWARD 2 -j DROP

Não deixará nossas regras mais complexas do que o necessário.

NUNCA bloqueie o adaptador de loopback.

------ ENTRADA

  1. O DNS, a navegação na Web e o etc só geram tráfego com base na saída, portanto, são considerados RELACIONADOS ou ESTABELECIDOS.
  2. DROP tudo o resto porque não é necessário.

----- SAÍDA

  1. Aceite LO
  2. Você deseja aceitar apenas o tráfego da Web 80.443 são essas portas DROP as sobras

----- AVANÇO

Se você tem 1 nic, não deve haver muito tráfego aqui, mas a mesma coisa se aplica se não for RELACIONADA ou ESTABELECIDA, simplesmente não a queremos.

    
por 31.12.2016 / 06:48
0

Você também precisa permitir o ICMP nas duas direções ou na descoberta do caminho MTU e na recuperação de erros, tentando que um endereço IP diferente seja quebrado.

Geralmente, você deseja permitir todo o tráfego ESTABELECIDO e RELACIONADO.

    
por 07.07.2012 / 16:36
0

Bem, se você estiver usando o google dns como eu, então deve ser algo assim:

sudo ip6tables -P INPUT DROP
sudo iptables -P INPUT ACCEPT
sudo iptables -F

sudo iptables -A INPUT -i lo -p udp -s 127.0.0.1 -d 127.0.1.1 --sport 40000:65535 --dport 53 -m limit --limit 50/s -j ACCEPT
sudo iptables -A INPUT -i lo -p udp -d 127.0.0.1 -s 127.0.1.1 --dport 40000:65535 --sport 53 -m limit --limit 50/s -j ACCEPT
sudo iptables -A INPUT -p udp -s 8.8.4.4 --sport 53 -m limit --limit 50/s -j ACCEPT
sudo iptables -A INPUT -p udp -s 8.8.8.8 --sport 53 -m limit --limit 50/s -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --sports 443,80 -m state --state NEW,ESTABLISHED -m limit --limit 50/s -j ACCEPT
sudo iptables -P INPUT DROP
    
por 07.01.2016 / 07:36