Intereting Posts

Невозможно добавить большое количество правил в iptables

Я сделал очень простой сценарий bash (эхо при запуске, запускает команды, эхо в конце), чтобы добавить около 7300 правил для iptables, блокирующих большую часть Китая и России, однако он получает добавление примерно 400 правил, прежде чем давать следующую ошибку для каждой последующей попытки добавить правило в эту цепочку:

iptables: Unknown error 18446744073709551615 

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

Команда добавления каждого правила выглядит так:

 /sbin/iptables -A sshguard -s xxx0/x -j DROP 

sshguard – это цепочка, которую я создал для использования с демонами sshguard , и я хотел добавить туда правила, чтобы я не мутировал цепочку INPUT . Меня не обвиняют диапазоны ip, которые я поставляю, поскольку я предоставил допустимые диапазоны для тестирования, и они встречаются с той же ошибкой. Промывка цепи правил и добавление отдельных работают, но опять же, не после ~ 400 записей.

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

Существует ли какой-либо предел правила для каждой цепи с помощью iptables? Кроме того, это правильный способ блокировки этих диапазонов (ошибки в стороне)?

 # iptables -V iptables v1.3.5 # cat /etc/issue CentOS release 5.8 (Final) # uname -a Linux domain.com 2.6.18-028stab101.1 #1 SMP Sun Jun 24 19:50:48 MSD 2012 x86_64 x86_64 x86_64 GNU/Linux 

Изменить: Чтобы уточнить, скрипт bash запускает каждую команду iptables индивидуально, а не цикл через файл или список IP-адресов.

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

Хорошо, я понял это.

Я должен был упомянуть, что у меня был контейнер Virtuozzo для моего VPS. http://kb.parallels.com/en/746 упоминает следующее:

Кроме того, может потребоваться увеличить значение параметра номерного барьера, чтобы иметь возможность добавлять дополнительные правила iptables:

~# vzctl set 101 --save --numiptent 400

FYI: контейнер должен быть перезапущен, чтобы это вступало в силу.

Это объясняет, почему я ударил предел примерно в 400. Если бы у меня был CentOS 6, я бы установил модуль ipset (EPEL) для iptables вместо добавления всех этих правил (потому что ipset быстр).

Как сейчас, на CentOS 5.9, мне пришлось бы скомпилировать iptables > 1.4.4 и мое ядро, чтобы получить ipset . Поскольку это VPS, и мой хост может в конечном итоге перейти на CentOS 6, я не собираюсь это делать.

Это не сложно отлаживать, но если вы преобразовываете правила в чистые команды iptables и выполняете их один за другим (используйте скрипт оболочки), вы увидите ошибки, обычно отсутствующие некоторые модули ipt.

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

egrep '^(-A|-I)' ok.rules | while read x; do iptables $x || { echo failed $x; break; }; done

Я немного искал Google, кажется, что это ошибка в конфигурации ядра ядра CentOS.

В RHEL есть ошибка, связанная с iptables. Возможно, вы ударите ее. https://bugzilla.redhat.com/show_bug.cgi?id=598380

denyhosts , вы посмотрели на что-то вроде denyhosts ? Он автоматически добавит записи в hosts.deny поскольку вы атакованы (ssh-атаки)

Просто мысль.

Для большого или значительного диапазона ip's моя рекомендация для вас – использование ipset

Если вы хотите заблокировать весь IP-блок страны, вы можете использовать модуль geoip для iptables .