Eu tenho um PBX (servidor VOIP) onde os telefones se conectam para fazer chamadas. O PABX que estou usando éAsterisco. Esse servidor não está sendo utilizado e seu único objetivo é analisar ataques.
O serviço PBX não é importante se eu tiver um serviço diferente, como o mongodb. Tenho certeza de que os bots na Internet procurarão vulnerabilidades para atacar esse banco de dados.
De qualquer forma estou analisando todos os pacotes que chegam ao meu servidor na porta UDP 5060 (é onde o asterisco escuta) e os pacotes que chegam ficam assim:
IP (tos 0x0, ttl 113, id 654, offset 0, flags [none], proto UDP (17), length 521)
43.249.129.89.58255 > 171.21.78.225.5060: SIP, length: 493
REGISTER sip:54.84.215.2:5060 SIP/2.0
To: <sip:[email protected]>
From: <sip:[email protected]>;tag=824e5f4a7221279e4f7a
Via: SIP/2.0/UDP 10.4.1.117:58255;branch=z9hG4bK183d5a24-59ec-4f05-8325-747389112824;rport
Call-ID: e5f4a722128024e4f7a824
CSeq: 1 REGISTER
Contact: <sip:[email protected]:58255>
Expires: 3600
Max-Forwards: 70
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: PolycomSoundPointIP SPIP_550 UA 3.3.2.0413
Content-Length: 0
Esse pacote é de um bot porque NÃO estou enviando nenhum pacote para o meu servidor.
Observe que o único propósito desse servidor é entender como os bots funcionam e ver como eles atacam meu servidor. Não estou usando esse PBX; portanto, qualquer solicitação que chegue a esse servidor deve vir de um bot malicioso. Cada vez que recebo um pacote UDP enviado para a porta 5060, bloqueio esse endereço IP.
Agora minha pergunta é:
Estou executando esse servidor há um mês e a cada minuto ainda recebo ataques. Bloqueei mais de 15.000 IPs! Quantos bots existem na internet? Eles estão mudando seu endereço IP de origem e é por isso que continuam acessando meu servidor? Se eles conseguirem alterar o IP de origem, é porque estou usando o protocolo UDP? Devo usar TCP em vez de UDP para resolver isso?
Também é engraçado como os ataques de IPs diferentes são tão semelhantes. Por exemplo, eles usam o mesmo agente de usuário do telefone e o ataque vem de IPs diferentes. É como se todos os bots tivessem o mesmo código.
Depois de resolver esse problema e entender como os bots funcionam, gostaria de implementar essa solução em meu servidor real. Não estou usando o servidor real para isso porque será difícil filtrar os pacotes bons dos pacotes ruins. Uma solução seria usar uma lista branca de ips no meu firewall, mas não quero que meus usuários tenham que fazer alguma forma extra de autenticação, principalmente se usarem o serviço do celular, onde seu endereço IP pode mudar muito.
Responder1
Agora entendo por que as pessoas tentam manter o maior número possível de portos fechados. No meu caso, eu queria abrir as portas e bloquear os invasores. Descobri que é uma luta sem fim.
O que fiz para resolver o problema foi entender como funciona o iptables. Minhas regras são assim:
~# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0 match-set MyBlackList src
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set MyWhiteList src
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5060
DROP udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 1:65535
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 1:65535
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Com essas regras, inicialmente só permito conexões com a porta 5060 via TCP.
Se um telefone tentar se conectar incorretamente a essa porta, o IP será adicionado ao MyBlackList. Se for esse o caso, o invasor não poderá fazer mais solicitações.
Se um telefone se conectar corretamente, ele será adicionado ao MyWhiteList. Se for esse o caso, poderá acessar outras portas e fazer ligações. Se no futuro fizer muitas solicitações inválidas, ainda poderá ser adicionado ao MyBlackList.
Depois de usar essa abordagem, raramente recebo ataques. Agora só tenho 10 ips bloqueados em vez de milhares.