Как перечислить все заблокированные IP-адреса и связанное правило nft?

Вопрос или проблема

Последние версии 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.

Подход к решению задачи

  1. Понимание контекста: В новых версиях Linux переход на nftables был осуществлён для упрощения управления сетевыми правилами. Важно знать, что fail2ban обычно добавляет IP-адреса в определённые наборы (sets) в рамках таблиц.

  2. Использование 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-системах и улучшить безопасность вашей сети.

Оцените материал
Добавить комментарий

Капча загружается...