iptables regras não funcionam

1

Não sei por que minhas regras de iptable estão bloqueando o acesso a https://example.com:9700 , apesar de a regra accept ter sido adicionada

Eu começo limpando tudo

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Em seguida, Soltando tudo, adicionando exceção para o ssh e minha porta 9700

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9700 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

O serviço funciona após a limpeza e pára de funcionar após o segundo conjunto de regras.

Observe que a regra para o SSH funciona perfeitamente. Posso me reconectar ao meu servidor via SSH após a regra ter sido adicionada

Problema no DNS DNS verificado não está funcionando por uma das respostas. No entanto, isso não explica porque ainda não consigo acessá-lo via endereço IP: https://xx.xxx.xx.x:9700

    
por user1048138 02.10.2015 / 04:53

2 respostas

4

Você pode resolver o nome de example.com? Se você bloquear o acesso a qualquer serviço de nomes, sua máquina não poderá acessar example.com - você teria que adicionar o host example.com e seu endereço IP em / etc / hosts ou adicionar uma exceção iptables para seu DNS .

Como postado aqui , uma exceção para o DNS pesquisas seria:

iptables -A INPUT -p udp --source-port 53 -j ACCEPT

EDITAR :

Desde que você superou os problemas de DNS, eu olhei mais profundamente em sua regra e, para minha compreensão do iptables, ele não pode funcionar. Você está permitindo o tráfego INPUT (para sua máquina) na porta de destino 9700 (em sua máquina!) E o tráfego OUTPUT (de sua máquina para o exterior) a partir de sua porta local 9700.

O que você quer é o exato oposto (ou estou errado?): você quer que sua máquina atinja um servidor externo na porta 9700, e você quer que este servidor possa lhe responder.

Então, suas duas últimas regras devem ser:

iptables -A OUTPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

Isso permite o tráfego que está sendo iniciado de qualquer porta (porque você não pode controlar qual porta um protocolo usará para o tráfego de saída) em seu computador para qualquer outra máquina na porta 9700 e permite que o tráfego de qualquer outra máquina no mundo seu computador SE os pacotes fizerem parte de uma conexão que já foi estabelecida.

    
por 02.10.2015 / 07:56
0

Tente:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 9700 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 9700 -m state --state ESTABLISHED -j ACCEPT

Suponho que o servidor DNS que resolve o endereço IP do example.com não seja a mesma máquina.

Além disso, não acho que seja realmente um problema definir a política da cadeia OUTPUT como ACCEPT. Experimente.

Esse conjunto de regras funciona para mim. Deve funcionar para você também.

Atenciosamente!

    
por 08.10.2015 / 22:10