Назад | Перейти на главную страницу

Межсетевой экран блокировки содержимого iptables

Я установил брандмауэр с iptables для ограничения числа подключений в зависимости от содержимого. Ниже приведен пример одного из моих правил, которое останавливает атаки методом перебора wordpress.

iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --set --name wp_brute --rsource
iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="Wordpress Attack:"
iptables -A INPUT  -p tcp -m tcp --dport 80 -m string --algo bm --string "POST /wp-login.php" -m recent --name wp_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

Я пытаюсь получить другое правило, которое немного сложнее, потому что я хочу заблокировать на основе пакета ответа от входящего соединения. Например, если кто-то пытается войти в систему с помощью pop3, а ответ - ошибка аутентификации, я хочу заблокировать исходный IP-адрес. Однако вышеупомянутое правило не будет работать, очевидно, потому что спорт является исходным спортом.

Я пробовал это, но думаю, это должна быть таблица вывода, а не таблица ввода.

iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A INPUT  -p tcp -m tcp --dport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

Итак, я попробовал это

iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --set --name pop3_brute --rsource
iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j LOG --log-level=6 --log-prefix="POP3 Attack:"
iptables -A OUTPUT  -p tcp -m tcp --sport 110 -m string --algo bm --string "Password supplied for " -m recent --name pop3_brute --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset

Я немного новичок в iptables, поэтому у меня возникли небольшие проблемы с выяснением, как заблокировать удаленный IP-адрес на основе пакета ответа, который я возвращаю ему по счетчику посещений.

Обычно вы регистрируете сбои на уровне приложения, а затем получаете такую ​​утилиту, как, например, fail2ban анализировать журналы и создавать / управлять правилами брандмауэра.

Это было в то время; однако wp использует SSL на странице входа, не так ли? Скорее, вы вообще настраивали ssl? Я говорю это потому, что iptables находится в стеке.

ЕСЛИ вы перешли на страницу входа и увидите, что она в любом случае использует SSL, приведенные ниже правила не смогут сопоставить никакую строку, которую вы сможете настроить. SSL будет обрабатываться apache, а не частью netfilter. Итак, iptables будет видеть только треп.

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

Опять же, прошло некоторое время с тех пор, как я испортил WP.

Что касается матча pop3, пробовали ли вы сделать перебор самостоятельно во время просмотра tcpdump? Что-то вроде :

tcpdump -xxV port 110

Выполнение вышеуказанного даст ТОЧНО то, что iptables сможет сопоставить. Я бы проверил https://danielmiessler.com/study/tcpdump/ для некоторых указателей.