Configuração do Firewall através do iptables
Autor: Administrador de Redes | Publicado: 2008-11-28T15:42:00-02:00

#!/bin/sh#Configuração do Firewall através do iptables#Autoria do Script#"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"#" Script de Firewall - IPTABLES"#" Criado por: Marcio Ferreira da Costa"#" Administrador de Redes"#" mfcostarj@yahoo.com.br"#" Uso: firewall start stop restart"#"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"#Declaração de variaveisPATH=/sbin:/bin:/usr/sbin:/usr/binIPTABLES="/sbin/iptables"MACLIST="/etc/regras/macsliberadosfirewall"PROGRAMA="/etc/init.d/firewall"#portas liberadas e bloqueadasPORTSLIB="/etc/regras/portslib"PORTSBLO="/etc/regras/portsblo"#Interfaces de RedeLAN=eth1WAN=eth0REDE="192.168.253.0/24"SITESNEGADOS=/etc/regras/sitesnegados# Os diversos módulos do iptables são chamdos através do modprobemodprobe ip_tablesmodprobe iptable_natmodprobe ip_conntrackmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpmodprobe ipt_LOGmodprobe ipt_REJECTmodprobe ipt_MASQUERADEmodprobe ipt_statemodprobe ipt_multiportmodprobe iptable_manglemodprobe ipt_tosmodprobe ipt_limitmodprobe ipt_markmodprobe ipt_MARKcase "$1" instart)#mensagem de inicializaçãoecho "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"echo " Script de Firewall - IPTABLES"echo " Criado por: Marcio Ferreira da Costa"echo " Administrador de Redes"echo " mfcostarj@yahoo.com.br"echo " Uso: firewall start stop restart"echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"echoecho "=============================================="echo ":INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER "echo ": ATRAVÉS DO IPTABLES : "echo "=============================================="$IPTABLES -F$IPTABLES -F INPUT$IPTABLES -F OUTPUT$IPTABLES -F FORWARD$IPTABLES -t mangle -F$IPTABLES -t nat -F$IPTABLES -X$IPTABLES -P INPUT DROP$IPTABLES -P OUTPUT ACCEPT$IPTABLES -P FORWARD DROP# ativar o redirecionamento no arquivo ip_forwardecho "1" > /proc/sys/net/ipv4/ip_forwardecho "ativado o redirecionamento no arquivo ip_forward"echo "ON .................................................[ OK ]"#habilitando o fluxo interno entre os processos$IPTABLES -I INPUT -i lo -j ACCEPT$IPTABLES -I OUTPUT -o lo -j ACCEPTecho "ativado o fluxo interno entre os processos"echo "ON .................................................[ OK ]"#liberar as portas principais do servidorfor i in `cat $PORTSLIB`; do$IPTABLES -A INPUT -p tcp --dport $i -j ACCEPT$IPTABLES -A FORWARD -p tcp --dport $i -j ACCEPT$IPTABLES -A OUTPUT -p tcp --sport $i -j ACCEPTdone$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT$IPTABLES -I OUTPUT -p icmp -o $WAN -j ACCEPT$IPTABLES -I INPUT -p icmp -j ACCEPTecho "ativado as portas abertas para estabelecer conexões"echo "ativado a liberação das portas principais do servidor $HOSTNAME"echo "ON .................................................[ OK ]"#ATIVAR O REDIRECIONAMENTO (para ambiente flexível)#LIBERAR RADIO UOL (para ambiente flexível)#bloquear acesso de sites negados a rede internafor i in `cat $SITESNEGADOS`; do$IPTABLES -t filter -I FORWARD -s $REDE -d $i -j DROP$IPTABLES -t filter -I FORWARD -s $i -d $REDE -j DROP$IPTABLES -t filter -A INPUT -s $i -j DROP$IPTABLES -t filter -A OUTPUT -d $i -j DROPdoneecho "ativado o bloqueio de envio de pacotes com origem aos sites negados"echo "ON .................................................[ OK ]"#Bloqueio ping da morteecho "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all$IPTABLES -N PING-MORTE$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j PING-MORTE$IPTABLES -A PING-MORTE -m limit --limit 1/s --limit-burst 4 -j RETURN$IPTABLES -A PING-MORTE -j DROPecho "ativado o bloqueio a tentativa de ataque do tipo ping da morte"echo "ON .................................................[ OK ]"#bloquear ataque do tipo SYN-FLOODecho "0" > /proc/sys/net/ipv4/tcp_syncookies$IPTABLES -N syn-flood$IPTABLES -A INPUT -i $WAN -p tcp --syn -j syn-flood$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN$IPTABLES -A syn-flood -j DROPecho "ativado o bloqueio a tentativa de ataque do tipo SYN-FLOOD"echo "ON .................................................[ OK ]"#Bloqueio de ataque ssh de força bruta$IPTABLES -N SSH-BRUT-FORCE$IPTABLES -A INPUT -i $WAN -p tcp --dport 22 -j SSH-BRUT-FORCE$IPTABLES -A SSH-BRUT-FORCE -m limit --limit 1/s --limit-burst 4 -j RETURN$IPTABLES -A SSH-BRUT-FORCE -j DROPecho "ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"echo "ON .................................................[ OK ]"#Bloqueio de portasfor i in `cat $PORTSBLO`; do$IPTABLES -A INPUT -p tcp -i $WAN --dport $i -j DROP$IPTABLES -A INPUT -p udp -i $WAN --dport $i -j DROP$IPTABLES -A FORWARD -p tcp --dport $i -j DROP$IPTABLES -A FORWARD -p udp --dport $i -j DROP$IPTABLES -A OUTPUT -p tcp --dport $i -j DROP$IPTABLES -A OUTPUT -p udp --dport $i -j DROPdone#bloqueio Anti-Spoofings$IPTABLES -A INPUT -s 10.0.0.0/8 -i $WAN -j DROP$IPTABLES -A INPUT -s 127.0.0.0/8 -i $WAN -j DROP$IPTABLES -A INPUT -s 172.16.0.0/12 -i $WAN -j DROP$IPTABLES -A INPUT -s 192.168.1.0/16 -i $WAN -j DROPecho "ativado o bloqueio de tentativa de ataque do tipo Anti-spoofings"echo "ON .................................................[ OK ]"#Bloqueio de scanners ocultos (Shealt Scan)$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPTecho "bloqueado scanners ocultos"echo "ON .................................................[ OK ]"#amarrar ip ao macfor i in `cat $MACLIST`; do#aqui cada linha do maclist é atribuída de cada vezSTATUS=`echo $i cut -d ';' -f 1`#o comando echo exibe o conteúdo da variável e o pipe "" repassa a saída para outro comando,# o cut por sua vez reparte cada linha em pedaços onde o delimitador (-d) é o ';' no parâmetro#-f imprime na tela conteúdo da 1º coluna (status), a saída deste é enviada para STATUS;IPSOURCE=`echo $i cut -d ';' -f 2`MACSOURCE=`echo $i cut -d ';' -f 3`MARK=`echo $IPSOURCE cut -d '.' -f 4`# neste caso o IPSOURCE e o MACSOURCE recebem as outras colunas da mesma linha, faço uma#ressalva para o nome do computador que eu coloquei apenas para a organização do maclist,#pois neste do script contará até a 3º coluna.#aqui neste caso o comando if está dentro do laço for#Se status = a então iptables libera a conexão através destes comandos construídos na tabela filterif [ $STATUS = "a" ]; then$IPTABLES -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT$IPTABLES -t filter -A FORWARD -d $IPSOURCE -s 0/0 -j ACCEPT$IPTABLES -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT$IPTABLES -t filter -A OUTPUT -s $IPSOURCE -d 0/0 -j ACCEPT$IPTABLES -t filter -A OUTPUT -s 0/0 -d $IPSOURCE -j ACCEPT$IPTABLES -t mangle -A PREROUTING -s $IPSOURCE -j MARK --set-mark $MARK# Se for = b então bloqueia o MAC, ele só executa este comandos se STATUS não for igual a "a".elif [ $STATUS = "b" ]; then$IPTABLES -t filter -A FORWARD -m mac --mac-source $MACSOURCE -j DROP$IPTABLES -t filter -A INPUT -m mac --mac-source $MACSOURCE -j DROP$IPTABLES -t filter -A OUTPUT -m mac --mac-source $MACSOURCE -j DROPelse$IPTABLES -t filter -I INPUT -s $IPSOURCE -j DROP$IPTABLES -t filter -I FORWARD -s $IPSOURCE -d 0/0 -j DROP$IPTABLES -t filter -I FORWARD -s 0/0 -d $IPSOURCE -j DROP$IPTABLES -t filter -I OUTPUT -d $IPSOURCE -j DROPfi #fim do elifdone #fim do forecho "Ativado a amarração do ip ao mac"echo "ON .................................................[ OK ]"#proxy transparente$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128echo "Proxy Transparente ativado"echo "ON .................................................[ OK ]"# ativar o mascaramento$IPTABLES -t nat -A POSTROUTING -o $WAN -j MASQUERADE# Carrega controlador de banda/etc/init.d/cbq start #Para debian#/etc/rc.d/init.d/cbq start #Para slackwareechoecho "================================================="echo "::TERMINADA A CONFIGURAÇÃO DO FIREWALL NETFILTER "echo ":: ATRAVÉSDO IPTABLES "echo "================================================="echo "FIREWALL ATIVADO - SISTEMA PREPARADO"echo "SCRIPT DE FIREWALL CRIADO POR :-) Marcio Ferreira da Costa :-)";;stop)$IPTABLES -F$IPTABLES -F INPUT$IPTABLES -F OUTPUT$IPTABLES -F FORWARD$IPTABLES -t mangle -F$IPTABLES -t nat -F$IPTABLES -X$IPTABLES -Z$IPTABLES -P INPUT ACCEPT$IPTABLES -P OUTPUT ACCEPT$IPTABLES -P FORWARD ACCEPT/etc/init.d/cbq stop #Para debian#/etc/rc.d/init.d/cbq stop #Para slackwareecho "FIREWALL DESCARREGADO - SISTEMA LIBERADO";;restart)$PROGRAMA stop$PROGRAMA start;;*)echo "Use: $N {startstoprestart}" >&amp;2echo -e "\033[01;31mATENÇÃO";tput sgr0echo "Você não colocou nenhum argumento ou algum que seja conhecido, então Por Padrão será dado em 5 segundos um restart no firewall"sleep 5$PROGRAMA restartexit 1esacexit 0