Duvida com o firewall do linux debian

1. Duvida com o firewall do linux debian

Arthur Maskalenkas
Maskalenkasti

(usa Debian)

Enviado em 16/06/2018 - 15:03h

Pessoal,é o seguinte: sou iniciante e estou vendo umas vídeo aulas para estudar,só que chegou em um ponto em que o professor falou para eu mudar a policy da cadeia INPUT para DROP (único comando até agora) e logo depois ele me apresentou o comando "iptables -A INPUT -p icmp -icmp-type echo-request -j ACCEPT".até ai tudo bem.Esse comando serve para uma maquina ter permissão de pingar o meu servidor,mas ai logo depois começou a confusão,pois eu precisava ativar também a regra para o meu servidor pingar na maquina com o seguinte comando "iptables -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT".
A duvida é: pq que eu tenho que usar essa ultima regra sendo que para o meu servidor mandar dados (no caso o ping) para outras maquinas se usa o OUTPUT e não o INPUT? eu só alterei a policy do input (pacotes direcionados ao servidor) e não o OUTPUT (pacotes que saem do servidor).Pq eu tenho que usar essa ultima regra sendo que eu só alterei a policy do input?
Já tentei pingar na maquina usando o servidor e não deu certo com a policy de input dropando tudo que não esta nas regras.Pq?


  


2. Re: Duvida com o firewall do linux debian

Paulo Bonfanti
pbonfanti

(usa Debian)

Enviado em 16/06/2018 - 15:46h

Pessoal,é o seguinte: sou iniciante e estou vendo umas vídeo aulas para estudar,só que chegou em um ponto em que o professor falou para eu mudar a policy da cadeia INPUT para DROP (único comando até agora) e logo depois ele me apresentou o comando "iptables -A INPUT -p icmp -icmp-type echo-request -j ACCEPT".até ai tudo bem.Esse comando serve para uma maquina ter permissão de pingar o meu servidor,mas ai logo depois começou a confusão,pois eu precisava ativar também a regra para o meu servidor pingar na maquina com o seguinte comando "iptables -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT".
A duvida é: pq que eu tenho que usar essa ultima regra sendo que para o meu servidor mandar dados (no caso o ping) para outras maquinas se usa o OUTPUT e não o INPUT? eu só alterei a policy do input (pacotes direcionados ao servidor) e não o OUTPUT (pacotes que saem do servidor).Pq eu tenho que usar essa ultima regra sendo que eu só alterei a policy do input?
Já tentei pingar na maquina usando o servidor e não deu certo com a policy de input dropando tudo que não esta nas regras.Pq?

O iptables funciona como uma pilha e cada Target possui o seu proprio conjunto de regras empilhadas uma em cima da outra.
Cada vez que você adiciona uma regra como -A você está adicionando uma regra abaixo da ultima que você criou.
Cada vez que você adiciona uma regra como -I você está adicionando uma regra no topo daquela pilha abaixo da ultima que você criou.
Vou tentar demonstrar através de uma VM zerada que nunca rodeu um comando iptables:
Esse comando me mostra as Targets , cada uma delas é uma pilha de regras independente das outras, no caso estão todas zeradas e com a politica padrão ACCEPT,
esse firewall não está bloqueando absolutamente nada.

root@betelgeuse:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

A função da target INPUT é controlar os pacotes que entram na interface de rede, ou seja destinados a sua máquina,
por exemplo, um ping vindo de fora que aponta para o seu IP.
Então vamos testar um ping:
#ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=5.54 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.37 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.29 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=5.61 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=63 time=5.58 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=63 time=5.37 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=63 time=5.68 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=63 time=5.11 ms

--- 8.8.8.8 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7013ms
rtt min/avg/max/mdev = 5.116/5.447/5.682/0.182 ms

8 pacotes transmitidos e 8 recebidos, excelente.

Agora vamos mudar apenas a politica padrão do INPUT
 
#iptables -P INPUT DROP
Verificando
#iptables -L
Chain INPUT (policy DROP)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Testando o ping novamente:

#ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
23 packets transmitted, 0 received, 100% packet loss, time 22526ms

