세 가지 공격 유형
네트워크 플러드
엄청난 양의 트래픽이 서버 회선을 가득 채웁니다. 서버에 접속할 수 없게 되거나 모두에게 렉이 걸리고, 접속 기록에는 새로운 항목이 나타나지 않습니다.
접속 플러드
플레이어로 이어지지 않는 수천 개의 접속이나 서버 목록 핑입니다. 회선을 가득 채우지는 않지만 프록시 서버를 계속 붙잡아 두어, 결국 실제 플레이어에게 응답하지 못하게 만듭니다.
봇 공격
가짜 플레이어가 접속을 마치고 슬롯을 차지하며 채팅을 도배합니다. 봇 하나하나가 실제 접속이고 보통 프록시 목록의 주소를 거쳐 들어오기 때문에 서버에는 플레이어처럼 보입니다.
플러그인이 DDoS를 막지 못하는 이유
플러그인은 프록시 서버나 서버 안에서 실행됩니다. 회선이 가득 찼거나 머신이 패킷을 버리느라 바쁘면 플러그인은 실행될 기회조차 없습니다. 필터링은 트래픽이 내 머신에 도달하기 전에, 즉 호스팅 업체의 네트워크나 그 앞단의 서비스에서 이루어져야 합니다.
실제 DDoS 방어를 맡는 곳
- 많은 Minecraft 호스팅 업체와 일부 데이터 센터(예를 들어 게임 필터링을 제공하는 OVHcloud)는 DDoS 방어가 포함되어 있어, 공격이 내 서버에 닿기 전에 자체 네트워크에서 걸러 냅니다.
- TCPShield나 Cloudflare Spectrum(유료 요금제) 같은 보호 프록시는 서버 앞단에 놓입니다. 플레이어는 그 서비스의 네트워크에 접속하고, 깨끗한 트래픽만 내 서버에 도달합니다. 서비스에서 PROXY protocol을 켜고
velocity.toml에haproxy-protocol = true를, 또는 BungeeCord의config.yml에proxy_protocol: true를 설정하세요(또는 서비스의 플러그인을 설치하세요). 그렇지 않으면 프록시 서버가 플레이어 주소 대신 서비스의 주소를 보게 되어 IP 차단과 주소 검사가 작동하지 않습니다. - 실제 주소는 숨겨 두세요. 공격자가 프록시 서버나 하위 서버의 직접 주소를 알면 보호를 우회하므로, 그 주소를 다른 용도로 쓰지 말고 유출되었다면 바꾸세요.
이런 서비스는 트래픽을 필터링합니다. VPN 사용자나 차단 우회, 접속 과정을 끝까지 마치는 봇은 알아보지 못합니다.
프록시 서버에서 설정할 수 있는 것
두 프록시 서버 모두 한 주소에서 너무 자주 접속하면 속도를 늦추는 설정이 있습니다.
- Velocity:
velocity.toml의login-ratelimit, 한 주소에서 오는 접속 사이의 최소 간격(밀리초). - BungeeCord:
config.yml의connection_throttle과connection_throttle_limit.
이 설정은 주소 몇 개에서 오는 플러드에는 도움이 되지만, 주소 수천 개에서 오는 플러드에는 소용이 없습니다. 내 머신에서는 주소당 새 접속 수를 제한하는 방화벽 규칙이 작은 접속 플러드에 도움이 됩니다.
봇 공격: 플러그인이 도움이 되는 경우
봇 공격은 플러그인이 제 역할을 하는 경우입니다. 봇은 하나하나가 접속으로 들어오기 때문입니다. Kordon은 접속마다 주소를 검사하고, 봇이 몰려오기 시작하면 서버를 공격 모드로 바꿔 봇이 쓰는 네트워크를 막습니다. 공격 모드는 무료 요금제를 포함한 모든 요금제에 있습니다. 깨끗한 주소에서 오는 봇은 Sonar 같은 검증 플러그인이 잡습니다. 둘은 같은 프록시 서버에서 함께 잘 동작합니다.
Kordon은 네트워크 트래픽을 필터링하지 않으므로, 실제 DDoS에 대해서는 여전히 호스팅 업체가 필요합니다. 봇 공격 중에 해야 할 일을 참고하세요.
어떤 공격인지 구분하는 방법
서버에 접속할 수 없거나 모든 플레이어의 핑이 크게 치솟았는데, 접속 기록에는 새 접속이 없고 호스팅 업체 그래프에 트래픽 급증이 보인다면 DDoS입니다. 호스팅 업체에 연락하세요. 기록이 새 닉네임으로 가득 차고 슬롯이 꽉 찼다면 봇 공격입니다. 프록시 서버의 보호 기능이 처리합니다. 두 공격이 함께 오기도 하므로 둘 다 확인하세요.