Защита от DOS-атак

Предыдущая тема Следующая тема Перейти вниз

Защита от DOS-атак

Сообщение автор Paranoik в Вт Май 24, 2011 9:58 pm

Для тех кто собрался ставить сервер , вот вам небольшая инструкция как оградить себя хотя б чучуть от DOS-атак

Недавно столкнулся с проблемой дос атаки...
Но так как влом было переходить с виндов на линукс, решил загуглить... и вот что нашел (текст не мой, но помог, сслыка на автора внизу статьи)
Ссылка на архив с прогой (х86-х64)
Статья написана для сервера л2, но я думаю, кому нужно-сам сможет переписать правила под себя(тем более что все красиво описано)
Сразу предупреждение: данный мануал не для тех, кто привык нажимать на кнопочки. Чтобы все заработало нужно хорошо думать что делаете, и иметь прямые руки.

Те, кто знаю Linux, понимают, на сколько удобно использовать iptables для создания правил, который будут отражать все атакующие зомби-машины, с помощью этих защит можно огородить не только свой Lineage 2 Java сервер, но и другие серверы либо новые браузерные игры.

Но к счастью, или к сожалению ( для хакеров ), на Windows'e тоже есть подобная софтина, и называется она - wipfw. И сегодня, автор, расскажет Вам как использовать их в своих целях.

В архиве находятся версии для 32 и 64 битных виндов
Разархивируем данный софт в любую папку, и устанавливаем ( запускаем install.bat ).
Отлично, вот и все, софт установлен - стандартные правила записаны.

Для изменений правил, Вы можете использовать cmd.exe и команды ipfw, посмотреть их можно тут.

Но согласитесь, не очень удобно записывать правила в команду, если их очень много, поэтому мы будем использовать файл "wipfw.conf", который находится в корне программы - в него записываются стандартные правила, а для того, чтоб они загрузились, нужно запустить "loadrules.cmd", который находится в папке bin.

С этого момента, если Вы прочитаете DOC по командам ipfw, Вы уже можете написать хорошую защиту.

Но я хочю Вам, как пример, предоставить структуру своего файла "wipfw.conf", что возможно упростит Вашу настройку защиты.

Для начала, выложу полностью весь файл, а далее мы будем разбирать каждую строку.

И так, мой "wipfw.conf" выглядит так:
Код:
flush
add 1 allow tcp from any to any 53
add 2 allow tcp from any 53 to any
add 3 allow udp from any to any 53
add 4 allow udp from any 53 to any

add 10 allow tcp from 195.16.88.3 to me

add 100 allow tcp from me to any
add 120 allow tcp from 192.0.0.0/8 to any
add 120 skipto 10000 tcp from 2.0.0.0/8 to any
add 120 skipto 10000 tcp from 66.0.0.0/8 to any
add 120 skipto 10000 tcp from 46.0.0.0/8 to any
add 120 skipto 10000 tcp from 62.0.0.0/8 to any
add 120 skipto 10000 tcp from 77.0.0.0/8 to any
add 120 skipto 10000 tcp from 78.0.0.0/8 to any
add 120 skipto 10000 tcp from 79.0.0.0/8 to any
add 120 skipto 10000 tcp from 80.0.0.0/8 to any
add 120 skipto 10000 tcp from 81.0.0.0/8 to any
add 120 skipto 10000 tcp from 82.0.0.0/8 to any
add 120 skipto 10000 tcp from 83.0.0.0/8 to any
add 120 skipto 10000 tcp from 84.0.0.0/8 to any
add 120 skipto 10000 tcp from 85.0.0.0/8 to any
add 120 skipto 10000 tcp from 86.0.0.0/8 to any
add 120 skipto 10000 tcp from 87.0.0.0/8 to any
add 120 skipto 10000 tcp from 88.0.0.0/8 to any
add 120 skipto 10000 tcp from 89.0.0.0/8 to any
add 120 skipto 10000 tcp from 90.0.0.0/8 to any
add 120 skipto 10000 tcp from 91.0.0.0/8 to any
add 120 skipto 10000 tcp from 92.0.0.0/8 to any
add 120 skipto 10000 tcp from 93.0.0.0/8 to any
add 120 skipto 10000 tcp from 94.0.0.0/8 to any
add 120 skipto 10000 tcp from 95.0.0.0/8 to any
add 120 skipto 10000 tcp from 109.0.0.0/8 to any
add 120 skipto 10000 tcp from 178.0.0.0/8 to any
add 120 skipto 10000 tcp from 188.0.0.0/8 to any
add 120 skipto 10000 tcp from 193.0.0.0/8 to any
add 120 skipto 10000 tcp from 194.0.0.0/8 to any
add 120 skipto 10000 tcp from 195.0.0.0/8 to any
add 120 skipto 10000 tcp from 212.0.0.0/8 to any
add 120 skipto 10000 tcp from 213.0.0.0/8 to any
add 120 skipto 10000 tcp from 217.0.0.0/8 to any
add 120 skipto 10000 tcp from 204.16.252.109 to any
add 120 skipto 10000 tcp from 38.99.77.20 to any
# GOOGLE
add 120 skipto 10000 tcp from 74.125.95.93 to any
add 120 skipto 10000 tcp from 74.125.127.93 to any
add 120 skipto 10000 tcp from 74.125.43.99/16 to any
add 120 skipto 10000 tcp from 209.85.135.95/16 to any
add 120 skipto 10000 tcp from 64.12.202.116/16 to any
# depositfiles
add 120 skipto 10000 tcp from 208.88.224.248/24 to any
# DynDNS
add 120 skipto 10000 tcp from 204.13.248.117/16 to any
add 200 skipto 10000 icmp from any to any in icmptype 5,9,13,14,15,16,17
add 500 deny all from any to any

