Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

1. Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

Daniel
dpitta

(usa Debian)

Enviado em 26/05/2023 - 12:29h

Estou criando um firewall bem simples para um servidor HTTP.
Só preciso liberar as portas 80 e 433 o resto bloquear.

O firewall esta funcionado, mas eu queria melhorar ele e colocar a política do INPUT com DROP.
Hoje esta esta como ACCEPT e no final das regras eu tenho uma regra dando DROP.
Mas pelo que tenho lido o ideal é já ter a política como DROP, mas quando eu coloco essa política eu perco o acesso e bloqueia Tudo não respeita nem as Regras com ACCEPT das portas 80 e 433.
O que estou fazendo de errado?


#!/bin/sh

#Politicas do INPUT
#iptables -t filter -P INPUT DROP #(Essa política é a que eu quero colocar)
iptables -t filter -P INPUT ACCEPT #(Essa política é como esta funcionando hoje)

#Limpa as Regras
iptables -F



#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT


#Regras de Ping
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j RETURN

#REGRAS do INPUT
iptables -A INPUT -p tcp --syn -j DROP #(Essa regra é como esta funcionando hoje)




  


2. Re: Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

rafael
ogro33

(usa Debian)

Enviado em 26/05/2023 - 12:45h

dpitta escreveu:

Estou criando um firewall bem simples para um servidor HTTP.
Só preciso liberar as portas 80 e 433 o resto bloquear.

O firewall esta funcionado, mas eu queria melhorar ele e colocar a política do INPUT com DROP.
Hoje esta esta como ACCEPT e no final das regras eu tenho uma regra dando DROP.
Mas pelo que tenho lido o ideal é já ter a política como DROP, mas quando eu coloco essa política eu perco o acesso e bloqueia Tudo não respeita nem as Regras com ACCEPT das portas 80 e 433.
O que estou fazendo de errado?


#!/bin/sh

#Politicas do INPUT
#iptables -t filter -P INPUT DROP #(Essa política é a que eu quero colocar)
iptables -t filter -P INPUT ACCEPT #(Essa política é como esta funcionando hoje)

#Limpa as Regras
iptables -F



#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT


#Regras de Ping
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j RETURN

#REGRAS do INPUT
iptables -A INPUT -p tcp --syn -j DROP #(Essa regra é como esta funcionando hoje)



Não sei onde você pegou essa informação de que o DROP deve vir primeiro.

O firewall funciona percorrendo a lista de regras da 1a a última até encontrar uma que satisfaça as condições da conexão sendo tratada. Assim que encontra determinada condição ele executa a ação programada e termina o processamento da conexão.

Ou seja, se vc tiver 1o uma regra negando qualquer conexão e em 2o lugar uma aceitando todas as conexões, nenhuma conexão será aceita visto que todas elas irão satisfazer a primeira regra.

Em alguns casos bem específicos, quando se quer negar a conexão a apenas alguns ips/portas e liberar para o resto, se coloca o DROP antes e depois libera para o resto.
No seu caso, vc quer liberar apenas para 2 portas, então a melhor forma de fazer é como vc tinha feito inicialmente. Liberando as conexões pras portas que vc deseja deixar abertas e em seguida dando DROP em todo o resto.





3. Re: Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

Buckminster
Buckminster

(usa Debian)

Enviado em 26/05/2023 - 16:18h

Tente assim:

#Limpa as Regras
iptables -F

#Define as políticas padrões
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Libera os pacotes pertencentes e relacionados às conexões liberadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

Para bloquear ping faça direto no kernel, veja no link abaixo:
https://www.vivaolinux.com.br/contribuir/artigo/verPagina.php?codpagina=59352

Caso bloquear tudo, coloque a regra iptables -P FORWARD DROP como ACCEPT ou comente ela, pois todas as políticas padrões vem como ACCEPT e você pode colocar elas em qualquer lugar do script, são as únicas regras que podem estar em qualquer lugar, mas o melhor é colocar no início.
Não sei se tu tem outras regras além dessas.
Ou então deixe como DROP e deixe o script assim:

#Limpa as Regras
iptables -F

