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.

Greyson escreveu 107 artigos

Tecnólogo em Análise e desenvolvimento de sistemas, gosta muito de telecom, redes de computadores, jogos, entusiasta de tecnologias livres, mais precisamente do GNU/Linux.

4 comentários em “Como usar ramais SIP em um servidor asterisk por NAT

  1. Walter Robynson comentou:

    Amigo bom dia.
    O servidor com IPTABLES aqui é o mesmo com o ASTERISK?
    Se não, o passo 1 é feito em qual deles?
    O parâmetro localnet (passo 3) se refere à rede entre o firewall e o asterisk?
    Desde já, muito obrigado.

    1. Greyson comentou:

      Bom dia. O Iptables é o Gateway/firewall do seu Asterisk. o parâmetro é a rede entre o firewall e o asterisk sim. Lembrando que estamos falando de IPv4. Se for IPv6, é diferente.

    2. Greyson comentou:

      Bom dia. não, o iptables é um servidor com a finalidade de firewall, no caso. O procedimento deve ser realizado neste server. Sobre o parâmetro localnet, sim. É a mesma rede.

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>