#!/usr/bin/bash # By Leandro Figueira Ceranto - leandrofigueira_at_msn.com # This program is protected with GPL Licence. Details in www.gnu.org # Root user only for exec this aplication. # Based on script developed by forumgdh.net # Date: 1/02/2005. # # O jeito e limpar a tela para o user prestar atencao em alguns erros que podem ocorrer. clear # echo "Carregando o firewall..." # # Mude os caminhos a seguir de acordo com suas necessidades. IPTABLES="/usr/sbin/iptables" REDEINT="192.168.0.0/8" IPDNSPROVEDOR="200.221.11.101" ENT="ppp0" # # carregando os modulos echo # # O comando a seguir tenta carregar o modulo iptables necessario para o funcionamento deste script # Por ser um comando essencial, se ele nao carregar o script para aqui mesmo, gerando um erro. echo -n Carregando o modulo ip_tables...&& modprobe ip_tables && echo ... [OK] # # Decomente a linha a seguir se voce for compartilhar a conexao com a internet # echo -n Carregando compartilhamento de conexao...&& modprobe iptable_nat && echo ...[OK] echo # # # Descomente a linha a seguir se voce for usar o compartilhamento de conexao. #$IPTABLES -t nat -F && echo -n .......... [OK] # # Inicio da parte 'bruta' do script # # Liberando as tabelas echo -n Limpando as tabelas...&& $IPTABLES -F && echo ... [OK] echo # echo -n Ativando protecoes gerais..... # Protege contra os "Ping of Death" $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Protege contra os ataques do tipo "Syn-flood, DoS, etc" $IPTABLES -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT # Permitir repassamento (NAT,DNAT,SNAT) de pacotes etabilizados e os relatados ... $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Logar os pacotes mortos por inatividade ... #$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG # Protege contra port scanners avanados (Ex.: nmap) $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Protege contra pacotes que podem procurar e obter informaes da rede interna ... $IPTABLES -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP # Protege contra todos os pacotes danificados e ou suspeitos ... $IPTABLES -A FORWARD -m unclean -j DROP # Bloqueando tracertroute $IPTABLES -A INPUT -p udp -s 0/0 -i $ENT --dport 33435:33525 -j DROP # Protecoes contra ataques $IPTABLES -A INPUT -m state --state INVALID -j DROP # Performance - Setando acesso a web com delay minimo $IPTABLES -t mangle -A OUTPUT -o $ENT -p tcp --dport 53 -j TOS --set-tos Minimize-Delay $IPTABLES -t mangle -A OUTPUT -o $ENT -p tcp --dport 80 -j TOS --set-tos Minimize-Delay # Deixa passar as portas UDP do servidor DNS, e Rejeitar o restante $IPTABLES -A INPUT -i $ENT -p udp -s $IPDNSPROVEDOR -j ACCEPT $IPTABLES -A INPUT -i $ENT -p udp -s $IPDNSPROVEDOR -j ACCEPT $IPTABLES -A INPUT -i $ENT -p udp -j REJECT # Bloqueia qualquer tentativa de conexao de fora para dentro por TCP $IPTABLES -A INPUT -i $ENT -p tcp --syn -j DROP # Mesmo assim fechar todas as portas abaixo de 32000 $IPTABLES -A INPUT -i $ENT -p tcp --dport :32000 -j DROP # Responde pacotes icmp especificados e rejeita o restante $IPTABLES -A INPUT -i $ENT -p icmp --icmp-type host-unreachable -j ACCEPT $IPTABLES -A INPUT -i $ENT -p icmp --icmp-type source-quench -j ACCEPT $IPTABLES -A INPUT -i $ENT -p icmp -j REJECT --reject-with icmp-host-unreachable # libera acesso interno da rede $IPTABLES -A INPUT -p tcp --syn -s $REDEINT -j ACCEPT $IPTABLES -A OUTPUT -p tcp --syn -s $REDEINT -j ACCEPT $IPTABLES -A FORWARD -p tcp --syn -s $REDEINT -j ACCEPT # libera conexoes de fora pra dentro # Libere esses parametros somente com absoluta certeza do que se esta fazendo. #$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 20 -j ACCEPT #$IPTABLES -A INPUT -p tcp --destination-port 21 -j ACCEPT #$IPTABLES -A INPUT -p tcp --destination-port 22 -j ACCEPT #libera conexoes de dentro pra fora: $IPTABLES -A OUTPUT -p tcp --destination-port 80 -j ACCEPT #porta http $IPTABLES -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 22 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 20 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 21 -j ACCEPT #porta do ftp $IPTABLES -A OUTPUT -p tcp --destination-port 86 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 5190 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 443 -j ACCEPT $IPTABLES -A OUTPUT -p tcp --destination-port 6666 -j ACCEPT #porta do irc $IPTABLES -A OUTPUT -p tcp --destination-port 6667 -j ACCEPT #porta do irc $IPTABLES -A OUTPUT -p tcp --destination-port 6668 -j ACCEPT #porta do irc # libera o bittorrent - (no X.X.X.X pelo IP da mquina correspondente #$IPTABLES -A INPUT -p tcp --destination-port 1214 -j ACCEPT #$IPTABLES -t nat -A PREROUTING -i ppp0 -p tcp --dport 1214 -j DNAT --to-dest X.X.X.X #$IPTABLES -A FORWARD -p tcp -i ppp0 --dport 1214 -d X.X.X.X -j ACCEPT #$IPTABLES -t nat -A PREROUTING -i ppp0 -p udp --dport 1214 -j DNAT --to-dest X.X.X.X #$IPTABLES -A FORWARD -p udp -i ppp0 --dport 1214 -d X.X.X.X -j ACCEPT # faz o icq receber arquivos - (no X.X.X.X pelo IP da mquina correspondente #$IPTABLES -A INPUT -p tcp --destination-port 2000:3000 -j ACCEPT #$IPTABLES -t nat -A PREROUTING -i ppp0 -p tcp --dport 2000:3000 -j DNAT --to-dest X.X.X.X #$IPTABLES -A FORWARD -p tcp -i ppp0 --dport 2000:3000 -d X.X.X.X -j ACCEPT #$IPTABLES -t nat -A PREROUTING -i ppp0 -p udp --dport 2000:3000 -j DNAT --to-dest X.X.X.X #$IPTABLES -A FORWARD -p udp -i ppp0 --dport 2000:3000 -d X.X.X.X -j ACCEPT # compartilha a web na rede interna #$IPTABLES -t nat -A POSTROUTING -s $REDEINT -o ppp0 -j MASQUERADE #echo 1 > /proc/sys/net/ipv4/ip_forward # bloqueia o resto $IPTABLES -A INPUT -p tcp --syn -j DROP $IPTABLES -A OUTPUT -p tcp --syn -j DROP $IPTABLES -A FORWARD -p tcp --syn -j DROP # bloqueia ping echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all echo ..... [OK] echo # # Libera loopback. Isso e muito importante se voce for usar o cups ou samba via html. echo -n Liberando o loopback... iptables -I INPUT -i lo -j ACCEPT iptables -I OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT && echo ... [OK] # ---------------------------------------------------------------- echo # echo "Firewall carregado." # EOF