+ Responder ao Tópico



  1. #1

    Thumbs up Servidor Wireless

    Blz galera, eu montei um servidor de internet wireless (squid, DNS, cadastro de clientes com IP amarrado ao MAC, CBQ - controle de banda e firewall), estou aqui para mostrar o script do firewall que criei através de vários artigos da internet.

    Já faz um mês que o servidor está funcionando com essas regras.
    Gostaria que vocês dessem uma olhada nele e ver se tem alguma redundância ou erro ou então o que vocês acrecentariam nele.

    Valeu galera, aguardarei seu comentarios.

    Segue abaixo o firewall.

    #!/bin/bash
    #Configuração do Firewall através do iptables

    # Declaração de Variavel
    LISTA="/etc/provedor/clientes"
    PROGRAMA="/etc/init.d/firewall"
    # portas liberadas
    PORTSLIB="/etc/provedor/portasliberadas"

    # Interfaces de Rede
    LAN=eth1
    WAN=eth0

    # Remove os arquivos
    rm -f /etc/shaper/*

    # Ativa modulos
    modprobe ip_tables
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_REJECT
    modprobe ipt_MASQUERADE
    modprobe ipt_state
    modprobe iptable_mangle
    modprobe ipt_limit
    modprobe ipt_mark
    modprobe ipt_MARK

    case "$1" in
    start)

    # mensagem de inicialização
    echo
    echo "| Script de Firewall - IPTABLES"
    echo "| Criado por: Thales Eduardo"
    echo "| Contribuindo por: Pesquisas no Google e"
    echo "| o viva o linux"
    echo "| Técnico em Informática"
    echo "| [email protected]"
    echo "| Uso: firewall start|stop|status|restart"
    echo
    echo "========================================================= |"
    echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS :|"
    echo "|: DO IPTABLES :|"
    echo "========================================================= |"

    # limpa as tabelas das regras, nada a ser mudado aqui
    iptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -t filter -F
    iptables -t filter -X
    iptables -t mangle -F
    iptables -t mangle -X

    # Determina a politica padrao - NEGA
    iptables -t filter -P FORWARD DROP
    iptables -t filter -P INPUT DROP
    iptables -t filter -P OUTPUT ACCEPT

    # Habilita roteamento
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "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 ACCEPT
    echo "ativado o fluxo interno entre os processos"
    echo "ON ...................................................... [ OK ]"

    # Abre Portas
    #iptables -A INPUT -p tcp --destination-port 2756 -j ACCEPT
    #iptables -A INPUT -p tcp --destination-port 53 -j ACCEPT
    #iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT
    #iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

    #liberar as portas principais do servidor
    for 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 ACCEPT
    done
    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 ACCEPT
    echo "ativado as portas abertas para estabelecer conexões"
    echo "ativado a liberação das portas principais do servidor"
    echo "ON ...................................................... [ OK ]"

    #Bloqueio ping da morte
    echo "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 DROP
    echo "ativado o bloqueio a tentativa de ataque do tipo ping da morte"
    echo "ON ...................................................... [ OK ]"

    #bloquear ataque do tipo SYN-FLOOD
    echo "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 DROP
    echo "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 2756 -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 DROP
    echo "ativado o bloqueio a tentativa de ataque do tipo SSH-BRUT-FORCE"
    echo "ON ...................................................... [ OK ]"

    #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 DROP
    echo "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,RST RST -m limit --limit 1/s -j ACCEPT
    echo "bloqueado scanners ocultos"
    echo "ON ...................................................... [ OK ]"


    # Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
    #iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    #iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
    #iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    #iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    #iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
    #iptables -A FORWARD -m unclean -j DROP

    # Marcacao de pacotes para controle de banda. Mude a faixa de IPs de acordo com a sua
    #for i in `seq 2 254`
    #do
    #iptables -t mangle -A POSTROUTING -s 192.168.0.$i -j MARK --set-mark $i
    #done

    # Iniciando regras de bloqueio e liberacao de clientes
    for CLIENTE in `cat $LISTA`; do
    CODIGO=`echo $CLIENTE | awk -F "|" '{print $1}'`
    NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
    IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
    CON=`echo $CLIENTE | awk -F "|" '{print $4}'`
    DOWN=`echo $CLIENTE | awk -F "|" '{print $5}'`"kbit"
    UP=`echo $CLIENTE | awk -F "|" '{print $6}'`"kbit"
    MAC=`echo $CLIENTE | awk -F "|" '{print $7}'`
    PRIO=`echo $CLIENTE | awk -F "|" '{print $8}'`
    STAT=`echo $CLIENTE | awk -F "|" '{print $9}'`
    MARK=`echo $IP | cut -d '.' -f4`

    # checa se esta ativado
    if [ "$STAT" = "A" ]; then
    UPLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_upload"
    DOWNLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_download"
    touch $UPLOAD
    touch $DOWNLOAD
    chown 755 /etc/shaper/*
    # eth1 corresponde a interface de rede conectada aos usuarios
    # mude se necessario
    echo "DEVICE=$LAN,100Mbit,10Mbit" >> $UPLOAD
    echo "RATE=$CON""Kbit" >> $UPLOAD
    echo "WEIGHT=$UP" >> $UPLOAD
    echo "PRIO=$PRIO" >> $UPLOAD
    echo "BOUNDED=yes" >> $UPLOAD
    echo "ISOLATED=yes" >> $UPLOAD
    echo "MARK=30" >> $UPLOAD

    echo "DEVICE=$LAN,100Mbit,10Mbit" >> $DOWNLOAD
    echo "RATE=$CON""Kbit" >> $DOWNLOAD
    echo "WEIGHT=$DOWN" >> $DOWNLOAD
    echo "PRIO=$PRIO" >> $DOWNLOAD
    echo "RULE=""$IP" >> $DOWNLOAD
    echo "BOUNDED=yes" >> $DOWNLOAD
    echo "ISOLATED=yes" >> $DOWNLOAD

    iptables -t filter -A FORWARD -d 0/0 -s $IP -m mac --mac-source $MAC -j ACCEPT
    iptables -t filter -A FORWARD -d $IP -s 0/0 -j ACCEPT
    iptables -t filter -A INPUT -s $IP -d 0/0 -m mac --mac-source $MAC -j ACCEPT
    iptables -t filter -A OUTPUT -s $IP -d 0/0 -j ACCEPT
    iptables -t mangle -A PREROUTING -s $IP -j MARK --set-mark $MARK

    #echo "iptables -t nat -A POSTROUTING -s $IP"" -j MASQUERADE" >> /etc/nat/users.sh
    #echo "iptables -A FORWARD -s $IP"" -j ACCEPT" >> /etc/nat/users.sh
    #echo "iptables -A FORWARD -d $IP"" -j ACCEPT" >> /etc/nat/users.sh
    #arp -s $IP $MAC

    # se não bloqueia
    else
    iptables -t filter -A FORWARD -d 0/0 -s $IP -m mac --mac-source $MAC -j DROP
    #iptables -t filter -A FORWARD -d $IP -s 0/0 -j DROP
    iptables -t filter -A INPUT -s $IP -d 0/0 -m mac --mac-source $MAC -j DROP
    iptables -t filter -A OUTPUT -s $IP -m mac --mac-source $MAC -j DROP
    fi
    done
    echo "Ativado a amarração do ip ao mac"
    echo "ON ...................................................... [ OK ]"

    # Habilita PROXY TRANSPARENTE
    iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
    echo "Proxy Transparente ativado"
    echo "ON ...................................................... [ OK ]"

    # ativar o mascaramento
    iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

    # entre redes
    #iptables -t filter -A FORWARD -d 192.168.0.0/32 192.168.0.0/32 -j DROP

    #Fecha o resto - NEGA
    iptables -A INPUT -j DROP
    iptables -A FORWARD -j DROP

    # carrega controlador de banda
    /etc/init.d/shaper start
    echo
    echo "========================================================= |"
    echo "::TERMINADA A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS::|"
    echo ":: DO IPTABLES :: |"
    echo "========================================================= |"
    echo "FIREWALL ATIVADO - SISTEMA PREPARADO"
    echo
    ;;

    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/shaper stop
    echo "FIREWALL DESCARREGADO - SISTEMA LIBERADO"
    ;;

    status)
    echo -n "Checando Status do FireWall: "
    iptables -L
    iptables -L -t nat
    ;;

    restart)
    $PROGRAMA stop
    $PROGRAMA start
    ;;

    *)
    echo "Use: $N {start|stop|status|restart}" >&2
    echo -e "{TEXTO}33[01;31mATENÇÃO"; tput sgr0
    echo "Você não colocou nenhum argumento ou algum conhecido, então Por Padrão será dado em 5 segundos um restart no firewall"
    sleep 5
    $PROGRAMA restart
    exit 1
    esac
    exit 0

    ## FIM DO ARQUIVO ##
    Última edição por thaleseduardo; 23-11-2007 às 18:15.