#Define as políticas padrões
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Libera os pacotes pertencentes e relacionados às conexões liberadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

#FORWARD
iptables -A FORWARD -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 22 -j ACCEPT
iptables -A FORWARD -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A FORWARD -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

Essa regra
#REGRAS do INPUT
iptables -A INPUT -p tcp --syn -j DROP #(Essa regra é como esta funcionando hoje)

tu pode até acrescentar no final, pois ela bloqueia conexões SYN (no início da conexão) do protocolo tcp.
-A anexa uma ou mais regras para o final da chain, no caso da INPUT.

Essa regra
iptables -t filter -P INPUT DROP

estabelece a política padrão somente para a tabela filter que é a tabela padrão, mas não é aconselhável pois pode dar erro.
Políticas padrões são gerais e geralmente não aceitam parâmetros.
Políticas padrões são nesse formato:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT


https://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras

https://www.vivaolinux.com.br/artigo/Redes-de-Computadores-IPtables-Enderecos-IPs-Explicacoes-basica...

https://www.vivaolinux.com.br/topico/netfilter-iptables/Politica-padrao-Iptables


________________________________________________
Always listen the Buck!


4. Re: Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

rafael
ogro33

(usa Debian)

Enviado em 26/05/2023 - 17:59h


Buckminster escreveu:

Tente assim:

#Limpa as Regras
iptables -F

#Define as políticas padrões
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Libera os pacotes pertencentes e relacionados às conexões liberadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

Para bloquear ping faça direto no kernel, veja no link abaixo:
https://www.vivaolinux.com.br/contribuir/artigo/verPagina.php?codpagina=59352

Caso bloquear tudo, coloque a regra iptables -P FORWARD DROP como ACCEPT ou comente ela, pois todas as políticas padrões vem como ACCEPT e você pode colocar elas em qualquer lugar do script, são as únicas regras que podem estar em qualquer lugar, mas o melhor é colocar no início.
Não sei se tu tem outras regras além dessas.
Ou então deixe como DROP e deixe o script assim:

#Limpa as Regras
iptables -F

#Define as políticas padrões
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#Libera os pacotes pertencentes e relacionados às conexões liberadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Regras das portas que eu quero Abertas
iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

#FORWARD
iptables -A FORWARD -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 22 -j ACCEPT
iptables -A FORWARD -p tcp -s 127.0.0.1 -d 127.0.0.1 --destination-port 3306 -j ACCEPT
iptables -A FORWARD -p tcp -s 127.0.0.1 -d 127.0.0.1 ACCEPT

Essa regra
#REGRAS do INPUT
iptables -A INPUT -p tcp --syn -j DROP #(Essa regra é como esta funcionando hoje)

tu pode até acrescentar no final, pois ela bloqueia conexões SYN (no início da conexão) do protocolo tcp.
-A anexa uma ou mais regras para o final da chain, no caso da INPUT.

Essa regra
iptables -t filter -P INPUT DROP

estabelece a política padrão somente para a tabela filter que é a tabela padrão, mas não é aconselhável pois pode dar erro.
Políticas padrões são gerais e geralmente não aceitam parâmetros.
Políticas padrões são nesse formato:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT


https://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras

https://www.vivaolinux.com.br/artigo/Redes-de-Computadores-IPtables-Enderecos-IPs-Explicacoes-basica...

https://www.vivaolinux.com.br/topico/netfilter-iptables/Politica-padrao-Iptables


________________________________________________
Always listen the Buck!



Fala Buck. Tudo bem parceiro?

Cara, se eu entendi corretamente tua explicação o iptables funciona diferente do que eu afirmei no meu post. É isso mesmo?
Pergunto pq realmente achei que estivesse passando uma informação correta e se não for esse o caso, quero aproveitar a oportunidade para aprender e não disseminar mais informação incorreta por aí.

Agradeço pela correção e explicação.




5. Re: Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

Buckminster
Buckminster

(usa Debian)

Enviado em 26/05/2023 - 20:45h

ogro33

