[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