add 10000 allow tcp from any to any 80,443,49441,5938,4344,9019,5190
add 10001 allow tcp from any 80,443,49441,5938,4344,9019,5190 to any
add 10002 allow tcp from any to me 7777 setup limit src-addr 15 in
add 10003 allow tcp from any to me 2106 setup limit src-addr 5 in
add 10005 allow tcp from any to any 7777 out
add 10006 allow tcp from any to any 2106 out
add 10500 deny all from any to any
И так, поехали...
Код:
-f flush
- Удаляю все записи, которые были у меня до этого момента.
Код:
add 1 allow tcp from any to any 53
add 2 allow tcp from any 53 to any
add 3 allow udp from any to any 53
add 4 allow udp from any 53 to any
- Открываю порты для получения и отправки данных к серверам DNS
Код:
add 10 allow tcp from 195.16.88.3 to me
- Открываю данному ip ( ip моего хостинга ) все порты и разрешаю передавать мне любую информацию
Код:
add 100 allow tcp from me to any
- Разрешаю себе передавать информацию любому серверу на всех портах
Код:
add 120 allow tcp from 192.0.0.0/8 to any
- Разрешаю своим локальным компьютерам передавать информацию любому серверу на всех портах
Код:
add 120 skipto 10000 tcp from 2.0.0.0/8 to any
add 120 skipto 10000 tcp from 66.0.0.0/8 to any
add 120 skipto 10000 tcp from 46.0.0.0/8 to any
add 120 skipto 10000 tcp from 62.0.0.0/8 to any
add 120 skipto 10000 tcp from 77.0.0.0/8 to any
add 120 skipto 10000 tcp from 78.0.0.0/8 to any
add 120 skipto 10000 tcp from 79.0.0.0/8 to any
add 120 skipto 10000 tcp from 80.0.0.0/8 to any
add 120 skipto 10000 tcp from 81.0.0.0/8 to any
add 120 skipto 10000 tcp from 82.0.0.0/8 to any
add 120 skipto 10000 tcp from 83.0.0.0/8 to any
add 120 skipto 10000 tcp from 84.0.0.0/8 to any
add 120 skipto 10000 tcp from 85.0.0.0/8 to any
add 120 skipto 10000 tcp from 86.0.0.0/8 to any
add 120 skipto 10000 tcp from 87.0.0.0/8 to any
add 120 skipto 10000 tcp from 88.0.0.0/8 to any
add 120 skipto 10000 tcp from 89.0.0.0/8 to any
add 120 skipto 10000 tcp from 90.0.0.0/8 to any
add 120 skipto 10000 tcp from 91.0.0.0/8 to any
add 120 skipto 10000 tcp from 92.0.0.0/8 to any
add 120 skipto 10000 tcp from 93.0.0.0/8 to any
add 120 skipto 10000 tcp from 94.0.0.0/8 to any
add 120 skipto 10000 tcp from 95.0.0.0/8 to any
add 120 skipto 10000 tcp from 109.0.0.0/8 to any
add 120 skipto 10000 tcp from 178.0.0.0/8 to any
add 120 skipto 10000 tcp from 188.0.0.0/8 to any
add 120 skipto 10000 tcp from 193.0.0.0/8 to any
add 120 skipto 10000 tcp from 194.0.0.0/8 to any
add 120 skipto 10000 tcp from 195.0.0.0/8 to any
add 120 skipto 10000 tcp from 212.0.0.0/8 to any
add 120 skipto 10000 tcp from 213.0.0.0/8 to any
add 120 skipto 10000 tcp from 217.0.0.0/8 to any
- Все СНГ пользователи ( т.е - здесь IP всей СНГ ) перебрасываются на правило №10000
Код:
add 120 skipto 10000 tcp from 204.16.252.109 to any
add 120 skipto 10000 tcp from 38.99.77.20 to any
add 120 skipto 10000 tcp from 74.125.95.93 to any
add 120 skipto 10000 tcp from 74.125.127.93 to any
add 120 skipto 10000 tcp from 74.125.43.99/16 to any
add 120 skipto 10000 tcp from 209.85.135.95/16 to any
add 120 skipto 10000 tcp from 64.12.202.116/16 to any
add 120 skipto 10000 tcp from 208.88.224.248/24 to any
add 120 skipto 10000 tcp from 204.13.248.117/16 to any
- Дополнительные серверы, которые подключаясь ко мне будут перебрасываться на правило №10000 - За зоной СНГ ( Здесь google, depositfiles, imageshacke, youtube )
Код:
add 200 skipto 10000 icmp from any to any in icmptype 5,9,13,14,15,16,17
- Закрываем порты от сканирование ( делаем невидимыми )
Код:
add 500 deny all from any to any
- Отклоняем все пакеты, что дошли к данному правилу. ( Запретить все что сюда дошло )
Код:
add 10000 allow tcp from any to any 80,443,49441,5938,4344,9019,5190
add 10001 allow tcp from any 80,443,49441,5938,4344,9019,5190 to any
- Открываю нужные мне порты для использования, здесь http, skype, icq
Код:
add 10002 allow tcp from any to me 7777 setup limit src-addr 15 in
add 10003 allow tcp from any to me 2106 setup limit src-addr 5 in
- Открываю порт 7777 и 2106 для подсоединения ко мне, с максимальным числом подсоединение с одного IP ( для логин сервера ) 5 и ( для гейм сервера ) 15.
Код:
add 10005 allow tcp from any to any 7777 out
add 10006 allow tcp from any to any 2106 out
- Ещё-раз разрешаю себе отдавать пакеты на портах 7777 и 2106 ( это не обязательно, так как на правиле №100 мы разрешили себе отдавать от себя все и на всех портах )
Код:
add 10500 deny all from any to any
- Отклоняем все, что дошло до данного правила
Вот и все, также хочу сказать, что все правила выполняются в последовательности их номеров, это очень важно!
Если Вы сначала поставите правило, которые будет запрещать это, а после добавите правило для разрешения подключений, оно будет нерабочим.

