
Архитектура проходного двора
В прошлом коротком посте я писал, как психанул и неделю жил в режиме «НЕТ». Эффект был неожиданный: прод не упал, а я впервые выжил. Но эксперимент — это одно. А продакшен-решение — другое.
Я сел анализировать, почему вообще этот эксперимент понадобился. И понял: я годами жил с архитектурой Default Allow.
В InfoSec это считается дичью. Представьте админа, который открыл все порты, отключил фаервол и пускает любой пакет, если у того в хедере написано «Ну пожалуйста». Этот сервер ляжет за 5 минут. Но именно так мы строим коммуникацию.
Коллега просит «глянуть» (контекстное переключение)? —
ACCEPT.Заказчик пишет в личку в 22:00? —
ACCEPT.Родственники просят починить утюг в выходной? —
ACCEPT.
Мы боимся отказать, потому что у нас нет протокола отказа. Мы считаем, что «Да» — это норма, а «Нет» — это конфликт. В итоге: мой Uptime падает, Latency растет, а я обслуживаю чужой трафик.
Я решил переписать свой iptables и внедрить политику Default Deny на уровне личности. Вот моя документация.
ШАГ 1: Анализ трафика (Access Logs)
Прежде чем блокировать, надо понять, кто нас DDoS-ит. Я поднял логи (историю чатов и календаря) за месяц. Весь мусорный трафик делится на 3 класса:
«Паразитная нагрузка»: Запросы, которые можно делегировать или вообще не делать. («Пришли отчет, который никто не читает»).
«Асинхронный ад»: Люди, которые не умеют в текст и шлют войсы, или звонят без предупреждения. Это блокирует мой I/O поток.
«Эмоциональный пинг»: Коллеги, которые приходят не за решением, а чтобы слить тревогу. («Ой, всё пропало, мы не успеем»). Они жрут CPU, не принося полезной нагрузки.
ШАГ 2: Конфигурация (Ruleset)
Я написал для себя жесткий конфиг. Это не «личные границы» (психологический термин, который никто не понимает). Это SLA (Service Level Agreement).
Я опубликовал его для команды. Выглядит примерно так (псевдокод):
YAML
# HUMAN_FIREWALL_CONFIG.yaml
policy: DEFAULT_DENY
rules:
- id: jira_ticket_required
match: "Task request without link"
action: DROP
response: "400 Bad Request. Нет тикета — нет задачи. Заведи, пожалуйста."
- id: no_voice_messages
match: "Audio content"
action: REJECT
response: "415 Unsupported Media Type. Я не слушаю войсы. Пиши текстом."
- id: deep_work_window
time: "10:00 - 14:00"
action: DO_NOT_DISTURB
exception: "Critical Production Incident"
ШАГ 3: Реализация ответов (HTTP Response Codes)
Самое сложное — внедрить это в живое общение. Сказать «Нет» страшно. Но я нашел хак. Я перестал оправдываться («извини, не могу, у меня кошка рожает») и начал выдавать стандартизированные коды ошибок.
Когда ты отвечаешь как система — четко, нейтрально и предсказуемо — люди не обижаются. Они адаптируются.
Сценарий 1: «Срочно глянь!»
Вместо того чтобы бросать всё и смотреть, я выдаю 503 Service Unavailable.
«Сейчас я занят архитектурой. Вернусь к входящим в 16:00. Если это блокирует релиз — пиши техлиду».
Сценарий 2: Нытье в курилке
Вместо того чтобы включаться и успокаивать, я выдаю 204 No Content. Я просто молчу и киваю. Я не выделяю ресурсы на обработку этого скрипта. Человек видит, что сервер не отвечает, и уходит к другому.
Сценарий 3: Манипуляция («Ты же профессионал, сделай овертайм»)
Это попытка SQL-инъекции в моё чувство вины. Ответ: 403 Forbidden.
«Я не работаю по выходным. Это правило. Можем обсудить в понедельник в 10:00».
Результаты патча
Прошло почти две недели.
Нагрузка на CPU упала на 40%. Я перестал греть воздух.
Окружение обучилось. Нейросетка коллег поняла: «Сюда с мусором нельзя, тут стоит WAF (Web Application Firewall)». Трафик стал чище.
Уважение. Надежный сервер, который работает по правилам, ценят больше, чем глючный, который пытается угодить всем и падает.
Вывод
Ваша безотказность — это уязвимость. Если у вас нет документации к вашему API, пользователи (коллеги, родные) будут тыкаться в вас рандомными запросами, пока не сломают.
Напишите свой конфиг. Опубликуйте его. И держите порт 80 закрытым для всех, кто не прошел авторизацию.
P.S. Если тема инженерного подхода к себе («Личный DevOps») заходит — я собрал свои наработки в PDF-гайд «System Diagnostics». Там есть чек-лист по поиску утечек памяти и базовые настройки «Фаервола». Без маркетинга, чисто мануал. Лежит в моем ТГ-канале (ссылка в профиле).
Комментарии (16)

