내 서버를 검색하는 봇이 소스 IP를 변경할 수 있나요? IP를 차단했는데도 계속 공격을 받는 이유는 무엇인가요?

내 서버를 검색하는 봇이 소스 IP를 변경할 수 있나요? IP를 차단했는데도 계속 공격을 받는 이유는 무엇인가요?

전화를 걸기 위해 전화를 연결하는 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만 차단되었습니다.

관련 정보