fail2ban: банит по логам, а не ждёт руками

SSH на публичном IP получает перебор паролей с первых минут после старта — fail2ban читает логи (/var/log/auth.log, journald) через filter, находит совпадения по regex и банит IP через iptables/nftables/firewalld на время bantime. jail.local — конфиг поверх дефолтов (jail.conf не трогать, апдейты пакета его перезапишут): [sshd] enabled = true, maxretry = 3 — попыток до бана, findtime = 10m — окно, в котором они считаются, bantime = 1h — срок бана (-1 — навсегда). ...

8 сентября 2026 г. · llexa

SELinux и AppArmor: два подхода к mandatory access control

Root есть root. Обычные unix-права не останавливают взломанный процесс, если он и так владелец файла. MAC (mandatory access control) добавляет независимый от DAC слой поверх — SELinux и AppArmor решают это по-разному. getenforce # SELinux: Enforcing / Permissive / Disabled ausearch -m avc -ts recent # что заблокировано за последнее время audit2allow -a -M mymodule # черновик модуля из накопленных отказов aa-status # AppArmor: профили и их режим aa-complain /etc/apparmor.d/usr.sbin.nginx # profile → complain вместо enforce SELinux метит файлы и процессы контекстами — гибко, но отлаживать сложнее. AppArmor привязан к пути файла, профиль читается проще. RED OS и RHEL — SELinux по умолчанию, Debian и Ubuntu — AppArmor. ...

2 сентября 2026 г. · llexa

SELinux и AppArmor: два подхода к mandatory access control

Root есть root. Обычные unix-права не останавливают взломанный процесс, если он и так владелец файла. MAC (mandatory access control) добавляет независимый от DAC слой поверх — SELinux и AppArmor решают это по-разному. getenforce # SELinux: Enforcing / Permissive / Disabled ausearch -m avc -ts recent # что заблокировано за последнее время audit2allow -a -M mymodule # черновик модуля из накопленных отказов aa-status # AppArmor: профили и их режим aa-complain /etc/apparmor.d/usr.sbin.nginx # profile → complain вместо enforce SELinux метит файлы и процессы контекстами — гибко, но отлаживать сложнее. AppArmor привязан к пути файла, профиль читается проще. RED OS и RHEL — SELinux по умолчанию, Debian и Ubuntu — AppArmor. ...

4 августа 2026 г. · llexa

auditd: кто прочитал файл и кто запустил команду

Обычные логи покажут, что сервис что-то сделал с файлом — но не покажут, какой процесс и пользователь его открыл. В ядре есть audit-подсистема, auditd — её демон-приёмник. auditctl -w /etc/passwd -p wa -k passwd_watch # следить за записью/атрибутами файла auditctl -a always,exit -F arch=b64 -S execve -k exec_track # логировать все exec ausearch -k passwd_watch # события по ключу aureport --file --summary # сводка по файловым событиям -p wa — какие операции отслеживать (write, attribute change; есть ещё r/x). Ключ (-k) — метка для поиска через ausearch, без неё фильтруй по PID вручную. Правила из auditctl живут до перезагрузки — постоянные пишутся в /etc/audit/rules.d/*.rules. ...

30 июля 2026 г. · llexa

pg_hba.conf: кто и как подключается к PostgreSQL

pg_hba.conf решает не “кто может логиниться”, а “каким методом проверять” — и правила читаются сверху вниз, первое совпадение по типу/базе/пользователю/адресу побеждает. # TYPE DATABASE USER ADDRESS METHOD local all postgres peer host all all 127.0.0.1/32 scram-sha-256 host mydb app 10.0.0.0/24 scram-sha-256 peer — только для local (сверяет пользователя ОС с ролью PostgreSQL, пароль не нужен). trust — без пароля вообще, годится только на loopback в закрытом окружении. md5 устарел, scram-sha-256 — текущий стандарт. После правки — pg_ctl reload или SELECT pg_reload_conf();, restart не нужен и обрывает соединения. ...

