nftables с нуля #2: NAT — masquerade и port forwarding

Прошлый выпуск серии закрыл базовые table/chain/rule и default drop. NAT — отдельные chain с hook prerouting (для DNAT, до маршрутизации) и postrouting (для SNAT/masquerade, после): table ip nat { chain postrouting { type nat hook postrouting priority 100; oif "eth0" masquerade } chain prerouting { type nat hook prerouting priority -100; tcp dport 8080 dnat to 192.168.1.10:80 } } masquerade — SNAT с автоопределением текущего IP интерфейса, удобен при динамическом внешнем адресе (в отличие от snat to <ip> с фиксированным). dnat to ip:port пробрасывает внешний порт на внутренний хост — тот же принцип, что iptables -t nat -A PREROUTING -j DNAT, только nftables держит NAT как обычную table с полем type nat. ...

September 10, 2026 · llexa

DBA на минималках #8: VACUUM FULL и pg_repack

Обычный autovacuum помечает мёртвые строки как свободное место, но не возвращает его файловой системе — таблица физически не уменьшается. VACUUM FULL пересобирает таблицу с нуля и реально сжимает файл на диске, но берёт ACCESS EXCLUSIVE lock на всё время работы — для большой таблицы это часы простоя. pg_repack (расширение + CLI) делает то же без долгой блокировки: создаёт копию таблицы, применяет накопленные за время копирования изменения через триггер, и подменяет таблицу коротким ACCESS EXCLUSIVE только на финальный swap — секунды, а не часы. ...

September 9, 2026 · llexa

Habr Article Downloader: статьи в Markdown, без нагрузки на сервер

Habr Article Downloader сохраняет статьи Хабра в Markdown для офлайн-чтения — с YAML-заголовком (рейтинг, хабы, теги, автор, дата) и HTML→Markdown через Turndown. Четыре режима: одна статья, пакет ссылок, слежение за лентой, фильтры по критериям. Интереснее не сама выгрузка, а как расширение не кладёт чужой сервер: пауза 1.5 секунды между запросами (rate limiting), а поверх — circuit breaker: получив HTTP 429, инструмент не повторяет запрос сразу, а останавливается на 3 минуты целиком, вместо того чтобы долбить сервер той же паузой дальше. ...

September 9, 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

iostat и sar: диск и CPU за интервал, не мгновенный снимок

top/vmstat без параметров показывают текущий момент — iostat и sar (пакет sysstat) считают статистику за интервал и показывают тренд: iostat -x 2 5 — расширенный вывод каждые 2 секунды, 5 раз, с %util (загрузка диска) и await (время ожидания I/O). sar идёт дальше — если sysstat настроен таймером (сбор каждые 10 минут), он копит историю в /var/log/sa/, и sar -u -f /var/log/sa/sa15 покажет загрузку CPU за 15-е число без настройки мониторинга заранее — спасает при разборе уже закончившегося инцидента. ...

September 8, 2026 · llexa

Proxmox #9: встроенный firewall — datacenter, host и VM

Firewall в Proxmox VE не отдельный демон — надстройка над iptables/nftables хоста с тремя уровнями: Datacenter (общие правила для всего кластера), Host (конкретный узел) и VM/CT (конкретная виртуалка). Правила нижнего уровня наследуют верхние, но могут их сузить. Security groups — именованные наборы правил на несколько VM сразу: удобно для одинаковых веб-серверов без дублирования. Alias — имя вместо IP/подсети, чтобы не переписывать адреса при их смене. Включается на каждом уровне отдельным чекбоксом Firewall: Enabled — по умолчанию выключен даже после настройки правил, забытый чекбокс на уровне VM самая частая причина «правила есть, а не работают». Конфиг хранится в /etc/pve/firewall/ и /etc/pve/nodes/<node>/host.fw, синхронизируется через pmxcfs. ...

September 7, 2026 · llexa

Архиваторы #7: squashfs — сжатый read-only образ ФС

В отличие от zstd/xz/lz4 из прошлых выпусков, squashfs — не формат архива, а сжатая файловая система: mksquashfs dir/ image.squashfs -comp zstd собирает целое дерево файлов в один read-only образ, который монтируется напрямую (mount -t squashfs image.squashfs /mnt) без распаковки. Именно так устроены live-образы дистрибутивов и слои Docker/OverlayFS — сжатие в разы экономит место, а доступ на чтение почти не отличается от обычной ФС благодаря постраничному разжатию на лету. unsquashfs -l image.squashfs покажет список файлов без монтирования, -d dir распакует всё целиком, если нужен полный доступ на запись. ...

September 7, 2026 · llexa

IT-мем: 2038 — второй Y2K уже назначен

32-битный time_t считает секунды с 1 января 1970 — и переполнится 19 января 2038 года в 03:14:07 UTC, уйдя в отрицательные числа. Для систем, которые всё ещё хранят время как signed 32-bit int, это будет означать резкий прыжок в 1901 год. Большинство современных дистрибутивов давно перешли на 64-битный time_t (glibc 2.34+, ядро с поддержкой 64-bit time), но встроенные системы, старые файловые форматы с 32-битными timestamp и legacy-софт с захардкоженным int32 под датой — не переживут переход тихо. ...

September 6, 2026 · llexa

Будь добрее #11 - Колыбельная на двоих

На прошлой неделе в прокат вышла комедия «На деревню дедушке 2» — и сразу заняла первую строчку по сборам среди российских фильмов: 101 млн рублей за дебютный уик-энд. Но разошёлся не трейлер, а отдельный двухминутный фрагмент — Юрий Стоянов и Фёдор Добронравов вдвоём, без спецэффектов и постановочного пафоса, поют колыбельную под гитару. Простая тёплая сцена посреди коммерческого проката — ровно то, ради чего иногда стоит досмотреть титры. #будьдобрее ...

September 6, 2026 · llexa

dasha: дашборд здоровья кластера PostgreSQL

Обычно здоровье кластера PostgreSQL собирают вручную из pg_stat_statements, pg_stat_activity и логов VACUUM. dasha (github.com/dbulashev/dasha) сводит это в один веб-дашборд: медленные запросы, неэффективные индексы, блокировки, размер таблиц и прогресс VACUUM — с итоговым Health Score по формуле с весами. cd deploy/compose docker compose up -d # веб-интерфейс: http://localhost:3000 Бэкенд на Go 1.26, фронт на Vue 3.5, поддерживает PostgreSQL 14-18, аутентификацию через OIDC и RBAC, снимки состояния кластера для истории. Есть MCP-коннектор — можно подключить ИИ-ассистента прямо к метрикам кластера, и интеграция с Yandex Cloud для поиска по логам. ...

September 5, 2026 · llexa