Parte 01 - GUI, VNC e FTP
Parte 02 - Compartilhando a conexão
Parte 03 - Squid, proxy transparente
Dando continuidade, o Iptables é um firewall, instalado por padrão tanto no Ubuntu Server quanto em outras distribuições, como Debian, por exemplo.
Numa instalação normal do Ubuntu, o iptables é instalado mas todo tráfego é permitido por default.
INICIANDO SUAS REGRAS COM O SISTEMA
Existem diversas formas, descritas em vários sites, para inicializar suas configurações personalizadas com o sistema.
Algumas delas eu testei e deram certo, outras eu não consegui fazer funcionar.
Note que existem N formas de se trabalhar com o iptables.
Abaixo vou citar as mais comuns e, ao final, vou dizer qual foi a maneira que melhor funcionou para mim:
Opções:
1) Criar um script que invoca o seu arquivo de configurações do iptables
2) Utilizar algum arquivo do sistema que invoque seu arquivo de configurações do iptables
Forma escolhida:
3) Colocar suas configurações dentro de algum arquivo de sistema que já é automaticamente iniciado no boot.
Opção 01:
Criando um script que invoca o arquivo de configurações
Para se criar um script que seja inicializado com o sistema, basta criá-lo dentro do diretório /etc/init.d
Veja um exemplo para criação de um script simples:
sudo gedit /etc/init.d/meu_script
Insira o conteúdo abaixo no novo arquivo e clique em salvar:
#!/bin/bash echo "Olá mundo"
Agora é só dar a permissão de execução à esse arquivo:
sudo chmod 755 /etc/init.d/meu_script
Quase pronto, agora é só colocar para inicializar junto com o sistema:
sudo update-rc.d meu_script defaults
Para minimizar um pouco o trabalho, através do repositório, eu encontrei um pacote chamado: iptables-persistence
Fiz a instalação e ele criou automaticamente em init.d um script de mesmo nome (iptables-persistence) que invoca o arquivo: /etc/iptables/rules
O script criado tem essa cara:
#!/bin/sh ### BEGIN INIT INFO # Provides: iptables # Required-Start: mountkernfs $local_fs # Required-Stop: $local_fs # Default-Start: S # Default-Stop: # Short-Description: Set up iptables rules ### END INIT INFO case "$1" in start) if [ -f /etc/iptables/rules ]; then iptables-restore </etc/iptables/rules fi ;; stop|force-stop|restart|force-reload|status) ;; *) echo "Usage: $0 {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
Portanto, o arquivo que você deverá trabalhar as regras do iptables é, nesse caso, o /etc/iptables/rules.
Opção 02:
Invocando o arquivo de configurações por um arquivo do sistema
Seu arquivo de configuração pode ser inicializado através do seguinte código no arquivo interfaces:
pre-up iptables-restore < /etc/iptables/iptables.up.rules[após as configurações do adaptador de internet (eth0 nesse caso)]
Note que o arquivo com as configurações é o iptables.up.rules
Opção 03:
Iniciando as configurações por um arquivo do sistema
Após várias tentativas de rodar meus comandos através de scripts e arquivos invocados por scripts, eu decidi ser mais prático e menos "profissional".
Essa solução atende perfeitamente minhas necessidades e funcionou de uma forma incrivelmente simples.
Todas as suas configurações de iptables podem ser colocadas dentro do arquivo /etc/rc.local antes do comando "exit 0".
sudo gedit /etc/rc.local
CONFIGURAÇÕES DO IPTABLES (Arquivo rc.local)
Abaixo segue meu arquivo rc.local, com todas as configurações do iptables. Incluindo algumas que ainda não testei e as regras já citadas anteriormente.
Considere que não sou nenhum expert em redes e segurança, portanto a maioria dessas regras que serão citadas foram "catadas" da internet, então são regras muito batidas.
Se você for utilizar esse método, seu arquivo deve ficar com a seguinte cara:
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # ------------------------------------------------------------------- # IPTABLES - Configuracao personalizada || INICIO # ------------------------------------------------------------------- # Configuracoes das variáveis # ------------------------------------------------------- IF_EXTERNA=eth0 IF_INTERNA=eth2 IP_SERVER=10.10.16.242 IP_EXTERNO=X.X.X.119 # Esse é meu ip estático de internet # Adicionar módulos no kernel # ------------------------------------------------------- # Os modulos a seguir, de forma geral, compartilham a internet, # resolvem problemas de ftp e sao responsaveis pelos logs. modprobe ip_tables modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_LOG modprobe ipt_REJECT modprobe ipt_MASQUERADE # Flush - Limpar regras # ------------------------------------------------------------------- # Zerar regras default iptables -F iptables -F -t nat iptables -F -t mangle # Zerar regras personalizadas iptables -X iptables -X -t nat iptables -X -t mangle # Compartilhamento da internet # ------------------------------------------------------------------- echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # Politica padrão # ------------------------------------------------------- iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Tabela filter #iptables -t filter -P INPUT DROP #iptables -t filter -P OUTPUT ACCEPT #iptables -t filter -P FORWARD DROP # Tabela nat #iptables -t nat -P PREROUTING ACCEPT #iptables -t nat -P OUTPUT ACCEPT #iptables -t nat -P POSTROUTING DROP # Tabela mangle #iptables -t mangle -P PREROUTING ACCEPT #iptables -t mangle -P OUTPUT ACCEPT # Accept - Regras de liberaçao # ------------------------------------------------------- # Interface de loopback iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT # Abre para uma faixa de endereços da rede local iptables -A INPUT -p tcp --syn -s $IP_SERVER -j ACCEPT # Libera os pacotes de retorno da internet iptables -A INPUT -i ! $IF_EXTERNA -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT # Libera o acesso ao ftp iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT # Redirecionamentos # ------------------------------------------------------------------- # SQUID (para um proxy transparente) iptables -t nat -A PREROUTING -i $IF_EXTERNA -p tcp --dport 80 -j REDIRECT --to-port 3128 iptables -t nat -A PREROUTING -s 0/0 -p tcp --dport 80 -j REDIRECT --to-port 3128 # testar iptables -t nat -A PREROUTING -s 0/0 -p udp --dport 80 -j REDIRECT --to-port 3128 iptables -t nat -A POSTROUTING -s 0/0 -o $IF_INTERNA -j MASQUERADE # testar # VPN iptables -A INPUT -p tcp -i $IF_EXTERNA --dport 1723 -j ACCEPT iptables -A INPUT -p 47 -i $IF_EXTERNA -j ACCEPT iptables -t nat -A PREROUTING -p tcp -i $IF_EXTERNA --dport 1723 -j DNAT --to $IP_SERVER:1723 iptables -t nat -A PREROUTING -p 47 -i $IF_EXTERNA -j DNAT --to $IP_SERVER # Remote Desktop Connection - Server # Redirecionamento direto ao nosso servidor, no caso de uma chamada de RDC. iptables -t nat -A PREROUTING -p tcp -i $IF_EXTERNA -d $IP_EXTERNO --dport 3389 -j DNAT --to-destination $IP_SERVER:3389 # Filtros # ------------------------------------------------------- # Proteção contra alguns worms iptables -A FORWARD -p tcp --dport 135 -i $IF_INTERNA -j REJECT # Forçar checagem de pacotes fragmentados iptables -A INPUT -f -j DROP # Dropar pacotes nulos e malformados iptables -A INPUT -i $IF_EXTERNA -m unclean -j LOG --log-level 6 --log-prefix "FIREWALL: pacote mal formado: " iptables -A INPUT -i $IF_EXTERNA -m unclean -j DROP iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Syn packets check (dropar o que nao for um pacote SYN) iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: Non SYN packet: " iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP # Proteção contra syn-flood iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j LOG --log-level 6 --log-prefix "FIREWALL: SYN flood: " iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT # Protecao contra trace-routes iptables -A FORWARD -p udp -s 0/0 -i eth0 --dport 33435:33525 -j LOG --log-level 6 --log-prefix "FIREWALL: Trace Route: " iptables -A FORWARD -p udp -s 0/0 -i eth0 --dport 33435:33525 -j DROP # Proteção contra trojans iptables -N TROJAN iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: Trojan: " iptables -A TROJAN -j DROP iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6666 -j TROJAN iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6006 -j TROJAN iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 16660 -j TROJAN # Proteção contra trinoo # ------------------------------------------------------- #iptables -N TRINOO #iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: " #iptables -A TRINOO -j DROP #iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27444 -j TRINOO #iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27665 -j TRINOO #iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 31335 -j TRINOO #iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 34555 -j TRINOO #iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 35555 -j TRINOO # Proteção contra port scanners iptables -N SCANNER iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: Port scanner: " iptables -A SCANNER -j DROP iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER # Proteção contra ping da morte # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Recusa de pings # iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP # Programas P2P # ------------------------------------------------------- # Audiogalaxy iptables -A FORWARD -d 64.245.58.0/23 -j DROP # BearShare iptables -A FORWARD -p TCP --dport 6346 -j DROP # iMesh iptables -A FORWARD -d 216.35.208.0/24 -j DROP # KaZaa iptables -A FORWARD -d 213.248.112.0/24 -j DROP iptables -A FORWARD -p TCP --dport 1214 -j DROP # Limewire iptables -A FORWARD -p TCP --dport 6346 -j DROP # Morpheus iptables -A FORWARD -d 206.142.53.0/24 -j DROP iptables -A FORWARD -p TCP --dport 1214 -j DROP # Napigator iptables -A FORWARD -d 209.25.178.0/24 -j DROP # Napster iptables -A OUTPUT -p TCP --dport 6699 -j DROP iptables -A FORWARD -p TCP --dport 6699 -j DROP iptables -A OUTPUT -p UDP --dport 6699 -j DROP iptables -A FORWARD -p UDP --dport 6699 -j DROP # ToadNode iptables -A FORWARD -p TCP --dport 6346 -j DROP # WinMX iptables -A FORWARD -d 209.61.186.0/24 -j DROP iptables -A FORWARD -d 64.49.201.0/24-j DROP # Ativa mascaramento de saída # ------------------------------------------------------- iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE iptables -t nat -A POSTROUTING -o $IF_EXTERNA -j MASQUERADE # Logs - tentativas de acesso a determinadas portas # ------------------------------------------------------- iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: " iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: " iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: " iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: " iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: " iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: " iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: identd: " iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: " iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: " iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: " iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: irc: " iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: squid: " # Logs - outras recusas iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "FIREWALL: iptables denied: " --log-level 7 # ------------------------------------------------------------------- # IPTABLES - Configuracao personalizada || FIM # ------------------------------------------------------------------- exit 0
* Note que não tive tempo útil para testar todas essas regras e, com o tempo, pretendo ir incrementando meu firewall. Vou manter esse post atualizado com o que realmente funciona.
Aqui seguem mais algumas regras de bloqueio, que não estou utilizando pelo fato de que estou deixando o Squid cuidando dos acessos à websites, mas que podem ser de alguma utilidade para quem está pensando em reforçar o iptables:
# Bloqueio de MSN - Fonte: www.vivaolinux.com.br/artigo/Bloqueando-MSN-orkut-trojans-e-mais/ # ------------------------------------------------------- iptables -A FORWARD -d gateway.messenger.hotmail.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d login.live.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d contacts.msn.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d storage.msn.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d c.msn.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d messenger.msn.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d g.msn.com -p tcp --dport 80 -j REJECT iptables -A FORWARD -d messenger.hotmail.com -p tcp --dport 1863 -j REJECT iptables -A FORWARD -d edge.messenger.live.com -p TCP --dport 80 -j REJECT iptables -A FORWARD -p TCP --dport 443 -j REJECT iptables -A FORWARD -p TCP --dport 1863 -j REJECT iptables -A FORWARD -d 64.4.13.0./24 -j REJECT # Bloqueio do Orkut - Fonte: www.vivaolinux.com.br/artigo/Bloqueando-MSN-orkut-trojans-e-mais/ # ------------------------------------------------------- iptables -A FORWARD -d orkut.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.orkut.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP # Bloqueio de alguns web-messengers # ------------------------------------------------------- iptables -A FORWARD -d www7.messengerfx.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.iloveim.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.ebuddy.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.meebo.com.br -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.koolim.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.kkurok.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.imunitive.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.radiusim.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d imo.im -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.communicationtube.net -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d vcontent.e-messenger.net -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.myemessenger.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d messengerskinner.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.messengerskinner.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d rad.msn.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.messengertools.net -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d messenger.zango.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.zangomessenger.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP # Bloqueio de alguns proxies # ------------------------------------------------------- iptables -A FORWARD -d www.nproxy.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.snoopblocker.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.pproxy.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.nopath.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d anonymouse.ws/anonwww.html -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.megaproxy.com/freesurf/ -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www8.tok2.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.fireprox.com/ -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.vtunnel.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.spynot.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.fsurf.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.onlinemessenger.nl -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.3proxy.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.euproxy.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.torperkut.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.orkutando.net -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.theorkut.rg3.net -s 192.168.0.0/24 -p tcp --dport 80 -j DROP iptables -A FORWARD -d www.proxy3.com -s 192.168.0.0/24 -p tcp --dport 80 -j DROP
REFERÊNCIAS
Depois desse enorme trabalho, nada mais justo do que citar e agradecer às minhas principais referências ;)
http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-3
http://www.vivaolinux.com.br/artigo/Firewall-rapido-e-seguro-com-iptables/
http://www.vivaolinux.com.br/artigo/Criando-um-firewall-simples-e-compartilhando-a-conexao-usando-o-IPtables/?pagina=2
http://www.guiaubuntupt.org/wiki/index.php?title=Iptables#Configurar_no_Startup
http://www.vivaolinux.com.br/etc/firewall-mitre
http://www.guiadohardware.net/artigos/firewall-iptables/
http://alexsandropedrollo.com/2010/08/11/compartilhar-rede-no-ubuntu/
http://softwarelivre.org/andre-ferraro/blog/linux-compartilhando-a-conexao-de-internet
http://174.123.53.162/artigo/Configurar-servidor-proxy-Squid-%28Ubuntu%29?pagina=2
http://graveheart.me/geek-life/instalando-e-configurando-um-servidor-proxy-com-o-ubuntu-server-em-menos-de-duas-horas/
http://www.vivaolinux.com.br/etc/squid.conf-alencar
http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap5-12
http://www.guiadohardware.net/tutoriais/servidor-rede-local-ubuntu/pagina6.html
http://www.zago.eti.br/squid/dicas-e-truques.html#toc2
Tenham um bom proveito!
;)
5 comentários:
Parabens muito bom obrigado,
cássio.
Muito bom!!! vou implementar aqui pra ver!! demais!!
e obrigado por compartilhar!!
Que bom que foi de alguma utilidade para mais alguém, pq foi um belo trampo.
E vou falar que até agora não tive nenhum problema com ele.
Muito bom, vou implementar em minha empresa e homologar, breve post maiores detalhes. Parabéns pelo post.
Parabéns! Muito bom! Agradeço por sua generosidade em compartilhar se conhecimento com todos! Posso lhe convidar via msn/facebook? Um forte abraço!
Postar um comentário