Как сделать стандартный ssh порт стелс-портом?
Я использую персональный сервер SSH на нестандартном порту. Если кто-то пытается войти в мой ssh-сервер через стандартный порт 22, кажется, что сервер отправляет сообщение "Соединение отказано".
$ ssh localhost
ssh: connect to host localhost port 22: Connection refused
Как я могу сделать так, чтобы он не отправлял такое сообщение и вел себя так, будто не работает?
5 ответов
Сервер ничего не отправляет, клиент говорит вам, что сервер отказал в соединении. Это ожидаемое поведение, если порт TCP закрыт при попытке подключения.
Если вы хотите, чтобы ваша система молча отбрасывала пакеты без отправки TCP-ответа "этот порт закрыт" (так называемый скрытый порт), вам необходимо использовать межсетевой экран в системе и / или между ней и клиентом.
Вы уже сделали это - ответ об отказе в соединении посылается операционной системой, когда делается попытка подключиться к порту, который ничего не слушает.
Сетевой стек сервера отправляет пакеты в ответ на попытку TCP-соединения клиента.
Когда клиентская программа отправляет пакет TCP SYN для запроса соединения, ответный пакет с установленными флагами ACK и RST, согласно проверке перехваченных пакетов, классифицируется как ошибка отклонения соединения. Ни один сервис не прослушивает порт, и порт закрыт.
- если вам нужен "скрытый" порт, я предлагаю ничего не делать, так как это ожидаемое поведение закрытого порта без обслуживания.
- если вы будете отбрасывать пакеты на этот порт, у вас будет "фильтрованный" порт при сканировании nmap, заставляющий злоумышленника думать, что служба прослушивает, а брандмауэр отказывает в доступе к нему
Более того, DROP не является "вежливой целью", поскольку делает сеть неясной для клиентов. DROP следует использовать с осторожностью.
если вы действительно хотите, чтобы порт был хорошим врагом, вы можете быть заинтересованы в модуле tarpit iptables
если вы хотите дезориентировать злоумышленника, вы можете присоединиться к цели REJECT и поиграть с экзотической комбинацией кодов ошибок ICMP и --reject-type:
БРАК
--reject-with type
Тип данных может быть
ICMP-нетто-недостижим
ICMP-хост-недостижим
ICMP-порт-недостижим
ICMP-прото-недостижим
ICMP-сетчатой запрещено
ICMP-хост-запрещено или
ICMP-админ-запрещено
Скорее всего, вы видите реакцию вашего клиента на недоступный порт ICMP, отправленный сервером после получения первого TCP-SYN-пакета для порта, который не принимает соединения. Это правильное поведение и позволяет клиенту быстро сказать вам об этом.
Если вы на самом деле имеете в виду скрытность, например, "этот хост не существует, не работает или отключен и вообще ничего не отправляет", настройте брандмауэр так, чтобы он отбрасывал (а не отклонял) любые пакеты на этот порт. Предполагая netfilter / iptables:
iptables -I INPUT -p tcp --dport 22 -j DROP
Это приводит к зависанию клиента на некоторое время, так как он не может решить, является ли ответ транзитным или несуществующим.
Примечание: это фактически уничтожит все соединения, включая работающие. Молли, переключи предупреждение!
Вы можете полностью скрыть свой ssh
порт с fwknop
в сочетании с установкой политики запрета по умолчанию в iptables
молча отбрасывать пакеты. Все nmap
увидим, являются общественные услуги.
С развернутым fwknop любой, кто использует nmap для поиска SSHD, не может даже сказать, что он слушает - не имеет значения, хотят ли они запустить взломщик паролей против SSHD или даже если у них есть 0-дневный эксплойт.
Смотрите мое руководство для fwknop и сопровождающих страниц для безопасного ssh
шифры.