Главная страница
Навигация по странице:

  • Угроза Комментарий У1.

  • У1

  • У2.1.

  • Схема № 1. Минимальная защита рабочей станций.

  • У3

  • У1, У2, У3, У5

  • У2.2

  • Статья на Хабре Используем nftables в Red Hat Enterprise Linux 8 Технические требования


    Скачать 0.63 Mb.
    НазваниеСтатья на Хабре Используем nftables в Red Hat Enterprise Linux 8 Технические требования
    Анкорnftables
    Дата15.09.2022
    Размер0.63 Mb.
    Формат файлаdocx
    Имя файлаtest.docx
    ТипСтатья
    #678367
    страница1 из 4
      1   2   3   4

    Все говорят, что для защиты сети нужно применять межсетевые экраны, но никто не говорит, как это нужно делать. Что ж, исправим ситуацию, рассмотрим типовые сценарии применения межсетевых экранов и то, как их при этом настраивать.

    В качестве межсетевого экрана будем использовать nftables, функционирующий под управлением ОС Debian GNU Linux.

    Оглавление

    Требования к предварительным знаниям


    Здесь мы не будем рассматривать принципы работы nftables, синтаксис его командной строки или формат конфигурационных файлов. Об этом есть множество других статей. Мы же сосредоточимся на его практическом использовании. По большому счету все необходимые настройки nftables будут в статье подробно описаны, так что проблем с их воспроизведением, по идее, быть не должно. Тем не менее для лучшего понимания процесса рекомендуется ознакомиться и держать под рукой следующие ресурсы:



    • Man по nftables

    • Официальный nftables wiki

    • Статья на Хабре: «Используем nftables в Red Hat Enterprise Linux 8»


    Технические требования


    Для построения лабораторных стендов можно использовать любую удобную для вас систему виртуализации: VMware, Hyper-V, VirtualBox, QEMU-KVM или другую. Главным требованием к этой системе будет наличие возможности управления виртуальными сетями. Система должна позволять создавать виртуальные сети, а также назначать их на различные адаптеры виртуальных машин.
    Создание шаблона виртуальной машины


    В большинстве лабораторных стендов нам потребуется виртуальная машина-шаблон, которую мы будем тиражировать и донастраивать. Для создания этого шаблона необходимо:



    1. Скачать Debian 11.4 в формате netinstall .

    2. Установить ОС в минимальной конфигурации. Для этого во время инсталляции выбираем все параметры по умолчанию (Next, Next, Next, ...), а на шаге с выбора пакетов «Software selection» отказываемся от всего предлагаемого (Рисунок 1).


      Рисунок 1


    3. (Опционально). Рекомендуется установить пакет расширений средств виртуализации для гостевой операционной системы. Например, для VMware – это будет VMware Tools, для VirtualBox – Virtualbox extension pack и т.д. После этого рекомендуется настроить разделяемый каталог (Shared Folder) для связи между файловыми системами виртуальной машины и гипервизора.

    4. (Опционально). Для повышения удобства выполнения практических работ рекомендуется поставить дополнительные пакеты:



      • OpenSSH сервер (пакет ssh).

      • Файловый менеджер Midnight Commander (пакет mc).

      • Утилиту conntrack, демонстрирующую внутреннее состояние брандмауэра и помогающую в отладке правил фильтрации (пакет conntrack).

        Все эти пакеты можно легко поставить. Для этого достаточно зайти на машину под root’ом (при конфигурировании Linux нам всегда потребуется root) и выполнить в консоли заклинание (команду):

    apt install mc ssh conntrack

    Типовой сценарий: защита сервера / рабочей станции с помощью локального брандмауэра


    Задача настроить локальный брандмауэр — пожалуй, самая распространённая задача межсетевого экранирования. Для ее решения мы должны знать ответы на два вопроса: чего мы хотим добиться, и как это реализовать.

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

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

    Стандартный алгоритм решения задач межсетевого экранирования:



    1. Формулирование модели угроз.

    2. Анализ угроз и выработка мер по их нейтрализации. На данном этапе необходимо сформулировать схему разграничения трафика: то есть какой трафик пропускаем, а какой блокируем.

    3. На основании схемы разграничения трафика производится настройка межсетевого экрана: формируются правила фильтрации, настраиваются сервисы, пишутся скрипты и так далее.


    Моделирование угроз – процесс нетривиальный и требующий значительных компетенций в области информационной безопасности. Фактически необходимо знать то, как вас будут пытаться взломать. Множество способов атак уже описано, но постоянно появляются все новые и новые. Специалисты, профессионально занимающиеся моделированием угроз, должны постоянно держать руку на пульсе и быть в курсе всех модных новинок. Для всех остальных существенным подспорьем будут готовые модели и банки данных угроз, например, MITRE ATT&CK MatrixБанк данных угроз ФСТЭК России или публичные исследования, например, этоэто и это.
    Модель угроз


    Применительно к нашей задаче мы будем рассматривать следующие угрозы:

    Угроза

    Комментарий

    У1. Угроза удаленной эксплуатации уязвимостей (как программных, так и конфигурационных) в сетевых сервисах узла.

    Примеры реализации угрозы: эпидемия червя MSBlast (эксплуатация программной уязвимости) или множественные утечки данных с кластеров Elasticsearch, происходящие из-за отсутствия авторизации (эксплуатация конфигурационной уязвимости).

    У2. Угроза удаленной атаки на отказ в обслуживании (DoS) сетевых сервисов узла.




    У2.1. DoS атака за счет превышения критического числа сетевых запросов, которые может обработать сетевой сервис с приемлемым качеством

    Подобные атаки наиболее актуальны для серверов баз данных, которые могут генерировать существенную вычислительную нагрузку на обработку входящего запроса.

    У2.2. DoS атака за счет подделки злоумышленником IP-пакета и установки в нем обратного адреса равному адресу петли 127.0.0.0/8

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

    У3. Угроза раскрытия аутентификационных данных за счет удаленных атак прямого перебора, осуществляемых в отношении сетевых сервисов узла.

    Тривиальный подбор паролей, но осуществляемый удаленно через сеть.

    У4. Угроза установки исходящих вредоносных сетевых соединений локальным программным обеспечением узла.

    Вредоносное сетевое соединение может установить как троян, связывающийся со своим сервером управления (C&C), так и легитимная программа, передающая избыточные данные (например, телеметрию) на сервера разработчиков.
    Кроме того, к данной угрозе можно отнести и действия сотрудников, использующих рабочие компьютеры для личных нужд (например, для майнинга криптовалют).

    У5. Угроза несанкционированного открытия сетевого порта вредоносным кодом.

    На заре вирусостроения первые шпионские вредоносные программы открывали на машине жертвы сетевые порты, к которым затем подключались лица, занимающиеся шпионажем.


    Теперь проанализируем угрозы и сформулируем идеи по их нейтрализации.

    Для парирования угрозы У1 и У5 необходимо лишить злоумышленников возможности осуществлять подключения к сетевым сервисам узла. Это достигается путем ограничения входящего трафика по портам и адресам источника (белые или черные списки).

    Нейтрализация У2.1 базируется на ограничении скорости получения сервисом сетевых пакетов, а как более сложный вариант — обнаружение атакующих узлов и блокировка их по IP. Следует отметить, что ограничение максимальной частоты подключений не всегда допустимо, особенно для публичных сервисов.

    Угроза У2.2. нейтрализуется путем отбрасывания всех сетевых пакетов, имеющих адрес источника из подсети 127.0.0.0/8 и пришедших не с петлевого (loopback) интерфейса.

    Для нейтрализации угрозы У3 в общем случае требуется применение дополнительных программ, которые бы определяли факты неудачных попыток авторизации, определяли бы IP адреса атакующих, а затем с помощью брандмауэра блокировали бы их по IP. Реализации защиты от угрозы У2.1. частично усложнит злоумышленникам возможность реализации угрозы У3.

    Борьба с У4 проводится путем ограничения исходящего сетевого трафика, что может производиться на основании анализа:



    • адресов назначения (белые или черные списки);

    • протоколов транспортного уровня (TCP/UDP) и номеров их портов (белые или черные списки);

    • приложений, пытающихся установить соединение.


    Переходя от идей по защите к их реализации, следует помнить базовую аксиому: чем более надежная защита, тем дороже она стоит. Причем эта стоимость выражается не только в затратах на покупку средств защиты, но и трудозатратах на их эксплуатацию особенно со стороны рядовых пользователей. Если защита терроризирует пользователя регулярными запросами или другим образом отвлекает от работы, то он всеми правдами и неправдами будет саботировать ее применение (user resistance). Поэтому всегда нужно находить баланс между защищенностью и удобством. Для этого в некоторых случаях следует принимать (игнорировать) риски маловероятных или незначительных по ущербу угроз информационной безопасности.

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


    Схема № 1. Минимальная защита рабочей станций.



    • Запрещен весь входящий трафик, кроме того, что относится к уже установленным соединениям.

    • Весь исходящий трафик разрешен.


    Данный схема подходит только для пользовательских рабочих станций с минимальными ожиданиями по безопасности. В подобных рабочих станциях нет активных сетевых сервисов (не должно быть), а брандмауэр защищает от несанкционированного открытия сетевых портов вредоносами. Косвенно брандмауэр также реализует «защиту от дурака», заключающуюся в том, что, если пользователь по неосторожности или в тестовых целях установит какой-либо сетевой сервис, то по сети он будет не доступен.

    Ограничение исходящего трафика по адресам назначения на рабочих станциях, где активно пользуются Интернетом, крайне трудоемко, а ограничивать трафик по приложениям брандмауэр nftables не умеет. Соответственно, весь исходящий сетевой трафик разрешается без ограничений. Угроза У3 полностью игнорируется. Как слабенький вариант борьбы с У3 можно рекомендовать применение встроенной системы мандатного разграничения доступа (MAC) AppArmor, которая позволяет выбранным приложениям отключить сетевые возможности. Проблема в том, что AppArmor работает только по черным спискам, белый список – замкнутую программную среду — с его помощью сделать не получится.

    Рассмотренная схема разграничения трафика позволяет полностью нейтрализовать угрозы У1, У2, У3, У5, угроза У4 игнорируется.

    По умолчанию встроенный брандмауэр ОС Windows работает по этой схеме.

    Схема № 2. Минимальная защита сервера.
    Схема практически полностью повторяет предыдущую, за исключением того, что:



    • разрешается входящий трафик по выбранным сетевым портам, требуемым для работы сетевым сервисам;

    • блокируется входящий трафик для IP-пакетов, адрес источника которых относится к сети 127.0.0.0/8, и которые пришли не с петлевого (loopback) интерфейса.


    Ограничение доступа к сетевым сервисам по IP-адресам не производится.

    Реализация данной схемы частично защищает от У1 и полностью от У2.2 и У5, остальные же угрозы игнорируются.

    Схема № 3. Стандартная защита серверов.
    Ограничение входящего трафика в данной схеме полностью повторяет предыдущую схему.
    Исходящий же трафик полностью запрещается, за исключением трафика:



    • текущего по уже установленным соединениям;

    • отправляемого по перечню явно разрешенных портов протоколов транспортного уровня (белый список).

    Подобная схема фильтрации полностью защищает от У2.2 и У5, частично от других угроз, кроме У2.1, которая полностью игнорируются.

    Схема № 4. Усиленная защита серверов.
    Схема основана на предыдущей, но усилена следующими мерами:



    • для каждого открываемого сетевого сервиса (при наличии возможности) настраивается:


      • ограничение по максимальной частоте (rate) попыток подключения;

      • ограничение по перечиню узлов, имеющих право на подключение (белый список);

      • использование дополнительных средств обнаружения большого количества неудачных попыток авторизации, после чего нарушителя с помощью брандмауэра блокируют по IP;

    • исходящий трафик, помимо портов, ограничивается также и по IP-адресам назначения.

    Подобная схема фильтрации дает максимальную защиту от всех рассмотренных угроз.
    Практическая работа: реализация межсетевого экранирования сервера по схеме усиленной защищенности


    Описание стенда


    Проведем нашу первую практическую работу. Начнем с того, что организуем лабораторный стенд по следующей схеме (Рисунок 2):

    Рисунок 2

    Здесь все просто. Есть одна виртуальная машина «Сервер». Она подключена своим единственным сетевым адаптером к виртуальной сети «NAT». В данной сети присутствует виртуальный маршрутизатор, реализующий NAT и выполняющий роль DNS-сервера. Сетевой адаптер гипервизора также подключен к сети «NAT». В качестве защищаемого сервиса на виртуальной машине «Сервер» будет выступать SSH. Для его тестирования на гипервизоре устанавливается SSH-клиент.
    Задача


    На виртуальной машине «Сервер» настроить межсетевой экран по схеме 4 «Усиленная защита сервера».
    Подготовка стенда

    1. На виртуальную машину «Сервер» установим OpenSSH сервер и службу автоматической синхронизации системных часов systemd-timesyncd:

    аpt install ssh systemd-timesyncd


    1. В файле настроек службы синхронизации времени /etc/systemd/timesyncd.conf раскомментируем строки NTP и FallbackNTP. Строку NTP запишем в следующем виде:


    NTP=0.europe.pool.ntp.org 1.europe.pool.ntp.org 2.europe.pool.ntp.org 3.europe.pool.ntp.org

    1. Активируем автоматическую синхронизацию времени, выполнив заклинание:


    2. timedatectl set-ntp true

    3. systemctl enable --now systemd-timesyncd.service

    systemctl restart systemd-timesyncd.service


    1. Для проверки синхронизации времени нужно перезагрузиться, а затем выполнить заклинание:

    timedatectl timesync-status

    1. Настроим статический IP адрес на виртуальной машине «Сервер». Для этого содержимое файла /etc/network/interfaces заменим на следующее:


    2. auto lo

    3. iface lo inet loopback



    4. # The primary network interface

    5. auto ens33

    6. iface ens33 inet static

    7. address 172.30.0.40

    8. mask 255.255.255.0

    9. gateway 172.30.0.2

    nameserver 172.30.0.2

    Примечание. В Debian по умолчанию при описании сетевых интерфейсов используется ключевое слово «allow-hotplug». Мы же поменяем его на «auto». Это сделано для того, чтобы была возможность менять сетевые настройки с помощью заклинания:

    service networking restart

    1. Проверим работоспособность стенда. С гипервизора должна быть возможность установить SSH сессию до «Сервера», а с «Сервера» — возможность скачивать обновления с официальных репозиториев и обновлять время по сети.


    Ход выполнения работы

    1. Логика организации дистрибутива Debian такова, что межсетевой экран nftables установлен в нем по умолчанию. В этом можно убедиться, выполнив заклинание:

    nft -v

    1. Для автоматической загрузки правил межсетевого экранирования после старта системы создана служба nftables (по сути являющаяся systemd юнитом), но по умолчанию она деактивирована. В этом можно убедиться, выполнив заклинание:

    service nftables status

    Служба организована таким образом, что при запуске она считывает правила, записанные в файле /etc/nftables.conf. Соответственно, цель нашей работы — внести в данный файл необходимые правила и активировать службу.

    1. Уточним схему разграничения сетевого трафика. Как часто бывает, те схемы, которые мы описывали ранее, не могут учитывать особенности эксплуатации конкретных серверов, поэтому и требуют уточнения. В частности, сделаем следующее:


      • Разрешим «пинговать» (использовать команду проверки сетевой связности ping) защищаемый сервер и разрешим серверу «пинговать» другие узлы. Несмотря на то, что каждый открытый поток сетевого трафика снижает защищенность, открытие «пингов» существенно улучшает эксплуатационные свойства сервера.
        Для этого разрешим входящие и исходящие ICMP echo-request.

      • Разрешим отправлять запросы и получать ответы по протоколу DNS.
        Для этого разрешим исходящие соединения по портам: TCP 53 и UDP 53 в адрес явно указанного DNS сервера: 172.30.0.2.

      • Разрешим автоматически обновлять системные часы по протоколу NTP.
        Для этого разрешим исходящие соединения по портам: TCP 123 и UDP 123 в адрес серверов, указанных в файле /etc/systemd/timesyncd.conf.

      • Разрешим скачивать обновления с репозиториев, указанных в файлах настройки менеджеров пакетов.
        Для этого разрешим исходящие http соединения (TCP 80) в адрес репозиториев, указанных в файле /etc/apt/sources.list.

      • Будем явно отбрасывать входящий трафик, превышающий скоростные ограничение в:


        • 5 пакетов в секунду для ICMP;

        • 10 попыток установки соединений в минуту для SSH.

      • Узлы, занимающиеся подборкой паролей к SSH, будем определять с помощью утилиты fail2ban. Утилита сама будет конфигурировать nftables для блокирования и разблокирования атакующих узлов.

    2. В файл /etc/nftables.conf запишем следующее содержимое:


    3. #!/usr/sbin/nft -f



    4. flush ruleset



    5. table ip firewall {

    6. # Список разрешенных DNS серверов

    7. set allowed-dns-servers {

    8. type ipv4_addr

    9. elements = { 172.30.0.2 }

    10. }



    11. # Список разрешенных узлов, с которых можно подключаться по SSH

    12. set allowed-ssh-clients {

    13. type ipv4_addr

    14. elements = { 172.30.0.1 }

    15. }



    16. # Список разрешённых NTP-серверов из файла /etc/systemd/timesyncd.conf

    17. set allowed-ntp-servers {

    18. type ipv4_addr

    19. }



    20. # Список разрешённых серверов репозиториев из файла /etc/apt/sources.list

    21. set allowed-repos {

    22. type ipv4_addr

    23. }



    24. # Цепочка правил фильтрации входящего трафика. Запрещено все, кроме того, что

    25. # явно разрешено (policy drop)

    26. chain fw_input {

    27. type filter hook input priority filter; policy drop;



    28. # Разрешен трафик с петлевого (loopback) интерфейса

    29. iifname "lo" accept



    30. # Явно отбрасываются IP-пакеты с обратным адресом локальной петли,

    31. # но не относящиеся к петлевому интерфейсу

    32. ip saddr 127.0.0.0/8 drop



    33. # Явно отбрасываем ICMP трафик, превышающий скоростной лимит

    34. ip protocol icmp limit rate over 5/second drop



    35. # Явно отбрасываем запросы на соединение по SSH, превышающие скоростной лимит

    36. tcp dport 22 ct state new limit rate over 10/minute drop



    37. # Разрешаем трафик по уже установленным соединениям

    38. ct state established,related accept



    39. # Разрешаем получение ICMP-эхо запросов (чтобы узел можно было пингануть)

    40. icmp type echo-request accept



    41. # Разрешаем подключение по SSH избранным клиентам

    42. ip saddr @allowed-ssh-clients tcp dport 22 accept

    43. }



    44. # Цепочка правил фильтрации исходящего трафика. Запрещено все, кроме того, что

    45. # явно разрешено (policy drop)

    46. chain fw_output {

    47. type filter hook output priority filter; policy drop;



    48. # Разрешаем трафик на петлевой интерфейс

    49. oifname "lo" accept



    50. # Разрешаем трафик по уже установленным соединениям

    51. ct state established,related accept



    52. # Разрешаем отправку ICMP эхо-запросов (чтобы узел мог пингануть).

    53. icmp type echo-request accept



    54. # Разрешаем отправку DNS-запросов по UDP

    55. ip daddr @allowed-dns-servers udp dport 53 accept



    56. # Разрешаем отправку DNS-запросов по TCP

    57. ip daddr @allowed-dns-servers tcp dport 53 accept



    58. # Разрешаем отправку запросов по протоколу NTP c помощью TCP

    59. ip daddr @allowed-ntp-servers tcp dport 123 accept



    60. # Разрешаем отправку запросов по протоколу NTP c помощью UDP

    61. ip daddr @allowed-ntp-servers udp dport 123 accept



    62. # Разрешаем установкe HTTP-соединений с серверами репозиториев, указанными в файле

    63. # /etc/apt/sources.list

    64. ip daddr @allowed-repos tcp dport 80 accept

    65. }

    66. }


    Примечание. Опытные администраторы наверно заметили, что в цепочке fw_input мы явно отбрасываем icmp пакеты, превышающие установленный скоростной лимит (ip protocol icmp limit rate over 5/second drop), а затем пишем правило, разрешающее получать icmp эхо-запросы (icmp type echo-request accept). Резонный вопрос: зачем мы это делаем? Ведь политика цепочки — отбрасывать все, что явно не разрешено, и, по идее, кажется, что эти два правила можно заменить одним icmp type echo-request limit rate 5/second accept, но в данном случае это не так. Дело в том, что в цепочке присутствует правило ct state established,related accept, и из-за него icmp type echo-request limit rate 5/second accept не будет ограничивать скорость. Это происходит потому, что nftables считает «ping» как сетевое соединение. Это можно увидеть с помощью заклинания

    conntrack -L

    Соответственно, пакеты, не попавшие в правило icmp type echo-request limit rate 5/second accept, будут пропущены правилом ct state established,related accept. Вот поэтому и нужно явно отбрасывать пакеты, превышающие скорость, и делать это перед правилом ct state established,related accept.

    1. Активируем автоматический запуск nftables после загрузки системы. Для этого выполним заклинания:


    2. systemctl daemon-reload

    systemctl enable nftables

    1. Для дальнейших работ нам потребуется утилита dig, входящая в пакет dnsutils, и утилита fail2ban, входящая в одноименный пакет. Установим их, выполнив заклинание:


    apt install dnsutils fail2ban


    1. Рассмотрим процесс формирования динамических списков allowed-ntp-servers и allowed-repos. Данные списки должны содержать в себе IP-адреса:


      • репозиториев, указанных в файле /etc/apt/sources.list;

      • NTP-серверов, указанных в файле /etc/systemd/timesyncd.conf.


    Если вы просмотрите эти файлы, то никаких IP-адресов там не заметите. Вместо них указаны лишь FQDN-имена требуемых серверов. Проблема в том, что nftables не умеет фильтровать по FQDN-именам, он работает только по IP. Соответственно, необходимо, чтобы кто-то ему перевел из FQDN в IP. Также следует помнить, что FQDN-имена — вещь не постоянная, и процесс перевода их в IP нужно делать периодически. Для извлечения и перевода из данных файлов FQDN в IP-адреса можно воспользоваться скриптом:

    nft flush set ip firewall allowed-ntp-servers

    nft flush set ip firewall allowed-repos
    grep -oP '(?<=^deb http://)[^ /]*' /etc/apt/sources.list | uniq | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-repos { IP }
    grep -oP '(?<=^NTP=).+$' /etc/systemd/timesyncd.conf | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-ntp-servers { IP }
    grep -oP '(?<=^FallbackNTP=).+$' /etc/systemd/timesyncd.conf | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-ntp-servers { IP }

    Алгоритм работы данного скрипта заключается в том, что вначале очищаются соответствующие списки nftables, затем с помощью регулярных выражений из файлов извлекаются FQDN-имена серверов, которые с помощью утилиты dig преобразуются в IP-адреса, а затем добавляются к требуемым спискам.

    1. Проблема в том, что приведенный выше скрипт нужно выполнять периодически. Для ее решения преобразуем скрипт в systemd юнит /etc/systemd/system/nft-dns.service:


    2. # /etc/systemd/system/nft-dns.service

    3. [Unit]

    4. Description=nftables DNS resolve service

    5. Requires=nftables.service

    6. Wants=nft-dns.timer

    7. After=network.target



    8. [Service]

    9. Type=oneshot

    10. ExecStart=bash -c "nft flush set ip firewall allowed-ntp-servers ; nft flush set ip firewall allowed-repos ; grep -oP '(?<=^deb http://)[^ /]*' /etc/apt/sources.list | uniq | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-repos { IP } ; grep -oP '(?<=^NTP=).+$' /etc/systemd/timesyncd.conf | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-ntp-servers { IP } ; grep -oP '(?<=^FallbackNTP=).+$' /etc/systemd/timesyncd.conf | xargs dig +short | xargs -r -I IP nft add element ip firewall allowed-ntp-servers { IP } "



    11. StandardOutput=journal



    12. [Install]

    13. WantedBy=multi-user.target

    14. Затем для ежечасного запуска этого юнита создадим systemd таймер /etc/systemd/system/nft-dns.timer:


    15. # /etc/systemd/system/nft-dns.timer

    16. [Unit]

    17. Description=nftables DNS resolve timer

    18. Requires=nftables.service



    19. [Timer]

    20. Unit=nft-dns.service

    21. OnCalendar=hourly



    22. [Install]

    WantedBy=timers.target


    1. После создания юнита и таймера активируем их, выполнив заклинания:


    2. systemctl daemon-reload

    3. systemctl enable nft-dns.service

    systemctl enable nft-dns.timer


    1. Последним этапом данной задачи будет настройка fail2ban на анализ журналов работы OpenSSH сервера и блокирование всех тех, кто совершил большое количество неудачных попыток авторизации по ssh.

      На самом деле fail2ban по умолчанию защищает SSH-сервер сразу после установки. Единственное, что необходимо сделать, так это поменять действия, выполняемые при блокировке. По умолчанию они рассчитаны на iptables (предшественника nftables), нам же требуется их поменять для nftables.

      Сделать это очень просто. В конфигурационном файле /etc/fail2ban/jail.conf в секции [DEFAULT] значение параметров banaction и banaction_allports необходимо поменять на nftables-multiport и nftables-allports соответственно. Затем перезапустить службу заклинанием

    service fail2ban restart


    Для блокировки нарушителей fail2ban добавляет к правилам фильтрации nftables новую таблицу f2b-table. Эта таблица содержит единственную цепочку f2b-chain, имеющую более низкий приоритет и соответственно срабатывающую раньше, чем тем цепочки, что мы создавали в файле /etc/nftables.com. Единственным правило цепочки f2b-chain является блокировка доступа к порту ssh (tcp 22) для IP-адресов, включенных в список addr-set-sshd. Пример рассмотренных списков и правил фильтрации, при добавлении туда нарушителя, выглядит следующим образом (Рисунок 3):


    Рисунок 3

    Текущее состояние блокировок можно посмотреть, выполнив заклинание:

    fail2ban-client status sshd


    Типовая задача: проверка работы брандмауэра


    Очень часто на практике возникает задача проверить, работает ли межсетевой экран. Сделать это можно тривиальным образом: попробовать «пингануть» защищаемый узел или попробовать обратится к какому-либо защищаемому сетевому сервису.

    Иногда специалисты по информационной безопасности могут потребовать от системных администраторов провести полную гарантированную проверку (аттестацию) всех правил фильтрации. Например, проверить на возможность открытия UDP и TCP порты из всего возможного диапазона (1-65535).

    Проблема в том, что на проверяемом сервер обычно используется не более десятка сетевых сервисов и, соответственно, открытых портов, иногда больше, но не суть. Возникает вопрос, как проверить порты, которые никто не слушает?

    Не самым удобным, но очень доступным вариантом решения этой задачи будет следующий: с помощью утилиты netcat на проверяемом сервере при включенном брандмауэре открываются UDP или TCP порты, а затем сервер с помощью утилиты nmap сканируется с другой машины. Если обнаруживаются порты, которые не должны быть открытыми, то с межсетевым экраном есть проблемы.
    Практическая работа: проверка работы брандмауэра


    Описание стенда


    В этой практической работе мы будем использовать лабораторный стенд от предыдущей работы.
    Задача


    Проверить на виртуальной машине «Сервер» работу локального брандмауэра в части блокировки входящего трафика в отношении всего диапазона TCP и UDP портов.
    Подготовка стенда

    1. На виртуальную машину «Сервер» поставим две дополнительные утилиты: «netcat» и «netstat». Для этого выполним заклинание:

    apt install netcat net-tools

    1. На гипервизор, а именно с него мы и будем сканировать, установим nmap.


    Ход выполнения работы

    1. Перечень открытых портов на сервере можно узнать с помощью утилиты netstat. Для UDP портов заклинание будет таким:

    netstat -lu

    а для TCP портов таким:

    netstat -lt

    1. Удаленную проверку доступности открытых портов будем проводить с помощью nmap. Например, для проверки порта UDP 100:


    nmap.exe -v 172.30.0.40 -T5 -sU -p100

    или для проверки порта TCP 100:

    nmap.exe -v 172.30.0.40 -T5 -sT -p100

    1. Для того чтобы проверить порты, которые никто не слушает, воспользуемся утилитой netcat и откроем их. В частности, для открытия порта UDP 100 выполним следующее заклинание:


    echo "PORT UDP 100 opened" | nc -lu 100


    Здесь netcat ожидает подключение по порту UDP 100, а после подключения выдает в сеть строку «PORT UDP 100 opened» и завершает свою работу, закрывая порт.
    Если нужно открыть TCP порт 300, то заклинание будет чуть другим:

    echo "PORT TCP 300 opened" | nc -lt 300

    1. Для удобства открытия диапазона портов воспользуемся shell-скриптом openport.sh:


    2. #!/bin/bash

    3. # openport.sh



    4. PROTOCOL=$1

    5. START_PORT=$2

    6. END_PORT=$3


    7.   1   2   3   4


    написать администратору сайта