Рейтинг:0

Лучшие практики для сохранения правил nftables

флаг in

Я новичок в Ubuntu, перейдя с хостинга на CentOS7, который использовал iptables, и мне было удобно, как apf и bfd обрабатывали (скрывали) iptables от меня ... и это работало хорошо

Итак, я перешел на Ubuntu (20.04 LSR), и «способ ubuntu» для создания брандмауэра с автоматическим запретом попыток взлома выглядит как nftables и fail2ban.

Я использовал iRedMail для настройки базового почтового сервера на основе nginx, postfix, dovecot, clamav, roundcube и т. д., и он настроил fail2ban для просмотра журналов попыток взлома почтовых служб, ssh и т. д., и я видел он правильно анализирует мои почтовые журналы и сохраняет заблокированные ips fial2ban в таблице inet f2b-table

Это правильно выдерживает перезагрузку, но я заметил, что в файле /etc/nftables.conf нет ни одной из таблиц fail2ban - у него есть мой базовый брандмауэр, который я могу статически обновить, чтобы запретить все, а затем разблокировать TCP-порты, которые я хочу (в основном почту и веб-сервер и ssh)

Но, насколько я вижу, правила fail2ban не находятся в файле конфигурации, а, кажется, восстанавливаются при загрузке из записей в таблице fail2ban в базе данных mysql, настроенной iRedMail.

Это хорошо .. но вот дилемма: если я вручную добавлю правило в брандмауэр, используя существующую таблицу для fail2ban, я смогу...

nft добавить элемент inet f2b-table addr-set-postfix-pregreet { spammer.ip.addr.here }

Он появляется и работает. Я проверил, успешно заблокировав себя, а затем удалил через локальную консоль.

За исключением случаев, когда я перезагружаюсь, вся эта таблица теряется и восстанавливается с помощью fail2ban из записей таблицы (опять же, я не против)

Итак, я пошел дальше и добавил свою новую таблицу/материал

таблица инет спамеров {
    установить черную дыру {
            введите ipv4_addr
            элементы = {sample.ip.addr.here}
    }

    цепочка спамеров-цепочка {
            тип фильтра хук входной фильтр приоритета - 2; политика принять;
            ip saddr @blackhole капля
    }
 }

Опять же, протестировал это, и оно работает хорошо, но для сохранения этого мне нужно записать его в /etc/nftables.conf или настроить этот каталог для чтения в моих правилах и т. д..

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

например, если я хочу добавить нового спамера в свой список, я могу это сделать

nft добавить элемент inet spammers blackhole { new.ip.addr.here }

а то надо бы.. не знаю? сохранить таблицу в моем файле?

nft list table inet spammers > /etc/nftables.d/spammers.conf

Итак, это один из способов, которым я мог бы это сделать, но я видел, как другие говорили о netfilter-persist, но это не часть Ubuntu, поэтому, прежде чем я уйду, изобретаю собственное колесо или спускаюсь в кроличью нору netfilter-persist или (нет, спасибо) сделать что-то похожее на то, что, кажется, сделал fail2ban... (сохранение заблокированных IP-адресов в базе данных и восстановление списка при входе в систему)

Я могу придумать несколько способов, которыми я мог бы это сделать ... но мне было интересно, есть ли «лучшая практика» «Ubuntu-way», которую мне здесь не хватает ...

ОБНОВЛЕНИЕ / РЕДАКТИРОВАТЬ: если я не получу лучшего предложения, мое «решение» на данный момент

mkdir /etc/nftables.d/
nft list table inet spammers > /etc/nftables.d/spammers.conf

а затем я отредактировал свой /etc/nftables.conf, добавив эту строку внизу

включить "/etc/nftables.d/*.conf"

Теперь, когда я добавляю блок в таблицу, это 2 шага:

nft добавить элемент инет спамеры blackhole {some.evildoer.ip.address}
nft list table inet spammers > /etc/nftables.d/spammers.conf

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

банспаммер "badguy.ip.addr.здесь"

и банспамер добавит указанный элемент адреса и сохранит обновленную таблицу def...

опять же, это просто похоже на «не лучшую практику», отсюда и мой вопрос.

РЕДАКТИРОВАТЬ: 22 декабря 2021 г. Итак, я как бы разговариваю сам с собой, но, поскольку я не получил никакой обратной связи, я согласился со своей идеей - она ​​работает, и я написал этот небольшой скрипт для бан-спама...это необработанный и, вероятно, очень опасный - я не проводил проверки работоспособности, например, не пытался проверить, действителен ли путь к файлу конфигурации, и не делал никаких резервных копий указанного файла и т. д.

Поскольку запись в таблице имеет тип ipv4_addr, nftables выполняет проверку, поэтому я не слишком беспокоюсь об этом.

Обратите внимание, что в моей конкретной установке уже был фильтр с именем fileter в семействе inet — я специально добавляю его как список с немного более низким приоритетом. Я также создал каталог /etc/nftables.d и добавил в свой код, чтобы он анализировал каталог конфигурации как я упоминал выше

здесь надеюсь, что кто-то найдет это полезным.

Я все еще был бы заинтересован в более «Ubuntu-способе», если бы такая вещь существовала.

#!/usr/бин/ш

################################################### ###############################
#банспаммер 22.12.2021 DigitalSorceress
#  
# РЕЗЮМЕ
# Этот скрипт добавляет ip или диапазон ips (см. добавление элемента) в nftables
# специально для моей спамерской черной дыры
# он также сохраняет его в /etc/nftables.d/spammers.conf
#
# поместите это куда-нибудь, например /root/tandautils
# затем перейдите в /user/local/sbin и введите ln -s /root/tandautils/banspammer.sh banspammer
#
################################################### ###############################

