전화를 걸기 위해 전화를 연결하는 PBX(VOIP 서버)가 있습니다. 내가 사용하는 pbx는별표. 해당 서버는 사용되지 않으며 유일한 목적은 공격을 분석하는 것입니다.
mongodb와 같은 다른 서비스가 있다면 PBX 서비스는 중요하지 않습니다. 인터넷의 봇이 해당 데이터베이스를 공격하기 위해 취약점을 검색할 것이라고 확신합니다.
어쨌든 나는 UDP 포트 5060(별표가 수신하는 곳)에서 내 서버에 도착하는 모든 패킷을 분석하고 있으며 도착하는 패킷은 다음과 같습니다.
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
내 서버에 패킷을 보내지 않기 때문에 해당 패킷은 봇에서 온 것입니다.
해당 서버의 유일한 목적은 봇의 작동 방식을 이해하고 봇이 내 서버를 공격하는 방식을 확인하는 것입니다. 저는 해당 PBX를 사용하고 있지 않습니다. 따라서 해당 서버로 들어오는 모든 요청은 악성 봇에서 나와야 합니다. 포트 5060으로 UDP 패킷이 전송될 때마다 해당 IP 주소를 차단합니다.
이제 내 질문은 다음과 같습니다.
나는 한 달 동안 그 서버를 운영해 왔고 매 분마다 여전히 공격을 받고 있습니다. 15,000개 이상의 IP를 차단했습니다! 인터넷에는 얼마나 많은 봇이 있나요? 그들은 소스 IP 주소를 변경하고 있으며 이것이 그들이 내 서버에 계속 접속하는 이유입니까? 소스 IP를 변경할 수 있다면 제가 UDP 프로토콜을 사용하고 있기 때문인가요? 이 문제를 해결하려면 UDP 대신 TCP를 사용해야 합니까?
또한 다른 IP의 공격이 매우 유사하다는 점도 재밌습니다. 예를 들어 그들은 전화와 동일한 사용자 에이전트를 사용하고 공격은 다른 IP에서 발생합니다. 이는 모든 봇이 동일한 코드를 갖고 있는 것과 같습니다.
이 문제를 해결하고 봇의 작동 방식을 이해하고 나면 해당 솔루션을 실제 서버에 구현하고 싶습니다. 나쁜 패킷에서 좋은 패킷을 필터링하는 것은 어렵기 때문에 실제 서버를 사용하지 않습니다. 해결책은 내 방화벽에서 화이트 IP 목록을 사용하는 것이지만, IP 주소가 많이 변경될 수 있는 휴대폰에서 서비스를 사용하는 경우 사용자가 특별히 추가 인증 형식을 수행할 필요가 없도록 하고 싶습니다.
답변1
이제 사람들이 왜 가능한 한 많은 포트를 닫아 두려고 하는지 이해합니다. 내 경우에는 포트를 열어 공격자를 차단하고 싶었습니다. 끝없는 싸움이라는 것을 깨달았습니다.
문제를 해결하기 위해 제가 한 일은 iptable이 어떻게 작동하는지 이해하는 것이었습니다. 내 규칙은 다음과 같습니다.
~# 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
이 규칙을 사용하면 처음에는 TCP를 통해서만 포트 5060에 대한 연결만 허용됩니다.
전화기가 해당 포트에 잘못 연결을 시도하면 해당 IP가 MyBlackList에 추가됩니다. 이 경우 공격자는 추가 요청을 할 수 없습니다.
전화가 올바르게 연결되면 MyWhiteList에 추가됩니다. 이 경우 다른 포트에 액세스하여 전화를 걸 수 있습니다. 나중에 잘못된 요청이 많이 발생하더라도 MyBlackList에 계속 추가될 수 있습니다.
이 접근 방식을 사용한 후에는 거의 공격을 받지 않습니다. 이제는 수천 개가 아닌 10개의 IP만 차단되었습니다.