Вопрос или проблема
Последние версии Linux перешли с iptables на nftables. Однако я новичок в команде nft
. Так что мой вопрос: Как мне перечислить все конкретные IP-адреса (IPv4 и IPv6), которые “как-то” заблокированы nftables и также отобразить соответствующее правило?
Команда вроде этой:
# nft list ruleset | grep elements
# Внимание: таблица ip filter управляется iptables-nft, не трогайте!
# Внимание: таблица ip nat управляется iptables-nft, не трогайте!
# Внимание: таблица ip6 filter управляется iptables-nft, не трогайте!
# Внимание: таблица ip6 nat управляется iptables-nft, не трогайте!
# Внимание: цель XT MASQUERADE не найдена
# Внимание: цель XT MASQUERADE не найдена
elements = { 46.154.40.110 }
частично дает нужный мне вывод. (Смотрите последнюю строку вывода). Но это неудобно, когда много IP-адресов, и не отображает правило table inet f2b-table
и set addr-set-sshd
, которые мне нужны в этом случае.
Есть ли более элегантное решение (возможно, с использованием параметра --json
)?
Примечание: Я ищу отдельные адреса, заблокированные fail2ban. Так что я не в сложной ситуации.
Ответ или решение
Чтобы получить список всех заблокированных IP-адресов (IPv4 и IPv6) в nftables, а также соответствующие правила, необходимо учитывать использование fail2ban, так как именно он управляет заблокированными адресами. В данной статье мы поделимся детальным примером, как можно эффективно извлечь необходимую информацию, используя команду nft
.
Подход к решению задачи
-
Понимание контекста: В новых версиях Linux переход на nftables был осуществлён для упрощения управления сетевыми правилами. Важно знать, что fail2ban обычно добавляет IP-адреса в определённые наборы (sets) в рамках таблиц.
-
Использование nft для получения информации: С помощью команды
nft
мы можем извлечь информацию о текущих правилах и сетах.
Шаги для выполнения задачи
1. Список правил и наборов
Для начала, выполните следующую команду, чтобы получить общее представление о правилах и наборах:
nft list ruleset
Эта команда выведет все правила и наборы для IPv4 и IPv6. Обратите внимание на названия таблиц и наборов, которые может использовать fail2ban. Пример:
table inet f2b-table {
set addr-set-sshd {
type ipv4_addr; # тип для IPv4
elements = { 46.154.40.110 } # Пример IP
}
}
2. Фильтрация по конкретным наборам
Если у вас есть конкретное название набора (например, addr-set-sshd
), его можно отфильтровать следующим образом:
nft list set inet f2b-table addr-set-sshd
Эта команда выведет только заблокированные IP-адреса из указанного набора, например:
set addr-set-sshd {
type ipv4_addr; # тип для IPv4
elements = { 46.154.40.110, 192.168.1.10 } # Пример IP-адресов
}
3. JSON-вывод
Для более структурированного и удобного для анализа вида можно использовать опцию --json
. Выполните следующую команду:
nft list ruleset --json
Эта команда выведет все правила в формате JSON, что облегчит чтение и анализ полученной информации. Вы также можете использовать jq
для фильтрации необходимой информации. Например, чтобы получить только заблокированные IP из указанной таблицы, можно использовать следующую команду:
nft list ruleset --json | jq '.tables[] | select(.name == "f2b-table") | .sets[] | select(.name == "addr-set-sshd") | .elements[]'
Заключение
Используя команды nft
и фильтры, вы легко сможете получить список всех конкретных IP-адресов, заблокированных через fail2ban, а также соответствующие правила. Применение JSON-формата и инструмента jq
значительно облегчает анализ и обработку информации, что делает вашу работу более эффективной.
Это знание может существенно повысить вашу квалификацию в управлении сетевыми правилами на Linux-системах и улучшить безопасность вашей сети.