Небольшой комментарий того, что предоставлено в моих правилах:
- Разрешают доступ к себе только странам СНГ и нужным нам серверам ( А зачем нам Великобритания или Африка? Не думаю что потенциальный игроки там будут, но вот бот-машины там точно есть ).
- Закрываем все порты, исключая нужные нам и игровые порты.
- Устанавливаем ограничение на подключение к игровым портам с 1 IP.

Вот и все, несколько правил, и Ваш компьютер защищен!

Добавлю интересную информацию:
Функция deny - сбрасывает пакет.
Функция skipto [number] - перебрасывает пакет на указанное правило, если его нет, идет дальше по списку ( выше по номеру ).
Функция allow - пропуска пакет.
Для добавления правил через cmd, в начало нужно добавлять ipfw.
Для очистки всех правил, наберите в cmd - ipfw -f flush
Для просмотра всех правил, наберите в cmd - ipfw list

Команда в cmd для блокировки конкретного ip:
ipfw add 10 deny tcp from 10.10.10.10 to any
(ip 10.10.10.10 будет заблокирован)

Команда в cmd для блокировки под-сети пользователя:
ipfw add 10 deny tcp from 10.10.10.10/24 to any
(ip 10.10.10.0 - 10.10.10.255 будут заблокированы)

ipfw add 10 deny tcp from 10.10.10.10/16 to any
(ip 10.10.0.0 - 10.10.255.255 будут заблокированы)

Для анализирование подключений к себе на компьютер, используйте команду в cmd - netstat
Также Вы можете смотреть, сколько подключений было отправлено к Вам и сколько активных сейчас. Очень просто наглядно отыскать бот-машины и добавить их ip/под сеть в бан с помощью ipfw ( на примерах как выше )

А с помощью команды netstat -n | find "2106"
Вы увидите все подключения на порт 2106.
Намного удобнее работать отдельно с подключения к конкретному поту, чем со всеми вместе.

На этом я думаю стоит закончить. Изучайте DOC по правилам ipfw ( сылка на них была выше ), и пишите свои правила, либо переписывайте мои.

Всем спасибо за внимание и удачи в "отбивании" бот-машин.



