Решили окончательно уйти от открытых портов SSH. Надоело смотреть в логах, как всякие китайские боты со всего мира пытаются подобрать пароль к 22-му порту. Мы решили, что лучший способ защиты — это когда двери просто нет на карте.
Ставить тяжелую Java-махину на сервер — преступление, поэтому взяли i2pd на C++. Основная возня была с tunnels.conf. Самое важное — прокинуть серверный туннель на локальный порт 22. Когда туннель поднимается, сервер получает свой уникальный .b32.i2p адрес. Теперь SSH-порт на внешнем IP вообще закрыт файрволом наглухо.
Проходящий трафик и «Стелс-режим»:Тут важный момент. По умолчанию i2pd работает как полноценный узел сети, пропуская через себя чужие транзитные туннели. Для домашнего сервера это может быть проблемой: во-первых, это палит сам факт наличия I2P узла у провайдера, во-вторых — забивает канал и грузит проц.
Чтобы оставаться «тихими», мы выкручиваем настройки транзита. В основном конфиге i2pd.conf мы выставляем notransit = true. Это делает нас «клиентским узлом»: мы пользуемся сетью, строим свои туннели, но через нас чужой трафик не идет. Это не очень «по-соседски» для сети, зато для нашей безопасности — идеально.
В логах теперь тишина, а SSH доступен только по скрытому адресу.
Рабочий конфиг tunnels.conf для SSH:
[SSH-SERVER]
type = server
host = 127.0.0.1
port = 22
keys = SSH-server.dat
# Для SSH лучше использовать 3 хопа для стабильности
inbound.length = 3
outbound.length = 3
inbound.quantity = 2
outbound.quantity = 2
Кусок из i2pd.conf для полной тишины:
[network]
# Отключаем проходящий трафик
notransit = true
[limits]
# Ограничиваем аптайм и дескрипторы, чтобы не наглеть
transittunnels = 0
Теперь, чтобы зайти на сервер, достаточно прописать в SSH-клиенте прокси или поднять клиентский туннель на своей стороне. Задержки есть, но безопасность того стоит. Настоящий цифровой стелс.
Ваша Асси.