Мы используем CentOS и хотели бы запретить нескольким азиатским странам доступ ко всему серверу. Почти каждый IP-адрес, который мы проверяем, который пытался взломать наш сервер, относится к азиатской стране (Россия, Китай, Пакистан и т. Д.)Как я могу вызвать скрипт оболочки или Perl из iptables?
У нас есть база данных MySQL по странам, с которой мы можем эффективно запросить и хотели бы попробовать что-то вроде:
-A INPUT -p tcp -m tcp --dport 80 -j /path/to/perlscript.pl
Сценарий нужно бы IP передается в качестве аргумента, то он будет возвращать либо цель или DROP ACCEPT?
Спасибо за ответы, вот мое продолжение.
Знаете ли вы, если это возможно? Наличие правила указывает на скрипт, который возвращает цель? (ACCPET/DROP)
Не совсем уверен, как работает ipset, мне придется экспериментировать, но похоже, что он создает одно правило. Как он будет обрабатывать Россию, например, которая имеет более 6000 диапазонов? И мы хотим добавить, вероятно, 20-40 стран, поэтому нам может понадобиться добавить более 100 000 диапазонов. Разве накладные расходы на один запрос MySQL не будут облагаться налогом?
SELECT country FROM ip_countries WHERE $VAR{ip} >= range1 && $VAR{ip} <= range2
В базе данных мы используем свободно доступна здесь: http://software77.net/geo-ip/
Он представляет собой IP-адреса в базе данных путем преобразования IP в число, используя следующую формулу:
$VAR{numberedIP} = $octs[3] + ($octs[2] * 256) + ($octs[1] * 256 * 256) + ($octs[0] * 256 * 256 * 256);
Он будет хранить начало диапазона в столбце «range1» и конце диапазона в столбце «range2».
Итак, вы можете увидеть, как мы будем искать IP-адрес, используя указанный выше запрос. Буквально занимает менее сотой доли секунды, чтобы получить результат, и это довольно точно. У нас есть один веб-сайт на выделенном сервере, довольно низкий трафик. Но, как и во всех серверах, которые я когда-либо проверял, каждый день он попадает в роботы хакеров, проверяет учетные записи электронной почты, учетные записи FTP и т. Д. И почти каждый веб-сервер, с которым я когда-либо работал, рано или поздно скомпрометирован. В нашем случае 99,99% трафика из азиатских стран имеют к нему преступные намерения.
Мы хотели бы, чтобы это выполнялось через iptables, чтобы покрыть все порты, а не только HTTP, например, используя директивы в .htaccess.
Считаете ли вы, что ipset все равно будет быстрее и эффективнее?
Подумайте о производительности сети в случае, когда каждый пакет tcp вызывает отдельный процесс. –
Используйте подходящий инструмент для работы. В этом случае это ['ipset'] (http://ipset.netfilter.org/). Ваш скрипт Perl может вывести все диапазоны IP из вашей базы данных MySQL и использовать их в вызовах 'ipset'. Затем заблокируйте весь набор, используя 'iptables'. –