Você não estava errado, o Iptables lê de cima para baixo, porém, ele aplica a política padrão onde não encontra regras para aquela tabela e chain específica. Além disso tem os parâmetros como SYN (que age no início da conexão), ACK na resposta, RST e FIN, etc, e vários outros parâmetros.
Para saber teria que estudar a fundo o Iptables e ainda assim não se saberia tudo e aconteceriam erros no script. Ele é cheio de pormenores que complicam a coisa.

"O iptables lê as regras de cima para baixo, de acordo com cada tabela, ou seja, se uma regra bloquear tudo numa determinada tabela, as exceções (liberações) devem ser colocadas acima desta regra.

Exemplo:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j DROP

A primeira regra libera, a segunda rejeita e a terceira regra, nega o acesso. A primeira regra é que terá o privilégio, então, o acesso na porta 443 será liberado para todos, mesmo rejeitando e negando o acesso nas regras subsequentes.
Caso queiramos negar o acesso à porta 443 somente para alguns IPs, por exemplo, devemos colocar essas regras ACIMA da primeira regra.
Lembrando que nas regras acima não foi determinada nenhuma tabela (-t), então, elas serão aplicadas somente na tabela padrão, a filter, e, no caso, somente na chain INPUT."

https://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/

No meio desta brincadeira tem as tabelas e as chains INPUT, OUTPUT e FORWARD. A regra que você faz em uma chain não interfere diretamente na regra de outra, mas interfere indiretamente de acordo com a posição no script, um belo exemplo é o script do dpitta onde a regra iptables -t filter -P INPUT DROP bloqueou tudo na chain INPUT (tudo que entra no servidor) e isso aconteceu porque ele colocou parâmetros na política para a tabela filter que é a tabela padrão e por isso as regras de liberação posteriores não funcionaram.
As políticas padrões devem ser gerais:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Porém, o Iptables sempre teve esse problema de "arrumação" das regras onde uma fica interferindo na outra e torna-se difícil entender a "lógica" do Iptables. Mesmo enumerando as regras precisa ter um certo conhecimento e o manual sempre à mão. Eu mesmo estou deixando de usar o Iptables e passando a utilizar o Nftables que é o sucessor dele, pois a sintaxe é mais simples, são dos mesmos desenvolvedores e evita todos esses problemas:

"As regras são avaliadas da esquerda para a direita e o script como um todo é avaliado de cima para baixo.
Com a sintaxe simplificada do Nftables tornou-se difícil o autor do script enganar-se nas regras como acontecia com o Iptables onde o script ficava aquela bagunça que nem o próprio autor entendia mais; e quando precisava acrescentar ou deletar uma regra dava calafrios, suor e passava mal só em pensar em alterar o script. Depois de pronto e funcionando redondo o script do Iptables o autor sequer respirava muito forte perto dele para não bagunçar as regras. E se tinha o Squid em conjunto, aí então a coisa ficava pior ainda.
Boa parte desse problema de script Iptables bagunçado era devido à falta de conhecimento do autor do script e porque o Iptables tem essa falha, mas apesar disso tudo, o Iptables deixará saudades."

https://www.vivaolinux.com.br/artigo/Instalar-e-configurar-o-Nftables-com-exemplos-basicos-de-config...



________________________________________________
Always listen the Buck!


6. Re: Firewal não funcionada com Politica - iptables -t filter -P INPUT DROP

rafael
ogro33

(usa Debian)

Enviado em 27/05/2023 - 12:29h

Valeu Buck!

Tenho alguma experiência com firewall, mas nunca mexi diretamente com o iptables. Na verdade até cheguei a criar uma ou duas regras nele mas sempre já tinha uma base pronta e nunca precisei fazer nada mais sério ou robusto.

Tenho conhecimento sobre os termos ACK, etc, mas no ambiente de conexão de redes. Acredito que devem ser a mesma coisa uma vez que ambos "traballham" na mesma camada OSI.

Novamente agradeço pelos esclarecimentos e dicas.

Assim que eu tiver com um tempinho livre vou ler os tópicos que vc indicou nesse post para me aprofundar no assunto.


Valeu e bom fim de semana.









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts