Como usar ramais SIP em um servidor asterisk por NAT

asterisk

Quando queremos proteger um servidor asterisk por trás de um firewall é necessário (pelo menos em IPv4) o uso de NAT para conseguirmos acesso ao mesmo. Vou tentar explicar de uma maneira simples os procedimentos necessários para a configuração.

1 – Subindo os módulos necessários (como root):

# modprobe iptable_nat
# modprobe ip_nat_sip
# modprobe ip_conntrack_sip

Se você quiser pode acrescentar no seu script de firewall ou então:

# echo "iptable_nat" >> /etc/modules 
# echo "ip_nat_sip" >> /etc/modules
# echo "ip_conntrack_sip" >> /etc/modules

2 – Configurando o firewall:

Estamos partindo do suposto que você deve ser um admin precupado com a segurança e utiliza a política padrão da Chain FORWARD como DROP

Sendo assim temos:

Porta 2727: MGCP
Porta 4569: IAX2
Porta 5036: IAX1
Portas 5004 a 5082: SIP
Portas 10000 a 20000: RTP (aqui está o segredo para quem tentou fazer nat. A ramal registrou, faz a ligação mas quando atende, fica mudo. Quem ler sobre este protocolo entenderá o porquê)

Vamos ao que interessa então, acrescente ao seu script de firewall o seguinte (na variável que aponta para o servidor asterisk, substitua o valor para o IP correto pra você):

# Habilitando forward
echo 1 > /proc/sys/net/ipv4/ip_forward
PORTAS_ASTERISK="2727,4569,5036"
SERVIDOR_ASTERISK="192.168.0.50"
# Forwarding de portas (entrada e saída)
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 # Encaminhamento de portas para o servidor asterisk
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

3 – Preparando o servidor asterisk para suporte a NAT.

edite o arquivo sip.conf no seu servidor:

# nano -w /etc/asterisk/sip.conf

No final do arquivo, acresente o seguinte:

nat=yes
externip=seu ip público
localnet=sua rede local/máscara de sub-rede
bindport=5060

save e feche o arquivo. Agora reinicie o serviço

# /etc/init.d/asterisk restart

Pronto! o ambiente está preparado para receber os ramais SIP via NAT. Dúvidas, críticas construtivas e sugestões sempre são bem-vindas. Espero ter ajudado.