Perda total os pacotes saem, mas os pacotes de resposta nao sao recebidos
Colocando a primeira regra agora:

#iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Dessa vez eu vou usar -nL para mostrar o tipo numerico

#iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Agora teste do ping:

#ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6139ms

Novamente os pacotes sairam e nenhum retornou, mas o que eh o pacote icmp
echo-request, que tambem eh chamado de tipo 8?
Pense numa testemunha de jeova batendo na sua porta domingo de manha, pra
saber se voce esta em casa. Essas batidas na porta sao os pacotes echo-request
Se voce ignorar , vc dropou os pacotes, se responder, mesmo com um
xingamento, a sua resposta são pacotes echo reply.
Como nesse caso sou eu que estou batendo na porta do google e nao o
contrario, o google so tenta me enviar pacotes echo-reply que nao estao
liberados.
Agora empilhando mais uma regra:

#iptables -A IMPUT -p icmp --icmp-type echo-reply -j ACCEPT
#iptables -nL

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 0

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Agora eu tenho a liberacao de pacotes echo-reply, vamos ver o que acontece:

#ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=5.44 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.38 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.29 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=5.08 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=63 time=5.17 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 5.083/5.276/5.443/0.132 ms

Nenhuma perda de pacote, esta funcionando como esperado.
A primeira regra permite que eu ouca alguem batendo na minha porta
(verificando se eu estou online)
A segunda regra permite que ao bater na porta alheia
(pingar outras maquinas para saber se estao online),
eu possa ouvir a resposta (em forma de pacotes icmp echo-reply)

Sobre o servidor não estar pingando a sua máquina , é possivel que vcê tenha digitado uma das regras com a sintaxe errada
(a primeira regra eu suponho) e ela não entrou na pilha, ou tem firewall bloqueando icmp no proprio servidor. Convém vc verificar quais as regras estão realmente rodando no cliente e no servidor com o comando:

iptables -L


Iptables é espinhoso, caso eu tiver cometido algum deslize/erro, é só apontar que eu retifico,
mas que me lembre a primeira impressão é isso mesmo.





3. Re: Duvida com o firewall do linux debian

Arthur Maskalenkas
Maskalenkasti

(usa Debian)

Enviado em 16/06/2018 - 16:09h

pbonfanti escreveu:

Pessoal,é o seguinte: sou iniciante e estou vendo umas vídeo aulas para estudar,só que chegou em um ponto em que o professor falou para eu mudar a policy da cadeia INPUT para DROP (único comando até agora) e logo depois ele me apresentou o comando "iptables -A INPUT -p icmp -icmp-type echo-request -j ACCEPT".até ai tudo bem.Esse comando serve para uma maquina ter permissão de pingar o meu servidor,mas ai logo depois começou a confusão,pois eu precisava ativar também a regra para o meu servidor pingar na maquina com o seguinte comando "iptables -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT".
A duvida é: pq que eu tenho que usar essa ultima regra sendo que para o meu servidor mandar dados (no caso o ping) para outras maquinas se usa o OUTPUT e não o INPUT? eu só alterei a policy do input (pacotes direcionados ao servidor) e não o OUTPUT (pacotes que saem do servidor).Pq eu tenho que usar essa ultima regra sendo que eu só alterei a policy do input?
Já tentei pingar na maquina usando o servidor e não deu certo com a policy de input dropando tudo que não esta nas regras.Pq?

O iptables funciona como uma pilha e cada Target possui o seu proprio conjunto de regras empilhadas uma em cima da outra.
Cada vez que você adiciona uma regra como -A você está adicionando uma regra abaixo da ultima que você criou.
Cada vez que você adiciona uma regra como -I você está adicionando uma regra no topo daquela pilha abaixo da ultima que você criou.
Vou tentar demonstrar através de uma VM zerada que nunca rodeu um comando iptables:
Esse comando me mostra as Targets , cada uma delas é uma pilha de regras independente das outras, no caso estão todas zeradas e com a politica padrão ACCEPT,
esse firewall não está bloqueando absolutamente nada.

