Будет ли блокировка всех соединений за пределами США, кроме порта 80, причиной высокой нагрузки на сервер?

16

Как и большинство серверов (я полагаю), у нас есть люди, которые пытаются грубо насиловать наши сервисы 24/7. У меня есть cpHulk в черном списке их IP, но кажется, что было бы лучше, если бы они не зашли так далеко. Я и мой хост - единственные, кто подключается к серверу через порты, отличные от 80, поэтому я хотел бы заблокировать соединения из всех стран за пределами США, за исключением порта 80. Я связался с хостом, чтобы настроить это, но они были нерешительными, потому что они сказали, что это создаст исключительно высокую нагрузку на сервер. Это выделенный сервер Xeon 1230 с 32 ГБ оперативной памяти под управлением CentOS 6.6 и iptables.

Во-первых, есть ли причина не делать этого? Во-вторых, верно ли то, что сказал мне мой хозяин? В-третьих, есть ли способ сделать это без влияния на высокую производительность?

Большое железо
источник
12
К сожалению, ваш хостинг-контакт не упомянул «Но есть стандартный отраслевой способ сделать то же самое, что вы хотите, с гораздо меньшим обслуживанием, лучшей безопасностью и низкой нагрузкой на сервер, который называется« Явное запрещение всех ». Получите мне список IP-адресов, которые вам нужны в белом списке» и я сделаю это для вас через 20 минут. " - Это то, что я ожидаю услышать от любого сисадмина,
стоящего
просто блокируйте их, когда они злоупотребляют ... обслуживание
сводится к

Ответы:

33

Установка определенных правил для блокировки каждого диапазона IP (путем перечисления каждого диапазона) является неправильным подходом.

Установите правила по умолчанию в iptables, чтобы отбрасывать весь трафик на порты управления. Затем добавьте правила, чтобы разрешить доступ только с ваших доверенных IP-адресов (вашего и вашего хоста).

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

jlehtinen
источник
Почему, если вы знаете, это явно запрещает все, когда вы неявно запрещаете всем, явно пропуская только несколько IP-адресов через брандмауэр?
Бен
Там нет ничего неявного об этом на самом деле ...
MR-SK
Одна из потенциальных проблем для белого списка - это удаленный доступ. Вам понадобится надежный VPN (отдельно от этого сервера) и разрешить его диапазон IP-адресов.
Foo Bar
9

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

Когда приходит запрос, он должен быть проверен на соответствие каждому отдельному правилу , что занимает очень мало времени для нескольких десятков или даже нескольких сотен правил, но с таким количеством правил, которое вам нужно будет использовать (1) каждое запрос будет значительно замедлен и (2) он будет использовать много ресурсов процессора.

Способ сделать это без существенного влияния на производительность - это делать то, что вы уже делаете: блокировать только те конкретные адреса, которые вызывают проблемы.

Майкл Хэмптон
источник
Спасибо за ответ, Майкл. Разве нет способа разрешить только IP-адреса в США, поэтому нужно проверять только одно правило?
Большой Железный
2
@ BigIron Конечно нет. В США также есть десятки тысяч сетевых блоков. Вы проигрываете в любом случае.
Майкл Хэмптон
1
@SamuelEdwinWard Нет, это не так. Несмотря на то, что они распространены повсеместно, как правило, такие списки не содержат более нескольких сотен записей.
Майкл Хэмптон
1
У вас есть справка о том, насколько значительным является замедление? Линейный поиск, хотя все наборы правил звучит ужасно неэффективно, по крайней мере, двоичный поиск будет означать, что поиск таблицы правил 60 000 займет всего 16 проб в таблице, и это может быть быстрее, чем пропуск трафика на веб-сервер, который может необходимо выполнить дисковый ввод-вывод для обслуживания запроса. Я не смог найти метрики для больших наборов правил в iptables.
Джонни
1
@Johnny netfilter (iptables) обрабатывает свои правила, к сожалению, линейно: serverfault.com/questions/334885/…
Росс Ридж
5

Что вам нужно, это инструмент под названием Ipsets

Наборы IP - это структура внутри ядра Linux, которая может управляться утилитой ipset. В зависимости от типа, в настоящее время набор IP-адресов может хранить IP-адреса, номера портов (TCP / UDP) или IP-адреса с MAC-адресами таким образом, что обеспечивает молниеносную скорость при сопоставлении записи с набором.

важно отметить, что это молниеносно! Это связано с тем, что огромное количество IP-сетей может быть представлено одним хешем вместо сотен или тысяч строк правил iptables.

Для блокирования стран смотрите этот пример :

Рикардо
источник
1

Не обращая внимания на то, стоит ли делать это таким образом или нет, это хорошая идея, вы можете делать то, что просили, с помощью модуля GeoIP для iptables.

После создания и установки модуля (и ежемесячного обновления списков IP-адресов) вы можете выполнять такие действия, чтобы блокировать отдельные страны:

iptables -I INPUT -m geoip --src-cc CN -j DROP

Или используйте --src-cc US -j ACCEPTи так далее, если вы предпочитаете указывать те страны, которые вы хотите сохранить.

Скотт Дадли
источник
Разве это не было бы падением производительности, даже если использовать «явный запрет на все» и разрешить использование только одной страны?
@ AndréDaniel, я признаю, что я не смотрел на сам код GeoIP, но предполагая, что они используют не наивную реализацию, которая умнее, чем последовательное сравнение группы сетевых блоков (например, три), это не обязательно.
Скотт Дадли
И если вы говорите об IPv4 и у вас есть 512 Мбайт для каждого правила, теоретическая реализация с использованием справочной таблицы может выполнить работу в O (1).
Скотт Дадли
1

Если вы хотите сохранить возможность подключения из любого места без ведения черного / белого списка географического местоположения, вы можете реализовать стук портов . Это остановит большинство автоматических попыток, позволяя при этом подключаться с любого адреса.

Примечание: не ставьте порт для стука рядом с портом, чтобы открыть, в противном случае последовательное сканирование порта активирует ваше правило.

Серен
источник
0

На случай, если у вас в стеке есть маршрутизатор с поддержкой BGP или два, и у вас есть какая-то идея, что, черт возьми, вы делаете / работаете с кем-то, кто знает, что, черт возьми, они делают или может быть, за провайдером DDoS-профилактики, достаточно крутым, чтобы помочь в реализации этого, есть относительно свежий метод ограничения трафика в географических регионах, который называется выборочным черным хулиганством, на который, я думаю, стоит обратить внимание.

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

Поскольку этот метод работает с манипуляциями с маршрутами, он обходит любые проблемы с нагрузкой на сервер.

Дмитрий Д.Б.
источник