Вопрос или проблема
Чтобы воспроизвести проблему, создайте два разных сервера с их собственными IP-адресами. Теперь начните пинговать один из них со второго, и, пока пинг идет, заблокируйте IP первого сервера на втором с помощью одной из двух команд:
firewall-cmd -q --permanent --add-rich-rule="rule family='ipv4' source address=IP-ADDRESS-HERE reject"
или
firewall-cmd --permanent --zone=drop --add-source=IP-ADDRESS-HERE
и затем, какую бы из следующих команд вы ни запустили:
firewall-cmd --reload
firewall-cmd --complete-reload
systemctl restart firewalld
пинг никогда не останавливается. Только если прервать процесс пинга на первом сервере и попробовать снова, тогда он не удается.
Я, вероятно, сталкиваюсь с той же проблемой, обсуждаемой на почему firewalld не применяет правило drop?, но, к сожалению, там не было хорошего ответа.
Я пробовал многое, но не могу добиться, чтобы исходный источник пинга был немедленно заблокирован. Другими словами, если кто-то был замечен атакующим ваш сервер, и вы немедленно заблокировали бы его IP, ваш firewalld не может сделать это мгновенно, и это меня беспокоит.
Как сделать так, чтобы firewalld немедленно блокировал IP-адрес?
В самом начале набора правил по умолчанию есть правило, которое автоматически позволяет входящие пакеты, принадлежащие известному потоку пакетов или установленному соединению. Это означает, что вы можете получать входящие ответы, не позволяя их вручную в защитной стене, но это также означает, что активные соединения останутся разрешенными, даже если firewalld вставит позднее правило, блокирующее их.
Вы можете использовать инструмент conntrack
, чтобы проинспектировать известные состояния и удалить их индивидуально, по протоколу или по исходному IP-адресу.
Вам нужно установить conntrack и удалить установленные соединения:
yum install conntrack-tools
conntrack -F
Ответ или решение
Теория
Чтобы эффективно заблокировать IP-адрес через firewall-cmd, необходимо понимать, как firewalld обрабатывает трафик. Firewalld — это управляющий интерфейс для iptables, который позволяет администрировать сетевые правила в реальном времени. Одной из особенностей работы firewalld является то, что он позволяет добавить правило блокировки IP, но если соединение уже установлено, то существующее соединение не будет немедленно завершено.
Это связано с тем, что iptables содержит правило для обработки состояний соединений. Если соединение уже считается "установленным", оно не будет блокировано вашими новыми правилами до его завершения. Поэтому, когда вы добавляете правило блокировки IP с помощью команды:
firewall-cmd -q --permanent --add-rich-rule="rule family='ipv4' source address=IP-ADDRESS-HERE reject"
или через зону drop:
firewall-cmd --permanent --zone=drop --add-source=IP-ADDRESS-HERE
эта блокировка не будет применена незамедлительно к текущим соединениям из-за обработки их как "установленных" соединений.
Пример
Рассмотрим метод блокировки IP-адреса, который использует утилиту conntrack для удаления существующих соединений. Например, чтобы удалить существующее подключение и применить новое правило блокировки, нужно выполнить следующие шаги:
-
Проверка установленных соединений с помощью conntrack
Установите conntrack-tools, чтобы иметь возможность управлять таблицей состояний соединений:
yum install conntrack-tools
-
Удаление конкретных соединений
Используйте conntrack для удаления установленных соединений от нужного IP-адреса:
conntrack -D -s IP-ADDRESS-HERE
-
Добавление правила блокировки IP
Теперь добавьте правило блокировки для желаемого IP. Например:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address=IP-ADDRESS-HERE reject"
-
Применение изменений
Запустите команду перезагрузки firewalld:
firewall-cmd --reload
Применение
Рассмотренные шаги помогут незамедлительно заблокировать IP, предотвращая его дальнейшее подключение. Эти команды можно применять не только для защиты от DDoS-атак или злоумышленников, но и для устранения проблем, когда быстрое реагирование на сетевые угрозы критично для бизнеса.
Рекомендуется автоматизировать эту процедуру с использованием скриптов для быстрого реагирования на подозрительную активность в сети. Например, создать скрипт, который периодически проверяет аномалии и автоматизирует блокировку в случае необходимости.
Кроме того, вам стоит продумать мониторинг соединений и журналировать подозрительные попытки подключения, чтобы в будущем иметь возможность проводить анализ и более точно настраивать сеть.
Таким образом, понимание работы сетевых соединений и управление ими с помощью tools, таких как conntrack и firewalld, позволит вам поддерживать высокий уровень безопасности и реагировать на угрозы вовремя.