Fórum Ubuntu Linux - PT

Suporte Técnico => Internet, Redes e Segurança => Tópico iniciado por: arsaraiva em 20 de Agosto de 2016, 16:32

Título: SIP x IPTables
Enviado por: arsaraiva em 20 de Agosto de 2016, 16:32
Boa tarde amigos, estou enfrentando um problema entre o VOIP (SIP) e o IPTables.
O que está acontecendo é que quando executo a aplicação cliente VOIP (já testei o Twinkle e o Zoiper), ele consegue registrar ao serviço e quando mando chamar algum número, ele chega a chamar e fica chamando (por um tempo), mesmo que este número atenda. Ao mesmo tempo que ele inicia a chamada ele derruba a rede de tal forma que só reiniciando o roteador. Sei que é referente ao firewall pois quando liberei o INPUT, OUTPUT no IPTables (iptables -P INPUT ACCEPT) ele chegou a funcionar, porém cai na besteira de dar o comando iptables -F e -X, perdi todas as configurações e a aplicação voltou com o mesmo problema, só que agora, mesmo eu fazendo o INPUT e OUTPUT ACCEPT não funciona.

Atualmente meu iptables está assim:

#!/bin/bash
####################
# limpando tabelas #
####################
iptables -F &&
iptables -X &&
iptables -Z &&
iptables -F INPUT &&
iptables -F OUTPUT &&
iptables -F FORWARD &&
iptables -F POSTROUTING -t nat &&
iptables -F PREROUTING -t nat &&
iptables -t nat -F &&
iptables -t nat -X &&
iptables -F -t nat &&

######################
# Inicializa Modulos #
######################
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ip_tables
modprobe iptable_filter
modprobe nf_conntrack_ipv4
modprobe nf_nat_pptp
modprobe nf_conntrack_pptp
modprobe ip_gre
modprobe ppdev
modprobe ppp_generic
modprobe pppoatm
modprobe ppp_async
modprobe ppp_deflate

####################################
# liberando acesso interno da rede #
####################################
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT &&
iptables -A OUTPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT &&
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT &&
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT

########################################
# compartilhando a web na rede interna #
########################################
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o wlp2s0 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&


#############
# Seguranca #
#############
# Protecao contra port scanners ocultos
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#Protecoes contra ataques
iptables -A INPUT -m state --state INVALID -j DROP

# PROTEGE CONTRA SYNFLOOD.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# PROTEGE CONTRA ICMP BROADCASTING.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# BLOQUEIA TRACEROUTE.
iptables -A INPUT -p udp --dport 33435:33525 -j DROP

# FECHA TODAS AS PORTAS TABELA INPUT PARA REDE EXTERNA, EXETO AS LIBERADAS ACIMA.
iptables -A INPUT -p tcp --syn -j DROP

# Protecao Contra IP Spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# Ativando protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Permite o redirecionamento seguro dos pacotes
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# Protege contra ping da morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Protege contra os ataques do tipo "Syn-flood, DoS, etc"
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

# Logar os pacotes mortos por inatividade
iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG

# Protege contra pacotes que podem procurar e obter informacoes da rede interna
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

##############
# Regras TCP #
##############
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 3390 -j ACCEPT
iptables -A INPUT -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 81 -j ACCEPT
iptables -A INPUT -p tcp --dport 1022 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
iptables -A INPUT -p tcp --dport 1746 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 47 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp --dport 5440 -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
iptables -A INPUT -p tcp --dport 1684 -j ACCEPT
iptables -A INPUT -p tcp --dport 1624 -j ACCEPT
iptables -A INPUT -p tcp --dport 85 -j ACCEPT
iptables -A INPUT -p tcp --dport 119 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060:5070 -j ACCEPT



##############
# Regras UDP #
##############
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p udp --dport 138 -j ACCEPT
iptables -A INPUT -p udp --dport 139 -j ACCEPT
iptables -A INPUT -p udp --dport 30606 -j ACCEPT
iptables -A INPUT -p udp --dport 3299 -j ACCEPT
iptables -A INPUT -p udp --dport 9868 -j ACCEPT
iptables -A INPUT -p udp --dport 5060:5070 -j ACCEPT
iptables -A INPUT -p udp --dport 8766:35000 -j ACCEPT
iptables -A INPUT -p udp --dport 995 -j ACCEPT
iptables -A INPUT -p udp --dport 993 -j ACCEPT


Estas regras eu fiz manualmente e não consigui visualizar o erro.
Fico muito grato se alguém puder ajudar.
Título: Re:SIP x IPTables
Enviado por: zekkerj em 20 de Agosto de 2016, 19:03
Olá arsaraiva,

Primeira coisa a ter em mente: no iptables, a ordem das regras é tudo. Uma vez que um pacote é aceito ou "dropado", não tem mais como mudar de ideia.

Dito isso, começo chamando a sua atenção que sua regra de DROP na cadeia INPUT está lá em cima, no script, e tem um monte de regras depois dela. Isso significa que todas as tentativas de conexão no seu computador estão sendo indevidamente bloqueadas. É essencial que essa regra fique depois das regras de liberação de TCP que vc tem mais adiante. Certo?

------------------

Agora vamos considerar o teu problema original. Eu não entendi direito se a aplicação SIP está funcionando no teu computador, ou nas máquinas de sua rede. Se fica na própria máquina, OK, estamos no caminho certo, mas se fica na sua rede, e essa máquina é teu firewall, ooooops, vc está trabalhando na cadeia errada: tem que trabalhar as liberações na cadeia FORWARD.

Outra coisa que estou vendo é que vc carregou um caminhão de módulos, mas não carregou exatamente aquele que vc precisa (nf_conntrack_sip).

Por fim, o protocolo SIP tem a característica de que, uma vez que a conexão SIP de controle está aberta, as ligações passam a chegar em conexões reversas em portas altas aleatórias (na faixa de portas dinâmicas). Então se vc não quer ter que abrir toda a faixa de portas dinâmicas (má ideia), tem que ter uma regra de liberação de tráfego relacionado, parecida com esta:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Essa regra tem que vir antes da regra de bloqueio (duh), e fica mais fácil de compreender se vc colocar logo no início do script.

-------------------

Pra fechar, por enquanto, uma dica: não confie no endereço IP do pacote pra fazer liberação de tráfego, pois nada impede que um tráfego de internet venha com IP de origem falsificado como rede privada, e bater com o endereço de sua rede. Então aquelas regras "-p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT" e  -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT" não estão te dando segurança; prefira sempre fazer a liberação do tráfego pela interface de entrada, que não pode ser forjada:

iptables -A INPUT -i enp2s0 -p tcp --syn -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
<-- observe que o tráfego que entra pela loopback vem da sua própria máquina, então se vc admite que sua máquina é segura, todo o tráfego que ela gera, principalmente o que ela envia pra si mesma, é seguro também. Adicionar essa regra costuma melhorar muito o desempenho da máquina com o firewall ativo.