Записки молодого девопсера
153 subscribers
94 photos
7 files
623 links
Здесь выкладываются различные команды и решения проблем, с которыми приходится сталкиваться, а также интересные статьи и видео из мира IT.
Download Telegram
Для смены таймзоны внутри Docker-контейнера на базе Alpine нужно установить пакет tzdata командой apk add tzdata и установить переменную окружения TZ (например, TZ=Europe/Moscow)
В версии 2,221 Jenkins добавили полезный функционал для очистки старых билдов и артефактов. Опцию можно настроить глобально для всех проектов или для каждого проекта по отдельности. Можно указать сколько дней нужно хранить билды/артефакты и максимальное число билдов/артифактов.
https://support.cloudbees.com/hc/en-us/articles/215549798-Best-Strategy-for-Disk-Space-Management-Clean-Up-Old-Builds
Делаем свой сайт безопаснее.
Есть вот такой ресурс https://www.ssllabs.com, который проверяет безопасность вашего сайта (актуальность шифров, алгоритмов, протоколов и прочее).
После сканирования ресурс дает рейтинг вашему сайту в плане защиты. Ниже краткий пересказ того, как я получал рейтинг A+ вместо B на примере веб-сервера nginx.
* Отключаем поддержку старых версий протокола TLS (а именно, версий 1.0 и 1.1), оставляем 1.2 и 1.3 - устанавливается директивой ssl_protocols
ssl_protocols TLSv1.2 TLSv1.3;

* Оставляем набор актуальных шифров (отключаем недействительные, небезопасные, малоиспользуемые и уязвимые шифры) - устанавливается директивой ssl_ciphers
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !RC4 !EXP !PSK !SRP !CAMELLIA !SEED';

* Даем возможность веб-серверу выбирать шифр, а не браузеру - устанавливается директивой ssl_prefer_server_ciphers
ssl_prefer_server_ciphers on;