vitaly_il1
04.12.2025 16:40Прекрасно, спасибо за пост!
Для продвинутых можно продолжить, углубляясь в применение REJECT и DROP.
Systems_Engineer Автор
04.12.2025 16:40Спасибо! Тема действительно глубокая.
В моей конфигурации:
REJECT- для адекватных коллег. Я возвращаю имRST-пакет, чтобы не держать соединение открытым и не тратить их время на ожидание. Это честно и сохраняет отношения.DROP- крайняя мера для токсичного трафика и спама (нытье, манипуляции). Там я просто не отправляю подтверждение получения (ACK). Пусть висят вSYN_SENT, пока не отвалятся по таймауту :)

gebwopycj4
04.12.2025 16:40я годами жил с архитектурой Default Allow.
В InfoSec это считается дичью.смотря где.
по дефолту все DNS запросы для внутренних клиентов (привет адептам zero trust) разрешены, и рекурсивные запросы тоже.
по дефолту на проксях все сайты для внутренних клиентов обычно разрешены, если не внедрять белый список, как это сейчас делает РКН.
Представьте админа, который
пересадил на 127.0.0.1 все сервисы, которым не нужен доступ из Интернета,
и зафиксировал их набор.открыл все порты, отключил фаервол и пускает любой пакет,
при условии см выше это допустимо и даже местами полезно.
любой фаерволл снижает призводительность сети и увеличивает задержку.
ASGAlex
04.12.2025 16:40Ну 127.0.0.1 это в данном случае уже где-то внутри черепной коробки. Там уже и сеть другая, и фаерволы местами времён первобытных ящеров...

Systems_Engineer Автор
04.12.2025 16:40Согласен! Если пересадить всех токсичных коллег на
127.0.0.1(пусть варятся в собственном соку) и закрыть доступ извне - это было бы идеально :)Но, к сожалению, мы вынуждены торчать наружу публичными интерфейсами. И если там не настроен
iptables, то любой сканер портов быстро найдет уязвимость и пролезет внутрь.

elobachev
04.12.2025 16:40"Нет" говорить конечно нужно. Порою даже необходимо. Но вот прикидываться машиной - это такая монетка с двумя сторонами. Как правило людям нравится, когда к ним относятся как к людям. А сервер - его же можно просто выключить или заменить.

Systems_Engineer Автор
04.12.2025 16:40Очень верное замечание. Но тут парадокс: когда я пытался быть „человечным“ со всеми 24/7, к вечеру я ненавидел людей. Мой человеческий ресурс выгорал полностью.
Режим „Сервера“ (четкие протоколы) я включаю на внешнем периметре (для коллег, заказчиков), чтобы сохранить живую эмпатию для ближнего круга (семьи, друзей).
По мне так лучше быть надежным сервером на работе и живым человеком дома, чем „удобным“, но выгоревшим зомби везде.

igrblkv
04.12.2025 16:40415 Unsupported Media Type. Я не слушаю войсы. Пиши текстом.Что мешает добавить бот, переводящий в текст?

Systems_Engineer Автор
04.12.2025 16:40Технически - ничего не мешает. Но архитектурно это
bad practice. Когда человек шлет войс по рабочему вопросу, он перекладывает нагрузку (структурирование мысли) со своего процессора на мой. Мой стандарт текст. Не потому, что я не могу послушать, а потому что текст = структура. Если мысли нельзя уложить в текст, значит, задача еще не готова к деплою.
select26
04.12.2025 16:40Я тоже так считаю: если собеседник не считает возможным выделить время на формулирование вопроса, то зачем я буду тратить на него время?
Из практики: чаще всего такие сообщения и не несут никакой смысловой нагрузки. Поэтому в принципе не слушаю голосовые сообщения. Если уж так нужно - позвони голосом и обсудим.

kWatt
04.12.2025 16:40Как только слышу iptables, вспоминаю эту статью.

Systems_Engineer Автор
04.12.2025 16:40О да. Главное правило
iptables: не забудь разрешить SSH перед тем, как применитьDROP ALL.В жизни так же: строя личные границы, важно случайно не забанить доступ для самых близких (жены/детей), иначе придется искать "физический доступ к консоли" для восстановления, а это больно :)

skovpen
А зачем в 2025 году iptables, если есть nftables?
Systems_Engineer Автор
Справедливо. Но вы же знаете правило „работает - не трогай“. Моя нервная система - суровый легаси-монолит на ядре 2.6. Боюсь, если начну миграцию на
nftablesпрямо на проде, у меня драйверы эмпатии отвалятся окончательно :) Пока сижу на проверенном стеке