sexta-feira, 14 de março de 2014

Firewall para segurança de PABX Asterisk



Ataque a servidores é um coisa rotineira, e para isto, temos sempre que monitorar e manter as políticas de segurança conforme cada serviço que roda em nossos servidores. Sempre se atualizando. Nos servidores voip, Asterisk, não é diferente. Quanto mais segurança melhor, porém, abaixo segue dicas básicas que são essenciais para você manter o seu sistema seguro.
Se o seu servidor Asterisk não precise ser acesso pela Internet, bloqueio este acesso;
Use VPN ou TLS para acesso se possível, não permitindo assim, acesso direto às portas SIP;
Utilize senhas fortes, de no mínimo 8 caracteres, com maíusculas, minúsculas e sempre que possível, com mais de um caracter especial;
Jamais utilize a senha de ramal, igual ao número do ramal;
Use ferramentas de controle de tentativas de acesso, como por exemplo o Fail2Ban (clique aqui para ver o artigo sobre);
Dê acesso à ligações DDI somente para os usuários que precisam. Se você não utiliza este tipo de ligação, tente bloquear diretamente com a sua operadora;
Limite o número de chamadas simultâneas de cada usuário. Nenhum usuário precisa mais do que 2 chamadas simultâneas caso utiliza conferência ou a transferência assistida.
Limite o tempo total das chamadas. Isto pode ser feito com o parâmetro S no comando Dial do Asterisk. Uma ligação, principalmente corporativa, de mais de duas horas de duração é suspeita.
Monitore o número de canais simultâneos. Para isto, é interessante você criar uma estatística de cada horário e dia da semana, para saber se a quantidade de canais simultâneos está dentro do padrão.
Monitore frequentemente o seu CDR e seus arquivos de extensions, para verificar se não foi inserido nenhum comando noCDR. Para fazer esta varredura mais fácil, utilize o comando do Linux (cat): cat nomedoarquivo | grep noCDR
Estas são apenas algumas das inúmeras medidas que podem ser tomadas. em breve publicarei novas formas de prevenção.

#!/bin/bash

WAN="eth0"

PORTAS_ASTERISK="2727,4569,5036" 
SERVIDOR_ASTERISK="192.168.200.18" 
REDE_LOCAL="192.168.200.0/24"
REDE_EXTERNA="192.168.70.0/24"
ACESSO_REMOTO="200.228.73.100"

echo "Limpando Tabelas...[EXECUTANDO]"

iptables -F
iptables -F INPUT
echo "Tabelas INPUT............[ OK ]"
iptables -F OUTPUT
echo "Tabelas OUTPUT...........[ OK ]"
iptables -F FORWARD
echo "Tabelas FORWARD..........[ OK ]"
iptables -t mangle -F
echo "Tabelas MANGLE...........[ OK ]"
iptables -t nat -F
echo "Tabelas NAT..............[ OK ]"
echo "Limpando Tabelas...[FINALIZADO]"

# carrega modulos

/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_sip
/sbin/modprobe ip_conntrack_sip
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_MASQUERADE
echo "Carregando Modulos do Firewall.........................................[ OK ]"

# Habilitando forward

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward 
echo "Habilitando Forward....................................................[ OK ]"

# Bloqueia ataque do tipo SYN-FLOOD

iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo "Bloqueia ataque do tipo SYN-FLOOD......................................[ OK ]"

# Bloqueia tracertroute

iptables -A INPUT -p udp --dport 33435:33525 -j DROP
iptables -A FORWARD -p icmp --icmp-type 11 -j DROP
echo "Bloqueia tracertroute..................................................[ OK ]"

# Bloqueia 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 "Bloqueia ping da morte................................................[ OK ]"

# Protege contra IP spoofing:

echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo "Protege contra IP spoofing:...........................................[ OK ]"

# Descarta pacotes malformados, protegendo contra ataques diversos:

iptables -A INPUT -m state --state INVALID -j DROP
echo "Descarta pacotes malformados, protegendo contra ataques diversos......[ OK ]"

echo "Carregando Tabela INPUT...............................................[ OK ]"

echo "Carregando Tabela FORWARD.............................................[ OK ]"
echo "Carregando Tabela OUTPUT..............................................[ OK ]"

# Define a política DEFAULT das TABELAS

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
echo "Define a política DEFAULT das TABELAS.................................[ OK ]"

# Libera a Interface LOOPBACK-127.0.0.1

iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -d 127.0.0.1 -j ACCEPT
echo "Libera a Interface LOOPBACK-127.0.0.1.................................[ OK ]"

# Libera conexão na porta 22 - ssh. 

iptables -A INPUT -p tcp -i $WAN --dport 22 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp -i --dport 22 -m state --state NEW -j ACCEPT
echo "Acesso porta SSH.......................................................[ OK ]"

# Libera Acesso SSH Servidor Remoto

#iptables -t nat -A PREROUTING -i $WAN -s $ACESSO_REMOTO -p tcp --dport 23 -j DNAT --to-destination 192.168.200.18:22
#iptables -A FORWARD -p tcp -i $WAN --dport 23 -d 192.168.200.18 -j ACCEPT
#iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE  
echo "Acesso SSH Servidor Remoto.............................................[ OK ]"

