[AsteriskBrasil] Firewall

Wagner wagner em sincronismotelecom.com
Sexta Agosto 2 16:38:18 BRT 2013


Olá lista,

Como sempre me preocupando com segurança, fiz um Firewall seguindo o que 
encontrei na net inclusive as dicas do pessoal da lista mas é minha 
primeiro experiência com o iptables. Em dois ambientes que coloquei tem 
se comportado bem mas eu gostaria da opinião dos senhores.

Basicamente é para bloquear qualquer ip fora do brasil:

#!/bin/bash
#------------------------------------------------------------------------------------------
#Firewall para boquear IP's fora do Brasil
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------VARIAVEIS

#Range de IP's gerenciados pelo Registro.br
RANGE="177.0.0.0/11 186.192.0.0/10 187.0.0.0/9 189.0.0.0/9 200.128.0.0/9 
201.0.0.0/10 201.64.0.0/11 177.81.0.0/11"

#>ACESSO E RAMAIS EXTERNOS<
#IP's das interfaces de redes do servidor, varios IP's devem ser 
declaradas com espaco
SERVIDOREXT="XXX.XXX.XXX.XXX"

#>ACESSO E RAMAIS INTERNOS<
#IP's das interfaces de redes do servidor, varios IP's devem ser 
declaradas com espaco
SERVIDOR="XXX.XXX.XXX.XXX"

#>REDES<
#Range de redes que os ramais utilizaram para se conectar no asterisk, 
varias redes devem ser declaradas com espaco
REDES="192.168.0.0/24"
#------------------------------------------------------------------------------------------


POLITICAS()
{
#------------------------------------------------------------------------------------------ 
BLOQUEAR TUDO
     echo "Aplicando politicas default"
     iptables -P INPUT     DROP
     iptables -P OUTPUT     DROP
     iptables -P FORWARD DROP
#------------------------------------------------------------------------------------------
}

LIMPA()
{
#------------------------------------------------------------------------------------------ 
APAGAR TODAS AS REGRAS
     echo "Removendo politicas default"
     iptables -F
     iptables -P INPUT     ACCEPT
     iptables -P OUTPUT     ACCEPT
     iptables -P FORWARD ACCEPT
#------------------------------------------------------------------------------------------
}

STATEFUL()
{
#------------------------------------------------------------------------------------------ 
MANTER CONEXOES JA ATIVAS
     echo "Estabilizando as conexoes de entrada"
     iptables -A INPUT    -p tcp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
     iptables -A INPUT    -p udp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
     iptables -A OUTPUT   -p tcp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
     iptables -A OUTPUT   -p udp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
     iptables -A FORWARD  -p tcp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
     iptables -A FORWARD  -p udp -m state --state ESTABLISHED,RELATED -j 
ACCEPT
#------------------------------------------------------------------------------------------
}