Как оказалось в последствии установить это чудо на Windows Server 2008 x64 не удается, точно так же как и на Windows 7 x64. Эти оси требуют что бы все устанавливаемые в систему драйвера имели цифровую подпись. Загрузка винды в режиме "Отключить проверку цифровой подписи у драйверов" не подходит - каждый раз при загрузке клацать F8 - это верх "задротства". Поэтому опять же помог гугл!. Тем кто хочет установить сею прогу на вин2008 или вин7 советую почитать эту статью


Спасибо за внимание)

Paranoik

Возраст : 105

Вернуться к началу Перейти вниз

Re: Защита от DOS-атак

Сообщение автор Paranoik в Вт Май 24, 2011 10:10 pm

Скажу сразу, что это лишь примеры и скромные советы, а потому с помощью этого мана Вы сможете защитится только от DoSa обидевшихся на Вас игроков или конкурентов. От ботнета он не спасет (от ботнета пока ничего не спасает, так как ботнет в 100000 маших может "зафлудить" магистраль в 100гбит/c).
Сначала пару примечаний:
1. ОС GNU/Linux и основанные на этом ядре дистрибутивы (повторяю еще раз для тех кто в танке)
2. Все команды (буду обозначать их символом #) выполняются из под суперпользователя.
3. У меня проверено и работает, но я не несу ответственности за возникшие у Вас проблемы.
4. То, что тема создана в этом разделе не значит, что такое возможно только на эмуляторах тринити. Эмуляторы сюда вообще отношения как такового не имеют.

Итак, сначало узнаем ИП плохого человека, который вас Ддосит
# netstat -anp | grep 'tcp\|udp' | cut -d: -f1| sort | uniq -c
Эта команда покажет нам все ИП-адресса подключенные к нашей машине. ИП-адресс с наибольшем количеством подключений, скорее всего, и является нашим ддосером.
Примечание - ИПы 0.0.0.0/8 и 127.0.0.0/8 являются замкнутыми интерфейсами и мы их не берем во внимание.

Посте того, как мы получили его ИП мы можем проделать пару операций:

Бан ИП-адресса:
Мы можем забанить ИП обидчика, что бы все пакеты, которые он посылал, разрушались не проходя интерфейс.
# iptables -A INPUT -s ИП_ОБИДЧИКА -j REJECT
После чего сохраняем примененные правила
# service iptables save
Прелесть опции REJECT в том, что в отличии от DROP сервер не обрабатывает пакет, а потом блокирует, а блокирует сразу. Соответственно экономит ресурсы.

Ограничить количество подключений на определенный порт:
# iptables -A INPUT -p tcp -m tcp --dport ПОРТ -m connlimit --connlimit-above КОЛИЧЕСТВО_ПОДКЛЮЧЕНИЙ --connlimit-mask 32 -j DROP
# iptables -A INPUT -p tcp -m tcp --dport ПОРТ --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
После чего сохраняем примененные правила
# service iptables save
Это позволяет ограничить подключение в серверу мира\авторизации. В результате чего злоумышленник не сможет открыть кучу фиктивных подключений, которые заполнят весь порт, и игрокам не останется места.

Запрет сканирования портов.
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -p all -i ИНТЕРФЕЙС -j ACCEPT
# iptables -A OUTPUT -p all -o ИНТЕРФЕЙС -j ACCEPT
# iptables -A INPUT -m recent --rcheck --seconds ВРЕМЯ_БАНА_В_СЕК --name STOPSCAN -j DROP
# iptables -A INPUT -p tcp -m multiport ! --dports ПОРТ1,ПОРТ2, ПОРТn -m recent --set --name STOPSCAN -j DROP
# iptables -A INPUT -p tcp --syn --dport ПОРТ1 -j ACCEPT
# iptables -A INPUT -p tcp --syn --dport ПОРТ2 -j ACCEPT
# iptables -A INPUT -p tcp --syn --dport ПОРТn -j ACCEPT
# iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
При такой настройке iptables все запросы идущие НЕ на порты которые мы разрешили (ПОРТ1, ПОРТ2, и тд) будут блокировани на ВРЕМЯ_БАНА_В_СЕК, а вместе с запросами будет блокирован и ИП адресс отправителя.
После чего сохраняем примененные правила
# service iptables save

Вообще, блокирование сканирования портов и ограничение количества подключений на них должно в большей мере вас обезопасить от DoS атаки и мелких DDoS атак, но, к сожалению, от флуд атаки обезопасить себя нелегко своими силами, так как даже если пакеты будут блокированы, они все равно забивают Ваш интернет канал.

Всем спасибо. Позже, может. допишу еще пару интересносней

Paranoik

Возраст : 105

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения