firewalld: зоны вместо линейных цепочек правил

На RPM-системах (RED OS, RHEL, Fedora) по умолчанию стоит firewalld — модель зон вместо линейного списка правил как в nftables/iptables. Интерфейс приписан к зоне (public, internal, trusted), и правила действуют в контексте зоны, а не глобально. firewall-cmd --get-active-zones firewall-cmd --zone=public --add-service=https --permanent firewall-cmd --zone=public --add-port=8443/tcp --permanent firewall-cmd --reload Без --permanent правило живёт до перезагрузки демона — удобно для теста, опасно для продакшена, если забыл добавить постоянно. Rich rules — точечные исключения, которых нет в сервисах: ...

September 15, 2026 · llexa

MikroTik RouterOS: SSH auth bypass, эксплуатируется массово

11 сентября MikroTik закрыл эксплуатируемую уязвимость в RouterOS (MikroTrick, найдена CERT.pl) — обход SSH-аутентификации по публичному ключу. RouterOS не полностью сверял RSA-модуль ключа: зная имя пользователя и публичный модуль его ключа, атакующий подбирал другой ключ, который роутер принимал без приватной части. CVE-2026-67276 (CVSS 9.2) — обход SSH-аутентификации CVE-2026-67277 (CVSS 8.8) — утечка памяти ядра и DoS через bandwidth-test На 05.09 под атакой — 122 500 роутеров со SSH в интернет. Признак компрометации — SSH-пользователь с логином -2. ...

September 15, 2026 · llexa

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 — навсегда). ...

September 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. ...

September 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. ...

August 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. ...

July 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 не нужен и обрывает соединения. ...

July 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 раз в квартал стоит гонять руками — чтобы не узнать о сломанном автопродлении в момент истечения сертификата. ...

July 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 Если получателя нет и нужен просто пароль — симметричный режим без ключей вообще: ...

July 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 на промежуточном хосте получит доступ к сокету. ...

July 21, 2026 · llexa