root@betelgeuse:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

A função da target INPUT é controlar os pacotes que entram na interface de rede, ou seja destinados a sua máquina,
por exemplo, um ping vindo de fora que aponta para o seu IP.
Então vamos testar um ping:
#ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=5.54 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=5.37 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=5.29 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=63 time=5.61 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=63 time=5.58 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=63 time=5.37 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=63 time=5.68 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=63 time=5.11 ms

--- 8.8.8.8 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7013ms
rtt min/avg/max/mdev = 5.116/5.447/5.682/0.182 ms

8 pacotes transmitidos e 8 recebidos, excelente.

Entendi o seu raciocínio,porem a minha duvida continua a mesma; pq bloqueando a cadeia INPUT eu não consigo pingar nas maquinas com o meu servidor?


4. Re: Duvida com o firewall do linux debian

Paulo Bonfanti
pbonfanti

(usa Debian)

Enviado em 16/06/2018 - 17:05h

Se você está falando de um servidor que não pinga vários clientes, é bem provável que você tenha um firewall bloqueando icmp no proprio servidor, sem saber como está o iptables dele e quais as saidas do comando ping fica difícil ter uma idéia.
Estou presumindo que o servidor está na mesma rede dos clientes.
N máquina que você tem duvida , faz o seguinte, empilha um LOG antes de liberar pacote vai ficar mais generico, ele vai logar pacotes depois ler a proxima regra:

iptables -I INPUT -p icmp -j LOG --log-prefix "PKT ICMP"
iptables -L

Depois de pingar você vai encontrar a saida do comando no /var/log/syslog ou no /var/log/messages.
A informação mais importante sao os enderecos de origem e destino que devem ser servidor e cliente, PROTO=ICMP TYPE, que diz qual é o tipo de pacote icmp e CODE que é o seu codigo de erro.
A RFC762 e atualizacões contem as especificacoes do icmp : https://tools.ietf.org/html/rfc792




5. Re: Duvida com o firewall do linux debian

Arthur Maskalenkas
Maskalenkasti

(usa Debian)

Enviado em 16/06/2018 - 17:31h

pbonfanti escreveu:

Se você está falando de um servidor que não pinga vários clientes, é bem provável que você tenha um firewall bloqueando icmp no proprio servidor, sem saber como está o iptables dele e quais as saidas do comando ping fica difícil ter uma idéia.
Estou presumindo que o servidor está na mesma rede dos clientes.

-----
Nesse servidor eu só mudei a policy do INPUT para dropar...Nada mais de configuração foi feita e após comandar o INPUT para dropar tudo, eu não consigo pingar nenhuma das maquinas clientes da rede através do meu servidor (2 clientes para pingar no virutalbox)...Queria apenas entender o porque isso acontece,ja que o OUTPUT permanece intacto e por lógica,era só para bloquear as maquinas que tentassem pingar no meu servidor e caso eu quisesse bloquear do servidor pingar nas outras maquinas,teria que ser feita no OUTPUT apenas.




6. Re: Duvida com o firewall do linux debian

Arthur Maskalenkas
Maskalenkasti

(usa Debian)

Enviado em 16/06/2018 - 17:34h

Se eu tento pingar do meu servidor para as outras maquinas,fica dando erro caso a policy de INPUT esteja dropando tudo.O porque algo que sai do servidor ser afetado pela cadeia INPUT?



7. Re: Duvida com o firewall do linux debian

Paulo Bonfanti
pbonfanti

(usa Debian)

Enviado em 16/06/2018 - 17:53h

Se você colocou a politica DROP no INPUT apenas e nenhuma regra para liberar pacotes no INPUT você consegue pingar mas máquinas, é como você ser surdo e gritar com alguém, você não ouve nem o que você diz, nem o que ele responde, o ping é inutil se você não permitir que nenhum pacote entre na máquina, a comunicação precisa ser feita nas duas direções,
Na prática sem o INPUT, a maquina que você está pingando sabe que você está online, mas você mesmo enviando pacotes a ela, vc não pode dizer o mesmo, porque não aceitou o pacote de resposta.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts