FastApi: авторизированный вход

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

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

Следующим шагом будет защитить доступ к остальным компонентам API, от доступа без сессионного ключа. Для этого воспользуемся классом FastApi security и добавим в требования заголовка запроса тег авторизации.

Получим итоговый роутинг auth.py:

В результате мы можем увидеть в документации появившийся «замочек»:

При попытке выполнения запроса без авторизации, соответственно получим ошибку аторизации:

Защита сайта сертификатом p12

Задача: обеспечить вход на сайт только при наличии действующего сертификата формата p12.

Решение:

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

Сначала создадим корневой сертификат сервера и необходимые для дальнейшей работы файлы и папки. Для этого создадим в любой папке файл root_cer.sh с содержимым вида:

, где:

rsa:2048- длина ключа, -days — сколько дней действителен сертификат, -x509 — создаём самоподписаный сертификат, /C — страна, /ST — область, /L — город, /O — организация, /OU — отдел,

Результатом работы будут два файла в папке certs: servert.crt (сертификат) и serverk.key (закрытый ключ). Данные закрытого ключа можно посмотреть при помощи:

В файле db/serial записывается текущий серийный номер
подписываемого сертификата в шестнадцатиричном формате.

В файл db/index.txt сохраняются данные о подписываемых сертификатах.

Далее необходимо создать файл с настройками для генерации пользовательских сертификатов ca.config:

Для автоматизации генерации клиентских сертификатов можно собрать небольшой bash скрипт:

На входе скрипта необходимо задать email, имя пользователя без пробелов и пароль на установку сертификата. На выходе будет запись в БД сертификатов и непосредственно сам контейнер p12 в папке p12 для передачи клиенту.

И ещё один полезный скрипт, для автоматизации отзыва сертификатов revote.sh:

Посмотреть список отозваных сертификатов можно при помощи команды:

Осталось только настроить apache для того что бы он пускал на сайт, только при наличии сертификата, добавив:

1C: открыть почтовый клиент с заполненным телом письма

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

Решение:

UBUNTU: настройка ротации логов

В Ubuntu за ротацию логов отвечает утилита logrotate. Обычно она уже установлена в «базе».

Для настройки используется каталог /etc/logrotate.d В этой папке необходимо добавить файл вида:

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

  • rotate — указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create — указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext — добавляет дату ротации перед заголовком старого лога;
  • compress — указывает, что лог необходимо сжимать;
  • delaycompress — не сжимать последний и предпоследний журнал;
  • extension — сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail — отправлять Email после завершения ротации;
  • maxage — выполнять ротацию журналов, если они старше, чем указано;
  • missingok — не выдавать ошибки, если лог файла не существует;
  • olddir — перемещать старые логи в отдельную папку;
  • postrotate/endscript — выполнить произвольные команды после ротации;
  • start — номер, с которого будет начата нумерация старых логов;
  • size — размер лога, когда он будет перемещен;
  • hourly — каждый час;
  • daily — каждый день;
  • weekly — каждую неделю;
  • monthly — каждый месяц;
  • yearly — каждый год.

Тестирование получившейся конфигурации:

Логирование и аудит потенциально опасных событий на сервере Linux

Задача: при изменении критически важных файлов, запуск из под sudo, создание тоннелей SSH и переброс портов — отсылать уведомление об этом на почту.

Решение: воспользуемся штатным демоном auditd и сторонней утилитой wazuh

Установка auditd:

Просмотр текущих действующих правил:

Стереть все действующие правила:

1) Настроить уведомление об изменении файлов /etc/paswd и /etc/shadow

, где -p — обозначает при каком условии будет сделана запись в журнал:

  • r — операция чтения данных из файла
  • w — операция записи данных в файл
  • x — операция исполнения файла
  • a — операция изменения атрибутов файла или директории

Что бы правила работали на постоянной основе, их нужно добавить в файл /etc/audit/rules.d/audit.rules после чего перезапустить демон

2) Настройка уведомления о выполнении команд от sudo/root:

3) Для того чтобы уведомления из журнала /etc/audit/audit.log отправлялись на почту, нужно установить wazuh-manager:

И соответственно добавить в конфигурационный файл /var/ossec/etc/ossec.conf, отслеживание изменений:

В этом же файле нужно настроить секцию касающуюся отправки уведомлений по email — отправитель, получатель.

Далее добавляем ключевые слова в /var/ossec/etc/lists/audit-keys, для фильтрации событий:

И добавить правило срабатывания в /var/ossec/etc/rules/local_rules.xml:

1 2 3 4 5 6 14