https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
Microsoft выкатил утилиту Super Linter для проверки кода на следующих языках:
Ansible (ansible-lint)
CSS (stylelint)
CoffeeScriptc(offeelint)
Dockerfile (dockerfilelint)
Golang (golangci-lint)
JavaScript (eslint standard js)
JSON (jsonlint)
Markdown (markdownlint
Perl (perl)
Python3 (pylint)
Ruby (RuboCop)
Shell (Shellcheck)
Terraform (tflint)
TypeScript (eslint standard js)
XML (LibXML)
YAML (YamlLint)
ENV (dotenv-linter)
https://habr.com/ru/post/507528/
Пока все прикручивается только к Github Actions, но есть возможность локального запуска в Docker.
Интересная задумка - строить схему взаимодействия между сервисами, а на выходе получать готовый docker-compose файл.
https://nuxx.io/
Если вы используется Ansible в связке с Python2 и Jinja, то при запуске (случайно или специально) на Python3 можно получить следующую ошибку:
fatal: [host-01.test.ru]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'iteritems'"}

В Python2 словари используют методы iterkeys(), itervalues(), iteritems() , в Python3 эти методы удалены. Следует использовать методы dict.keys(), dict.values(), dict.items() для обеспечения совместимости между Python2 и Python3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_python_version.html#dict-iteritems
P.S. И не стоит забывать, что Python2 уже deprecated и выпилен с большинства апстрим дистрибутивов.
https://github.com/zricethezav/gitleaks
Небольшая утилита для сканирования репозиториев на предмет секретов, таких как пароли, ключи API и токены .
Утилита либо клонирует репозиторий по ссылке, либо указывается путь на файловой системе.
Заявлена поддержка Github и Gitlab API, которая позволяет сканировать целые организации, пользователь и запросы на слияния (честно говоря, в документации не увидел такую возможность)
Пример запуска:
docker run  docker.io/zricethezav/gitleaks:latest gitleaks --repo=https://gitlab.example.com/repo_name --access-token=your_token --verbose --pretty

Помимо токена можно указать логин+пароль или ssh-ключ.
Вывод выглядит следующим образом (пример):
{
"line": "-----BEGIN RSA PRIVATE KEY-----",
"offender": "-----BEGIN RSA PRIVATE KEY-----",
"commit": "1111111111111111111111111111111111111111",
"repo": "test_repo",
"rule": "Asymmetric Private Key",
"commitMessage": "Add private key",
"author": "Test User",
"email": "[email protected]",
"file": "id_rsa",
"date": "2016-10-20T14:37:47Z",
"tags": "key, AsymmetricPrivateKey"
}

Если у вас Gitlab, то можно через API получить URL всех репозиториев, а потом скриптом обработать все.
Через API список репозиториев можно получить вот так (требуется наличие утилиты jq):
curl -s --header "PRIVATE-TOKEN: your_token" "https://gitlab.example.com/api/v4/projects?per_page=100&page=1" | jq -r '.[]|.web_url'

Также нужно учитывать ограничение на выдачу количества записей в API
https://docs.gitlab.com/ee/api/projects.html#pagination-limits
Смотрел на днях видео, где рекомендовали в случае DDoS-атак отдавать 444 код ответа. Решил узнать, что это за код. И, внезапно, выяснилось, что браузеры немного по-другому взаимодействуют с ресурсом, который отдаем подобный код ответа
https://habr.com/ru/post/415565/
По следам zabbix housekeeper
В какой-то момент времени в наш канал начали лететь триггеры с Zabbix с сообщениями о высоком IO на одном сервере (большое количество операций записи).
Решил разобраться с этим. Zabbix в контейнере, БД - PostgreSQL. Сначала было подозрение на задачи по бэкапу, которые запускаются по расписанию. Потом на PostgreSQL Autovacuum (в поисках статей по его тюнингу попалась неплохая статья от Microsoft https://docs.microsoft.com/en-ca/azure/postgresql/howto-optimize-autovacuum).
Оказалось, что autovacuum тоже не при делах. Потом случайно нашел ещё один компонент zabbix, который как раз запускается по расписанию. Это zabbix housekeeper — периодический процесс, выполняемый Zabbix сервером. Этот процесс удаляет устаревшую информацию и информацию удаленную пользователями. По умолчанию процесс запускается каждый час (переменная ZBX_HOUSEKEEPINGFREQUENCY в официальном образе Docker/параметр HousekeepingFrequency в файле конфигурации Zabbix) и удаляет 5000 записей за один прогон (переменная ZBX_MAXHOUSEKEEPERDELETE в официальном образе Docker/параметр MaxHousekeeperDelete в файле конфигурации Zabbix). Из веб-интерфейса можно только включить и выключить housekeeper, а также настроить, какое количество времени будет храниться различный набор данных. Все остальное делается правкой файла .env_srv с набором переменных окружения (у разработчиков Zabbix свое видение того, как должен формироваться файл конфигурации для Zabbix). В данном случае, на основе значений переменных окружения формируется итоговый файл конфигурации. Если править сам файл конфигурации внутри контейнера и перезапускать контейнер, то изменения не применятся. Задача решилась уменьшением значения переменной ZBX_MAXHOUSEKEEPERDELETE с 10000 до 6000. После правки файла .srv_env zabbix сервер можно перезапустить командой docker-compose up -d zabbix-server.
Полезные ссылки:
Официальные Dockerfile и docker-compose для Zabbix:
https://github.com/zabbix/zabbix-docker
Параметры файла конфигурации Zabbix сервера:
https://www.zabbix.com/documentation/4.2/ru/manual/appendix/config/zabbix_server
Очистка истории через housekeeper:
https://www.zabbix.com/documentation/4.2/ru/manual/web_interface/frontend_sections/administration/general
У издательства Manning есть целая куча бесплатных книжек по различным тематикам
https://freecontent.manning.com/free-ebooks/
(по ссылке внизу страницы есть кнопочка Older posts)
P.S. Издательство немножко хитрит и дает неполную версию книги, а главы, выбранные авторами (Chapters selected)
Записки молодого девопсера
Смотрел на днях видео, где рекомендовали в случае DDoS-атак отдавать 444 код ответа. Решил узнать, что это за код. И, внезапно, выяснилось, что браузеры немного по-другому взаимодействуют с ресурсом, который отдаем подобный код ответа https://habr.com/ru/post/415565/
Спасибо за дополнение @crrlcx:

Насчёт последних сообщений про анти-дос и анти-ддос - код 444 (не rfc, есть только в nginx) стоит вызывать только для ботов, но не для браузеров.
Для браузеров же стоит всё же ответить, например 204 (из rfc, No content).

И в случае nginx и https стоит для всех нежелательных обращений использовать ssl_ciphers aNULL;, чтобы не создавать tls соединения перед тем как вызвать 444.
Оказывается, существуют open source драйверы для устройств компании Razer. Проект называется OpenRazer (https://openrazer.github.io/). Драйверы имеются под большую линейку устройств и для различных операционных систем. Для некоторых устройств (например, мышей), драйвер предоставляет функционал, сравнимый с проприетарным драйвером на Windows. Где-то он скудный, например, на гарнитуре Razer Kraken 7.1 Ultimate можно настраивать только схему подсветки.
Помимо драйвера предлагается набор графических утилит для настройки ваших девайсов.
Небольшой ликбез.
Hashicorp Terraform - продукт, позволяющий управлять вашей инфраструктурой, используя методологию IaC (Infrastructure as Code). Данный продукт позволяет описать вашу будущую инфраструктуру в каком-нибудь облаке (например, Amazon) - виртуальные машины, диски, сети, правила на балансировщиках и сетевых экранах, а затем одной командой создать эту все это добро в облаке. Если у вас уже есть готовая инфраструктура, то её можно импортировать в Terraform. Распространяется в виде бинарного файла и имеет очень крутую и подробную документацию.
Конец ликбеза и основная часть поста
Периодически изучаю документацию Terraform. Продукт за несколько лет очень сильно вырос в плане доступных провайдеров - помимо очевидных облаков, есть и неочевидные СУБД (MySQL и PostreSQL), Github и Gitlab (удобно для тех же интеграторов - можно в коде описать структуру будущих проектов и групп, а потом уже редактировать этот шаблон).
Это из официальных поддерживаемых провайдеров (обычно поддержку осуществляет разработчик продукта - облака, СУБД и так далее ). Есть и third-party провайдеры - например, VirtualBox (https://github.com/terra-farm/terraform-provider-virtualbox), KVM (https://github.com/dmacvicar/terraform-provider-libvirt).
Шпаргалка для всего (языки программирования, прикладное ПО и прочее)
https://overapi.com/