# Обработка аргументов командной строки
КОМАНДА=$1
АДРЕС=$2


# расположение конфигурационного файла демона ssh
# по умолчанию для CentOS это CONFIG_FILE=/etc/ssh/sshd_config
#
CONFIG_FILE=/etc/nftables.d/spammers.conf



# Вот подпрограммы для отдельных действий
бан_спаммер () {
    # Выполните основную команду для блокировки спамера 
    echo "добавление спамера в блэкхол..."
    
    nft добавить элемент inet spammers blackhole { ${ADDRESS} }
    BAN_SPAMMER_RESULT=$?
    если [ $BAN_SPAMMER_RESULT -eq 0 ] 
    тогда
        echo "ГОТОВО: ${ADDRESS} добавлен в таблицу спамеров"
    фи
    эхо ""
}

разбан_спаммер () {
    # Выполните основную команду для блокировки спамера 
    echo "удаление спамера из blackhole..."
    
    nft удалить элемент inet spammers blackhole { ${ADDRESS} }

    UNBAN_SPAMMER_RESULT=$?
    если [ $UNBAN_SPAMMER_RESULT -eq 0 ] 
    тогда
        echo "ГОТОВО: ${ADDRESS} удален из таблицы"
    фи
    эхо ""
}

persist_spamtable () {
    echo "Сохранение спама в ${CONFIG_FILE}..."
    # нам нужно сохранить таблицу спама в конфиге
    nft list table inet spammers > ${CONFIG_FILE}
    если [$? -экв 0]
    тогда
      echo "готово.. показывает таблицу..."
      эхо ""
      nft список спамеров инет таблицы
    еще
      echo "Ошибка сохранения таблицы.."
    фи
    эхо ""
}

list_spamtable () {
    echo "список спама"
    эхо ""
    nft список спамеров инет таблицы
    эхо ""
}

kill_spamtable () {
    echo "сброс/создание пустой таблицы спама ${CONFIG_FILE}..."

    #rm -f /etc/nftables.d/spammers.conf
    тройник /etc/nftables.d/spammers.conf <<EOF
таблица инет спамеров {
    установить черную дыру {
        введите ipv4_addr
    }

    цепочка спамеров-цепочка {
        тип фильтра хук входной фильтр приоритета - 2; политика принять;
        ip saddr @blackhole капля
    }
}
EOF
    эхо ""
    если [$? -экв 0]
    тогда
        echo "успех... вот новый файл:"
        эхо ""
        кот /etc/hftables.d/spammers.conf
    еще
        echo "Ошибка записи файла..."
    фи
    
    эхо ""
}

Помоги мне () {
  echo "Это инструмент для упрощения блокировки IP-адресов спамеров"
  эхо " "
  echo "банспаммер 2021-12-22 DigitalSorceress" 
  эхо " "
  эхо "РЕЗЮМЕ"
  echo " Этот скрипт используется для упрощения процесса добавления/удаления спамеров из "
  echo "таблица спамеров в наборе правил nftables"
  эхо " "
  эхо " "
  echo "использование: $0 команда банспаммера [адрес] "
  эхо " "
  эхо " параметры команды: "
  эхо "адрес бана"
  echo "запрещает целевой адрес; может быть один IP-адрес или список с разделителями-запятыми"
  эхо " "
  echo "адрес разблокировки"
  echo "удаляет целевой адрес, может быть один IP-адрес или список разделителей с запятыми"
  эхо " "
  эхо "сброс"
  echo "удаляет все записи из таблицы спамеров"
  echo "обратите внимание, что это можно использовать для создания новой пустой таблицы"
  эхо " "
  эхо "показать"
  echo "показывает текущий список таблицы спама"
  эхо " "
  эхо "помогите"
  echo "Отображает это диалоговое окно справки"
}



# Здесь мы выполняем реальную работу на основе переданной команды
case "$COMMAND" в
  бан)
    если [ $# -eq 2 ] 
    тогда
        echo "адрес блокировки: ${ADDRESS}"
        ban_spammer ${АДРЕС}
      если [ $BAN_SPAMMER_RESULT -eq 0 ]
      тогда
        persist_spamtable
      фи
    еще
        echo "для команды ban требуется один IP-адрес или список IP-адресов, разделенных запятыми"
    фи
    ;;
  разбан)
    если [ $# -eq 2 ] 
    тогда
      echo "Адрес для разблокировки: ${ADDRESS}"
      unban_spammer ${АДРЕС}
      если [ $UNBAN_SPAMMER_RESULT -eq 0 ]
      тогда
        persist_spamtable
      фи
    фи
    ;;
  показать)
      list_spamtable
      ;;
  перезагрузить)
      kill_spamtable
      ;;
  помощь)
    Помоги мне
    ;;
  *)
      echo "Использование: $0 бан|разблокировать список IP-адресов, разделенных запятыми, или $0 показать|сбросить"
      выход 1
эсак
Рейтинг:0
флаг us

если ты apt-get установить iptables-persistent он будет втягиваться сетевой фильтр-постоянный что, кажется, было тем, что вы искали, чтобы сохранить свои правила сетевого фильтра?

Someone avatar
флаг my
В том виде, в каком он сейчас написан, ваш ответ неясен. Пожалуйста, [изменить], чтобы добавить дополнительные сведения, которые помогут другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти [в справочном центре](/help/how-to-answer).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.