29 июля 2026 г. · llexa

certbot: автоматизация TLS-сертификатов Let's Encrypt

Платный wildcard-сертификат или возня с CSR — избыточны для большинства сайтов. certbot сам получает сертификат Let’s Encrypt, вписывает его в конфиг nginx и настраивает автопродление: сертификаты живут 90 дней, продление обязано быть автоматическим. # выпуск + автонастройка nginx для домена sudo certbot certonly --nginx -d example.com -d www.example.com # автопродление настроено? (обычно systemd timer) systemctl list-timers | grep certbot # сухой прогон продления, без реального обновления sudo certbot renew --dry-run --nginx сам находит нужный server-блок. --standalone — если nginx ещё не поднят. renew --dry-run раз в квартал стоит гонять руками — чтобы не узнать о сломанном автопродлении в момент истечения сертификата. ...

25 июля 2026 г. · llexa

age: современная замена gpg для шифрования файлов

gpg умеет всё — подписи, web-of-trust, keyserver’ы, десятки опций — но для простой задачи «зашифровать файл получателю» это избыточная сложность. age делает ровно одну вещь и без конфигов. age-keygen -o key.txt # Public key: age1qy... Шифрование по публичному ключу получателя, можно на нескольких сразу: age -r age1qy... -o secret.age file.txt age -r age1qy... -r age1zx... -o secret.age file.txt Расшифровка — своим приватным ключом: age -d -i key.txt secret.age > file.txt Если получателя нет и нужен просто пароль — симметричный режим без ключей вообще: ...

23 июля 2026 г. · llexa

ssh-agent, ssh-add и ed25519-ключи по-нормальному

ed25519 — современный формат ключей: короче RSA, быстрее считается, криптографически не хуже. Для новых ключей брать его. ssh-keygen -t ed25519 -C "user@host" -f ~/.ssh/id_ed25519 eval "$(ssh-agent -s)" # запустить агент ssh-add ~/.ssh/id_ed25519 # пароль спросит раз, потом ключ в памяти ssh-add -l # какие ключи сейчас в агенте На десктопе агент обычно уже поднят DE — ssh-add -l покажет, жив ли сокет. На сервере, откуда ходишь дальше (git, другие хосты), нужен ForwardAgent yes для конкретного хоста в ~/.ssh/config — глобально небезопасно: root на промежуточном хосте получит доступ к сокету. ...

21 июля 2026 г. · llexa

nginx: усиление TLS без танцев с бубном

Дефолтный nginx с сертификатом Let’s Encrypt работает, но A на SSL Labs не даст — разрешены старые протоколы и слабые шифры. Правится парой директив в server. ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!3DES; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=63072000" always; ssl_stapling on; # OCSP stapling — сервер сам ssl_stapling_verify on; # прикладывает статус сертификата После правки: nginx -t && systemctl reload nginx, проверка — ssl-labs.com/ssltest или openssl s_client -connect host:443 -status. HSTS с годовым max-age необратим: сломается TLS — браузеры откажутся ходить и по HTTP. Включать значение постепенно. ...

20 июля 2026 г. · llexa

lynis: аудит безопасности сервера одной командой

lynis — сканер безопасности для Linux/Unix без агента и без сети: работает локально, читает конфиги и состояние системы. На выходе — не список уязвимостей, а числовой hardening index и причина по каждой находке. apt install lynis # или git clone для последней версии lynis audit system # полный прогон, ~200 тестов lynis show tests # список проверок с ID lynis audit system --cronjob # тихий прогон для cron Результат — в /var/log/lynis.log и /var/log/lynis-report.dat. В конце — блок Suggestions с ID вида SSH-7408 и кратким пояснением. Категории: SSH-конфиг, права на файлы, устаревшие пакеты, параметры ядра — первый прогон на свежем сервере обычно выдаёт полсотни рекомендаций. ...

17 июля 2026 г. · llexa