Недавно я пострадал от атаки, похожей на наводнение UDP-запросов. Я ищу способ заблокировать атаку с помощью программного брандмауэра, такого как iptables, это должно быть возможно, как описано ниже. Целью атаки является многопользовательский сервер GTA San Andreas (SA-MP), работающий на порте 7777. Заполняя сервер запросами (которые будут использоваться для определения количества игроков, подключенных к серверу и т. Д.), Злоумышленники могут вызвать отказ в обслуживании для подлинных пользователей сервера.
Я размещаю этот сервер на выделенном сервере OVH, который включает их защиту «Anti-DDoS Game». Они не обнаруживают эту конкретную атаку. Учитывая, что это атака с низкой пропускной способностью, которая нацелена на ошибку в программном обеспечении сервера SA-MP, я считаю, что должна быть возможность заблокировать атаку с помощью программного брандмауэра, такого как iptables.
Мой сервер работает на Ubuntu 14.04 x64.
Атака не влияет на сеть или доступность других служб на хост-машине, она влияет только на доступность сервера SA-MP. Атака не влияет на использование ЦП сервера SA-MP.
Обратите внимание, что адрес назначения в следующих файлах pcap был изменен на 50.0.0.0. Предположим, что сервер SA-MP работает на 50.0.0.0:7777. В файлах отображается только трафик, предназначенный для 50.0.0.0:7777.
Во время атаки был создан следующий файл pcap: https://www.dropbox.com/s/5729k6vonqop7vh/attack.pcap
Соответствующие анонимные журналы iptables:
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.236.34.109 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=37535 PROTO=UDP SPT=10365 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.228.244.109 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=56141 PROTO=UDP SPT=26757 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.9.122.145 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=109 ID=28986 PROTO=UDP SPT=34861 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.12.137.119 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=112 ID=48843 PROTO=UDP SPT=26837 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.41.70.162 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=107 ID=45760 PROTO=UDP SPT=51292 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.12.97.62 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=107 ID=33629 PROTO=UDP SPT=16468 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.245.87.139 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=61928 PROTO=UDP SPT=41088 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.203.14.22 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=27207 PROTO=UDP SPT=57344 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.225.52.188 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=111 ID=13336 PROTO=UDP SPT=43057 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.82.59.154 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=106 ID=56663 PROTO=UDP SPT=59536 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.40.3.89 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=106 ID=51704 PROTO=UDP SPT=57477 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.104.10.111 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=109 ID=46872 PROTO=UDP SPT=51380 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.4.49.184 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=30226 PROTO=UDP SPT=16636 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.38.178.54 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=4646 PROTO=UDP SPT=35017 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.139.77.54 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=108 ID=23920 PROTO=UDP SPT=57421 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.104.123.34 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=109 ID=52328 PROTO=UDP SPT=34833 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.179.166.24 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=112 ID=12342 PROTO=UDP SPT=10357 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.75.214.181 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=109 ID=51967 PROTO=UDP SPT=8220 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.99.5.153 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=107 ID=32396 PROTO=UDP SPT=51236 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.95.125.95 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=106 ID=23852 PROTO=UDP SPT=16509 DPT=7777 LEN=19
Sep 6 19:20:35 sonic kernel: IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=177.138.137.71 DST=50.0.0.0 LEN=39 TOS=0x00 PREC=0x00 TTL=107 ID=64385 PROTO=UDP SPT=43176 DPT=7777 LEN=19
Следующий файл pcap показывает нормальный трафик: https://www.dropbox.com/s/dc05y54sru0c57u/normal.pcap
Я безуспешно перенаправил 177.0.0.0/8. Это решение в любом случае было бы неприемлемым, поскольку потенциально могло бы запретить доступ реальным пользователям.
Следующая попытка ограничить количество принимаемых пакетов была неудачный. Правила либо не работают, либо приводят к отказу в обслуживании.
#!/bin/bash
iptables -F
iptables -A INPUT -p udp -d 50.0.0.0 --destination-port 7777 -m string --string 'SAMP3' --algo bm -m limit --limit 100/s -j ACCEPT
iptables -A INPUT -p udp -d 50.0.0.0 --destination-port 7777 -m string --string 'SAMP3' --algo bm -j DROP
exit 0
Также неудачно:
#!/bin/bash
iptables -F
iptables -A INPUT -p udp -d 50.0.0.0 -s 177.0.0.0/8 --destination-port 7777 -j DROP
exit 0
50.0.0.0 будет заменен WAN-адресом IPv4 сервера.
Если бы вы могли дать какое-либо представление о том, как можно было бы сбросить трафик, это было бы очень полезно. У меня очень ограниченный опыт анализа трафика. Если бы я рекомендовал, я был бы готов использовать другое программное обеспечение, кроме iptables.
Невозможно реализовать решение прикладного уровня, поскольку исходный код сервера недоступен.
Заранее спасибо.
Вы имеете дело с наводнением запросов SA-MP, это известная проблема в сообществе SA-MP, и практически нет способов остановить это, было обновление, я уверен, что вы уже знакомы с ним. Однако в последнее время были совершены атаки, основанные на том же методе флуда, но с поддельными адресами источника, которые разработчикам еще предстоит решить. Пользователь исправил это, но не выпустит исходный код.
Первое, что нужно понять о DDoS-атаке, - это то, что если она достигает вашего сервера, уже слишком поздно что-либо делать. Пожалуйста, убедитесь, что вы прочитали эта почта так как это даст вам лучшее представление о том, с чем вы сталкиваетесь.
В качестве практической рекомендации я бы предложил проверить услуги, предлагаемые CloudFlare и Инкапсула. В зависимости от вашего трафика вы можете претендовать на бесплатный уровень, а в противном случае это хорошая отправная точка.
ОБНОВЛЕНИЕ: извините, я пропустил часть того, что это не веб-сайт, а приложение, использующее UDP. Прежде всего, согласно последним сообщениям, сайты онлайн-игр в настоящее время являются основной целью DDoS-атак. Цель - выкуп, поэтому, если ваше приложение приносит доход, вам, вероятно, придется поговорить с крупными парнями, такими как Akamai, Verisign, F5 и т. Д. У них есть пакеты, специально разработанные для защиты игровых сайтов, но они не из дешевых.