Pull to refresh

Защита игрового сервера Source Dedicated Server от атак небольшими UDP-пакетами

Reading time2 min
Views5.2K
Original author: jheiv, lhffan
Существует ряд эксплойтов которые Valve почему-то пока не фиксит, а хакеры любители пытаются ими воспользоваться чтобы создавать дискомфортную игру игрокам на сервере. В результате применения данных атак резко возрастает пинг на отдельном игровом сервере и играть становится невозможно. При этом другие игровые сервера запущенные на этом же физическом сервере могут работать в нормальном режиме.

Рассмотрим один из способов борьбы с данным видом вандализма.

Здесь и далее подразумевается что работа будет вестись с игровыми серверами запускаемыми на linux сервере.

О том что на сервер поступают пакеты данных приводящие его в «задумчивое» состояние можно узнать посмотрев лог tcpdump:

01:29:54.215279 IP 96.19.63.51.64928 > 66.135.40.174.27015: UDP, length 18
01:29:54.215281 IP 96.19.63.51.64928 > 66.135.40.174.27015: UDP, length 0
01:29:54.229257 IP 96.19.63.51.64928 > 66.135.40.174.27015: UDP, length 18
01:29:54.233254 IP 96.19.63.51.64928 > 66.135.40.174.27015: UDP, length 0


Рабочие пакеты данных должны иметь размер более 32-х байт, поэтому добавляем правила в iptables:

-N logattacker
-A logattacker -j LOG --log-prefix " SRCDS:ATTACK: " --log-ip-options
-A logattacker -j DROP
-A INPUT -p udp -m udp -m limit -m length --dport 27000:29999 --limit 2/second -j logattacker --length 0:32


Теперь в случае обнаружения UDP пакетов размером менее 32-х байт приходящие на порты в диапазоне 27000-29999 (там могут несколько игровых и SourceTV серверов) эти пакеты игнорируются, а информация о данном факте логируется в /var/log/message для того чтобы ею потом воспользовался fail2ban для временной блокировки IP адреса с которого идут такие пакеты.

Feb 24 15:43:08 carbon kernel: [157686.157207] SRCDS:ATTACK: IN=eth0 OUT= MAC=00:15:17:4c:eb:f4:00:1e:4a:38:3a:00:08:00 SRC=85.159.xx.xx DST=217.199.yy.yy LEN=28 TOS=0x00 PREC=0x00 TTL=120 ID=43787 PROTO=UDP SPT=2445 DPT=27135 LEN=8


Далее в /etc/fail2ban/filter.d создаем фильтр srcds-ddos.conf с содержимым:

[Definition]
failregex = SRCDS:ATTACK: IN=eth0 OUT= MAC=[a-zA-F0-9:]+ SRC= DST=([0-9]{1,3}\.?){4} LEN=28


Регистрируем его в /etc/fail2ban/jail.conf:

[srcds-ddos]
enabled = true
port = all
protocol = udp
filter = srcds-ddos
logpath = /var/log/messages
maxretry = 3
bantime = 6000
banaction = iptables-allports


Перезапускаем fail2ban и iptables чтобы изменения вступили в силу.

Также можно ограничить доступ к RCON:

# Make new chain
iptables -N rcon
# Pull all packets to tcp ports 27000:29999 into rcon chain
iptables -A INPUT -p tcp --dport 27000:29999 -j rcon
# If source ip matches whitelisted ip, accept
iptables -A rcon --source 123.123.123.13 -j ACCEPT
# Otherwise (optionally log and) drop
iptables -A rcon -j LOG --log-prefix "SRCDS:RCON: " --log-ip-options
iptables -A rcon -j DROP


PS Перевод сделан не дословный, по мотивам, с собственными добавлениями и уточнениями.
Tags:
Hubs:
+3
Comments5

Articles

Change theme settings