Deixe-me começar dizendo que sou um noob, e o que eu descobri até agora foi apenas tropeçar em mim. Já pesquisei por aí e a solução já pode estar disponível, mas provavelmente foi tudo muito mais que isso, por isso inclua o máximo de detalhes possível na sua solução.
Eu tenho um servidor Ubuntu 10.04 executando o Asterisk para um sistema telefônico automatizado. Seu único objetivo é receber chamadas e nunca se conecta a uma pessoa. É um sistema de licenciamento por telefone, então eles inserem as informações sobre seus produtos e nós emitimos um código de desbloqueio para eles digitarem no programa. Quando uma chamada é recebida, ela executa um script Perl com AGI, o script é uma série de prompts seguidos pela saída do código de desbloqueio.
Tudo isso está funcionando muito bem. No entanto, pareceu parar de trabalhar de vez em quando. Eu olhei para os logs do Asterisk e encontrei uma tonelada de entradas como esta:
[May 22 10:51:27] NOTICE[10663] chan_sip.c: Registration from '"guest12345"<sip:[email protected]>' failed for 'yy.yy.yy.yy' - No matching peer found
Estas são obviamente tentativas de invasão. xx.xx.xx.xx é o endereço IP do meu servidor e yy.yy.yy.yy é presumivelmente o endereço IP do intruso.
Eu pesquisei um pouco no Google e encontrei uma solução configurando o Fail2Ban, que parece estar funcionando. Esta manhã, proibiu dois endereços IP até agora depois de 5 tentativas de invasão sem sucesso.
Tenho certeza de que ninguém conseguirá entrar em apenas cinco tentativas, mas isso ainda parece menos seguro do que eu gostaria.
Meu entendimento é que o serviço Asterisk em execução no meu servidor sai e se registra com o meu provedor de VoIP de vez em quando para informar que ainda está conectado e pronto para receber chamadas. Tanto quanto eu sei, esse é o único "registro" necessário, então há uma maneira de eu bloquear todas as tentativas de registro fora?
Talvez eu esteja errado sobre isso, mas parece que eles estão tentando se registrar no meu servidor como se meu servidor fosse o provedor de VoIP. Talvez seja assim que você consegue um telefone de verdade para se conectar ao servidor do Asterisk? Como não há telefones reais envolvidos (somente chamadas recebidas, nunca transferidas para uma pessoa), existe uma maneira de desativar completamente essa parte?
EDITAR:
De sip.conf:
registerattempts=0 ; Number of registration attempts before we give up
; 0 = continue forever, hammering the other server
; until it accepts the registration
; Default is 0 tries, continue forever
register => 1111111:password:[email protected]:5060/700
[inphonex]
type=peer
username=1111111
fromuser=1111111
secret=password ; password used to login their website (same as in register =>)
host=sip.inphonex.com
fromdomain=sip.inphonex.com
nat=yes ; my asterisk is behind nat
canreinvite=yes
qualify=yes
context=inbound-inphonex; context to be used in extensions.conf for inbound calls from inphonex
disallow=all
allow=ulaw
allow=alaw
allow=gsm
insecure=port,invite