# Libera as Portas TCP E UDP na Rede Interna do Asterisk

iptables -I INPUT -p tcp -s $REDE_EXTERNA -j ACCEPT
iptables -I INPUT -p udp -s $REDE_EXTERNA -j ACCEPT 
iptables -I INPUT -p tcp -s $REDE_LOCAL -j ACCEPT
iptables -I INPUT -p udp -s $REDE_LOCAL -j ACCEPT 
echo "Libera as Portas TCP E UDP na Rede Interna/ Externa do Asterisk.......[ OK ]"

iptables -A FORWARD -p udp -m multiport --sport $PORTAS_ASTERISK -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 

iptables -A FORWARD -p udp -m multiport --dport $PORTAS_ASTERISK -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -p udp --sport 5004:5082 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -p udp --dport 5004:5082 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -p udp --sport 10000:20000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -p udp --sport 10000:20000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "Forwarding de portas (entrada e saída).................................[ OK ]"

iptables -t nat -A POSTROUTING -p udp --dport 5004:5082 -d $SERVIDOR_ASTERISK -j MASQUERADE 

iptables -t nat -A PREROUTING  -p udp -i $WAN --dport 5004:5082 -j DNAT --to $SERVIDOR_ASTERISK 
iptables -t nat -A POSTROUTING -p udp --dport 10000:20000 -d $SERVIDOR_ASTERISK -j MASQUERADE 
iptables -t nat -A PREROUTING  -p udp -i $WAN --dport 10000:20000 -j DNAT --to $SERVIDOR_ASTERISK 
iptables -t nat -A POSTROUTING -p udp --dport 5036 -d $SERVIDOR_ASTERISK -j MASQUERADE 
iptables -t nat -A PREROUTING  -p udp -i $WAN --dport 5036 -j DNAT --to $SERVIDOR_ASTERISK 
iptables -t nat -A POSTROUTING -p udp --dport 2727 -d $SERVIDOR_ASTERISK -j MASQUERADE 
iptables -t nat -A PREROUTING  -p udp -i $WAN --dport 2727 -j DNAT --to $SERVIDOR_ASTERISK 
iptables -t nat -A POSTROUTING -p udp --dport 4569 -d $SERVIDOR_ASTERISK -j MASQUERADE 
iptables -t nat -A PREROUTING  -p udp -i $WAN --dport 4569 -j DNAT --to $SERVIDOR_ASTERISK
echo "Encaminhamento de portas para o servidor asterisk......................[ OK ]"

# Drop fragmented packets

iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "User-Agent: VaxSIPUserAgent" --algo bm --to 65535 -j DROP 
iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "User-Agent: friendly-scanner" --algo bm --to 65535 -j REJECT --reject-with icmp-port-unreachable 
iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "REGISTER sip:" --algo bm -m recent --set --name VOIP --rsource 
iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "REGISTER sip:" --algo bm -m recent --update --seconds 60 --hitcount 12 --rttl --name VOIP --rsource -j DROP 
iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "INVITE sip:" --algo bm -m recent --set --name VOIPINV --rsource 
iptables -I INPUT -p udp -m udp --dport 5060 -m string --string "INVITE sip:" --algo bm -m recent --update --seconds 60 --hitcount 12 --rttl --name VOIPINV --rsource -j DROP 
iptables -I INPUT -p udp -m hashlimit --hashlimit 6/sec --hashlimit-mode srcip,dstport --hashlimit-name tunnel_limit -m udp --dport 5060 -j ACCEPT 
iptables -I INPUT -p udp -m udp --dport 5060 -j DROP 
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p tcp -j DROP

iptables -t mangle -A PREROUTING -p tcp --dport 5060 -j TOS --set-tos 16

iptables -t mangle -A PREROUTING -p udp --dport 1000:20000 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -p udp --dport 80 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $WAN -p tcp --dport 5060 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o $WAN -p udp --dport 10000:20000 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $WAN -p tcp --dport 80 -j TOS --set-tos 8
iptables -t mangle -A OUTPUT -o $WAN -p udp --dport 80 -j TOS --set-tos 8
echo "Prioriza pacotes da rede...............................................[ OK ]"

# Bloqueia todas as Portas TCP e UDP vindas da WAN

iptables -A INPUT -p tcp -i $WAN -j DROP
iptables -A INPUT -p udp -i $WAN -j DROP
echo "Bloqueia todas as Portas TCP e UDP vindas da WAN.......................[ OK ]"

# Libera Conexao para pacotes ja estabelecidos

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Libera Conexao para pacotes ja estabelecidos...........................[ OK ]"

# Libera resposta de consulta ao DNS

iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
echo "Libera resposta de consulta ao DNS.....................................[ OK ]"

# Faz o redirecionamento das Portas para os ATAS

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Faz o redirecionamento das Portas para os ATAS.........................[ OK ]"

# Libera Portas para o IP da ACESSO REMOTO 

iptables -I INPUT -i $WAN -s $ACESSO_REMOTO -p ALL -j ACCEPT
echo "Libera Portas para o IP da ACESSO REMOTO...............................[ OK ]"
echo " "
echo "Firewall habilitado........................[ << ATENÇÂO >> FIREWALL ATIVADO ]"

Nenhum comentário:

Postar um comentário