Jump-хосты: как ходить туда, куда «не пускают»
Половина моих машин недоступна из интернета напрямую — и это осознанный выбор. Фаервол пропускает только трамплин, трамплин пропускает только меня. Но сама идея «прямого доступа» как удобного дефолта долго жила у меня в голове, пока я не посчитал, сколько раз джамп меня спасал.
Три маршрута до одного хоста
Минимальное правило выживания: у каждого «запертого» хоста должно быть минимум два независимых пути. Один основной (трамплин A), один запасной (трамплин B, физически в другой сети). Трамплины не должны жить в одной подсети, иметь один аплинк или одного провайдера — иначе «независимость» заканчивается на первом порыве.
В ssh-конфиге это выглядит скучно и надёжно:
Host target
HostName 10.0.0.5
ProxyJump jump-a
Host target-b
HostName 10.0.0.5
ProxyJump jump-b
Почему «прямой доступ» — антипаттерн
Всякий раз, когда я ради удобства открывал порты наружу, через месяц там оказывался новый ботнет, а я писал правила fail2ban. Закрытые хосты не создают логов вторжений — потому что им нечего логировать. Это и есть метрика хорошей сетевой гигиены: пустой лог INPUT.
Побочный бонус: на трамплине живёт единственный known_hosts, и изменённые отпечатки хостов ты замечаешь сразу, а не в момент аварии.