Iptables - enfrentando problemas para permitir portas específicas e bloquear outras

1

Eu tentei bloquear todas as portas, exceto 22 (ssh), 80 (http), 443 (https). Minhas regras atuais de INPUT são estas.

> iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere            

ele deve aceitar http e https port e bloquear todo o resto. mas está bloqueando tudo. por exemplo, quando tento visitar o facebook que usa a porta 80 & 443, não funciona. Eu não posso visitar o facebook. o que devo fazer agora?

Eu também tentei assim. Permitiu portas mencionadas e fez a política DROP , embora eu não tenha certeza. o mesmo acontece.

> iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
    
por Rabin 09.02.2018 / 01:44

2 respostas

1

As regras de política que você criou permitirão que os hosts fora se conectem a suas portas TCP 22, 80 e 443, mas não permitirão nenhum outro tráfego, incluindo seu próprio! Se você realmente quiser impedir que esse host acesse algo diferente dessas três portas e não queira que hosts externos acessem o seu em tudo , você poderá colocar as regras em sua cadeia de regra OUTPUT do seu INPUT one e, em seguida, ter uma regra CONNTRACK na sua cadeia de entrada para evitar conexões que você não iniciou:

-P INPUT DROP
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m udp -p udp --sport 53 -j ACCEPT
-A OUTPUT -i lo -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 53 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 443 -j ACCEPT

Eu costumo permitir que o adaptador de loopback funcione normalmente, pois alguns programas internos podem precisar dele; bem, eu permitiria o tráfego DNS, senão você não conseguirá resolver nomes de domínio.

    
por 09.02.2018 / 07:41
1

Como outros salientaram nos comentários, você não precisa de regras INPUT como as que acessam sites. Você só precisaria dessas regras se estivesse executando serviços nessas portas localmente. Se você quisesse restringir o tráfego de saída, essas regras precisariam ir para a cadeia OUTPUT.

Além disso, você está perdendo toda a conectividade porque está DROPping todo o tráfego de entrada. Quando você faz uma conexão com um servidor web, os dados de retorno (especificamente, o TCP 3 way handshake) será descartado na chain INPUT causa de seu catch-all queda. Para corrigir isso, você precisa adicionar uma regra para permitir essas conexões de retorno:

iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    
por 09.02.2018 / 16:15