#Regras de liberacao
FIREWALL()
{
#------------------------------------------------------------------------------------------ 
LIBERAR LOOPBACK E BLOQUEAR PACOTES DESCONHECIDOS
echo "Aplicando regras para o host"
iptables -A INPUT    -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT     -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT   -p tcp -m state --state INVALID -j DROP
iptables -A INPUT   -p udp -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp -m state --state INVALID -j DROP
iptables -A FORWARD -p udp -m state --state INVALID -j DROP
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------ 
LIBERANDO A SAIDA DE PACOTES DO SERVIDOR PARA QUALQUER LUGAR
for i in $SERVIDOREXT ; do
echo "Liberando a saida de pacotes de $i para qualquer lugar <"
     iptables -I OUTPUT -p  udp -m state --state NEW -s $SERVIDOREXT -d 
0/0 -j ACCEPT
     iptables -I OUTPUT -p  tcp -m state --state NEW -s $SERVIDOREXT -d 
0/0 -j ACCEPT
done

for i in $SERVIDOR ; do
echo "Liberando a saida de pacotes de $i para qualquer lugar <"
     iptables -I OUTPUT -p  udp -m state --state NEW -s $SERVIDOR -d 0/0 
-j ACCEPT
     iptables -I OUTPUT -p  tcp -m state --state NEW -s $SERVIDOR -d 0/0 
-j ACCEPT
done
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------ 
REGRAS PARA PING E ACESSO EXTERNO
for i in $SERVIDOREXT ; do

     echo "Permitindo ICMPS: $i <"
     iptables -I OUTPUT -p icmp --icmp-type 8 -s $i -j ACCEPT
     iptables -I INPUT  -p icmp --icmp-type 8 -s 0/0 -j ACCEPT
     iptables -I OUTPUT -p icmp --icmp-type 0 -s $i -j ACCEPT
     iptables -I INPUT  -p icmp --icmp-type 0 -s 0/0 -j ACCEPT

     echo "Permitindo acesso SSH: $i <"
     iptables -I INPUT    -p tcp -m state --state NEW -s 0/0 -d $i 
--dport 16380 -j ACCEPT




done
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------ 
REGRAS PARA PING E ACESSO INTERNO
for i in $SERVIDOR ; do
     echo "Permitindo ICMPS: $i <"
     iptables -I OUTPUT -p icmp --icmp-type 8 -s $i -j ACCEPT
     iptables -I INPUT  -p icmp --icmp-type 8 -s 0/0 -j ACCEPT
     iptables -I OUTPUT -p icmp --icmp-type 0 -s $i -j ACCEPT
     iptables -I INPUT  -p icmp --icmp-type 0 -s 0/0 -j ACCEPT

     echo "Permitindo acesso SSH: $i <"
     iptables -I INPUT    -p tcp -m state --state NEW -s 0/0 -d $i 
--dport 225 -j ACCEPT
done
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------ 
LIBERANDO IP's BRASILEIROS
echo "Aplicando regras para liberacao apenas do range brasileiro de IP's"
for i in $RANGE ; do
     for d in $SERVIDOREXT ; do


         echo "-- Liberando range: $i no ip $d <"
         #RTP
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
10000:20000  -d $d -j ACCEPT
         #SIP
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5060:5061 -d $d -j ACCEPT
         iptables  -A INPUT -p tcp -m state --state NEW -s $i --dport 
5060:5061 -d $d -j ACCEPT
         #IAX
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
4569 -d $d -j ACCEPT
         #IAX2
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5036 -d $d -j ACCEPT
         #RTP PADRAO GRANDSTREAM
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5004  -d $d -j ACCEPT

     done
done
#------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------ 
LIBERANDO REDES INTERNAS DO CLIENTE
echo "Aplicando regras para liberacao de redes internas"
for i in $REDES ; do
     for d in $SERVIDOR ; do

         echo "-- Liberando range: $i no ip $d <"
          #RTP
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
10000:20000  -d $d -j ACCEPT
         #SIP
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5060:5061 -d $d -j ACCEPT
         iptables  -A INPUT -p tcp -m state --state NEW -s $i --dport 
5060:5061 -d $d -j ACCEPT
         #IAX
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
4569 -d $d -j ACCEPT
         #IAX2
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5036 -d $d -j ACCEPT
         #RTP PADRAO GRANDSTREAM
         iptables  -A INPUT -p udp -m state --state NEW -s $i --dport 
5004  -d $d -j ACCEPT

     done
done
#------------------------------------------------------------------------------------------
}

case $1 in
     start)
         POLITICAS
         STATEFUL
         FIREWALL
         ;;
     stop)
         LIMPA
         ;;
     restart)
         $0 stop
         $0 start
         ;;
     status)
         iptables -nL ;;
     *)
         echo "Usage: start, stop, restart, status"
         ;;
esac

-- 
Wagner Mazuchi de Lima Junior
11 3323-5550
wagner em sincronismotelecom.com
www.sincronismo.com.br
Rua Tácito de Almeida, nº 196
01251-010 - Pacaembu - São Paulo - SP



Mais detalhes sobre a lista de discussão AsteriskBrasil