Navegar com política DROP no Iptables
Olá amigos. Estou refazendo a parte de segurança aqui da empresa, e estou passando as políticas padrões do Iptables para DROP. Comecei pela chain INPUT, liberei os acessos que preciso e testei-os antes de mudar a política. Após a mudança, todas as regras que fiz funcionam corretamente, entretanto minha navegação não funciona! Estou utilizando o Squid como Proxy, redireciono as portas 80 e 443 para ele. Não estou utilizando proxy transparente. Segue a baixo o meu script, desde já agradeço pela ajuda.
Código bash:
# Firewall Linux
######## Variaveis
LAN=eth0
WAN=eth2
LW=eth+
REDE=192.168.0.0/24
######## Apaga registros e limpa
iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X &&
######## Carregando os modulos
modprobe ip_nat_ftp
modprobe iptable_nat
modprobe ip_nat_pptp
modprobe ip_gre
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
######## Politicas padrao
#iptables -P INPUT DROP
#iptables -P FORWARD DROP
#iptalbes -P OUTPUT DROP
######## Criando as regras de entrada, filtragem e redirecionamento
######## Permite entrada de pacotes pela rede local
iptables -A INPUT -p tcp -s $REDE -j ACCEPT iptables -A FORWARD -p tcp -s $REDE -j ACCEPT
######## Permite acesso via SSH
iptables -A INPUT -p tcp --dport 2530 -j ACCEPT
iptables -A FORWARD -p tcp --dport 2530 -j ACCEPT
######## Libera porta do Registro do Software Contas ERP
######## e a redireciona para o Servidor
iptables -A INPUT -p tcp --dport 211 -j ACCEPT
iptables -A FORWARD -p tcp --dport 211 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 211 -j DNAT 192.168.0.100:211
######## Libera Webmin para acesso externo
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -A FORWARD -p tcp --dport 10000 -j ACCEPT
######## Libera Windows Terminal Service
######## e redireciona para o Servidor
iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 3389 -j DNAT 192.168.0.100:3389
######## Libera porta 3050 para Ema GED
######## e redireciona para o Servidor
iptables -A INPUT -p tcp --dport 3050 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3050 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 3050 -j DNAT 192.168.0.100:3050
######## Libera portas para o OpenFire (Jabber)
######## e redireciona para o Servidor
iptables -A INPUT -m multiport -p tcp --dport 5222,5269 -j ACCEPT
iptables -A FORWARD -m multiport -p tcp --dport 5222,5269 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 5222 -j DNAT 192.168.0.100:5222
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 5269 -j DNAT 192.168.0.100:5269
######## Libera OpenVPN
######## e redireciona para o Servidor
iptables -A INPUT -p udp --dport 5000 -j ACCEPT
iptables -A FORWARD -p udp --dport 5000 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 5000 -j DNAT 192.168.0.100:5000
######## Permite acesso ao Filezilla Sever (FTP)
######## e redireciona para o Servidor
iptables -A INPUT -p tcp --dport 2121 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 2121 -j DNAT 192.168.0.100:21
######## Outras portas
iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
#Porta POP
iptables -A FORWARD -p tcp --dport 465 -j ACCEPT
#Porta SMTP
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
#Porta HTTP
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
#Porta HTTPS
######## Compartilha a conexao
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $REDE -j MASQUERADE
#Proxy
iptables -t nat -A PREROUTING -p tcp -s $REDE --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -p tcp -s $REDE --dport 443 -j REDIRECT --to-port 3128
#Libera VPN
iptables -A INPUT -p 47 -j ACCEPT
iptables -A FORWARD -p 47 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT
iptables -A INPUT -p udp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p udp --sport 1723 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -p udp --sport 1723 -j ACCEPT
# Abre a interface de loopback
iptables -A INPUT -i lo -j ACCEPT
# Ignora pings
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Protege contra spoofing
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Descarta pacotes malformados, protegendo contra ataques diversos
iptables -A INPUT -m state --state INVALID -j DROP
# Protege contra ping da morte
#iptables -A FORWARD -p icmp --icmp-type
echo-request -m limit 1/s -j ACCEPT
#Protege contra por scanners ocultos
#iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Bloqueando tracert
iptables -A INPUT -p udp -s 0/0 -i eth2 --dport 33435:33525 -j DROP
echo 'Firewall iniciado!'
Re: Navegar com política DROP no Iptables
voce bloqueou o OUTPUT ! se usar proxy, o acesso a internet de quem usa proxy é feito via OUTPUT (porque quem esta saindo é o proxy).
Código :
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
Re: Navegar com política DROP no Iptables
Bom, neste caso a politica padrão da chain OUTPUT está comentada, mas aqui estou utilizando ela em ACCEPT, com a política padrão da cadeia INPUT DROP, e então não consigo navegar.
Ainda que a política padrão da cadeia OUTPUT seja ACCEPT, tenho que liberar a saída da porta 80 com essa regra?
Obrigado pela ajuda parceiro!
Re: Navegar com política DROP no Iptables
se a politica padrao for accept.. e nenhuma das regras que la estejam interferir nos pacotes.. nao precisa colocar regra para porta 80 !!
Re: Navegar com política DROP no Iptables
Entendo...É aí que está o problema!
Minhas politicas estão aceitas para todas as chains, menos para a INPUT.
No momento estou fazendo o seguinte: Passando as regras para o fim do script e liberando a consulta DNS para a minha rede, a entrada da porta 53 no protocolo UDP com origem meu firewall que também é um gateway, e com destino a minha rede. Vou fazer o teste e após eu posto o resultado aqui.
Obrigado Alexandre.
Re: Navegar com política DROP no Iptables
Olá Alexandre.
De fato o teste que fiz não deu certo.
Descobri através do logs o seguinte: Tenho conectividade com a internet, tanto que consigo pingar para alguns sites, mas o dns não consegue ser resolvido.
O servidor DNS não é o meu firewall, utilizo o DNS da operadora que provém a internet aqui na empresa. Se eu colocar o IP do site no navegador, consigo acessá-lo co dificuldade, mas consigo, já pelo seu nome o squid me retorna com o erro de "Timeout" e diz que não conseguiu resolver o endereço. Enfim, que porta deve estar bloqueando isso?
Já coloquei a seguinte regra:
iptables -A FORWARD -s $LAN -p tcp --dport 3128 -j ACCEPT
Como utilizo proxy manual nos navegadores, todos estão saindo pela porta do Squid, mesmo assim essa regra não resolveu.
Obrigado pela ajuda!
Re: Navegar com política DROP no Iptables
A porta do DNS é UDP número 53...Um tcpdump no servidor pode te tirar várias dúvidas nesse caso..
Mais eu sugiro que faça o seguinte..Como vc usa o INPUT em DROP, libere a entrada(INPUT) do pacote na porta TCP (80,443,3128) e UDP(53) Para a placa de rede local.. E faça uma regra com estado para o pacote que volta, fazendo com que a saida para internet não tenha entrada do pacote para quando vem de fora nas portas 80, 443.. bla bla bla..
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
É isso, espero que esteja claro, qq coisa me avisa...
[]'s
Laercio Motta
Blog do Laercio Motta
Twitter: @laerciomasala
Re: Navegar com política DROP no Iptables
Olá Laércio, bom dia!
As regras de entrada que você citou, eu já as tenho deste modo:
iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
A regra que você citou eu ainda não tinha, vou realizar um teste e após, eu posto o resultado por aqui.
Obrigado pela ajuda!
Re: Navegar com política DROP no Iptables
Olá pessoal. Muito obrigado pela ajuda. Consegui resolver meu problema.
Além da regra citada pelo Laércio, o que estava faltando era a seguinte regra:
iptables -A FORWARD -p udp --dport 53
Antes só havia uma regra de INPUT para a porta 53. Depois disso consegui obter a navegação na rede.
Obrigado pela força!