The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Защищаем SSH при помощи технологии "Port Knocking"
Реализация идеи динамического открытия доступа к 22 порту, при предварительном
обращении telnet-ом на определенный сетевой порт (в примере 333 - открыть
доступ и 334 - закрыть). Идея реализована средствами iptables, без привлечения
дополнительных утилит и анализаторов логов.

   # Создаю цепочку с именем SSH
   iptables -N SSH
   # Правило по умолчанию в INPUT - DROP
   iptables -P INPUT DROP 
   # Всё что пришло на 22 порт - в цепочку SSH
   iptables -A INPUT -p tcp --dport 22 -j SSH 
   # Всё что пришло на 333 порт - в цепочку SSH
   iptables -A INPUT -p tcp --dport 333 -j SSH 
   # Всё что пришло на 334 порт - в цепочку SSH
   iptables -A INPUT -p tcp --dport 334 -j SSH 

Разделения на цепочки сделано для своего удобства, от этого можно и отказаться. 

Теперь заполняем цепочку SSH.

   # Проверяем на наличие имени "SSH" у IP адреса устанавливающего соединение на 22 порт. 
   # И если оно присутствует - то ACCEPT
   iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 22 -m recent --rcheck --name SSH --rsource -j ACCEPT

   # Устанавливает имя SSH любому IP адресу с которого пришло новое TCP соединение на указанный порт. (порт 333)
   iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 333 -m recent --set --name SSH --rsource -j DROP

   # Удаляет имя "SSH" с IP адреса установившего соединение на этот порт. (порт 334)
   iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 334 -m recent --remove --name SSH --rsource -j DROP

Насладимся итоговым результатом: 

Делаем: 
   telnet ip_address_or_domain_name 333
После чего спокойно подключаемся по SSH.

Когда прекращаем работу закрываем за собой 22 порт:
   telnet ip_address_or_domain_name 334
 
19.01.2010 , Автор: Дмитрий , Источник: http://main-server.blogspot.com/200... (доп. ссылка 1)
Ключи: ssh, security, iptables, limit, port / Лицензия: CC-BY
Раздел:    Корень / Безопасность / SSH

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, pavlinux, 15:27, 19/01/2010 [ответить] [смотреть все]
  • +/
    Допиши самое главное - port < open_port < close_port
    Хотя не... от обратного сканирования не спасёт.

    Лучше так:

    close_port
    port
    close_port
    open_port

    т. е.  при линейном сканировании слева или справа, наш порт всегда будет закрыт.

    порт закрытия, на 10011 порт
    ssh  на 10022
    порт закрытия на 10033
    открыть на любой

    И ещё бы таймаут на ожидание соединения, между telnet host.org open_port  и ssh host.org

     
     
  • 2.3, Аноним, 17:38, 19/01/2010 [^] [ответить] [смотреть все]
  • +/
    А если будут сканировать во время активной сессии ssh?....
     
     
  • 3.5, Дмитрий, 18:08, 19/01/2010 [^] [ответить] [смотреть все]
  • +/
    Там запоминается IP, если я сижу с IP 1.1.1.1 а скан идёт с 2.2.2.2 то 2.2.2.2 просто откроет/закроет себе порт.

    Кстати: Безопасность - это комплексное решение (С)Мой друг.

    Port-knoking не панацея, но избавиться от ботовбрутфорсеров реально помогает. А за iptables находится ssh там где авторизация по ключам и т.д.
    Анализ логов, также никто не отменял, и если в логах обнаружится брутфорс, то как минимум можно сменить порты.


    P.S>
    Не считайте, что эта технология на 100% защищает Ваш порт от стороннего проникновения.

     
     
  • 4.8, splat_pack, 17:57, 21/01/2010 [^] [ответить] [смотреть все]
  • +/
    параноик?
     
  • 1.2, Дмитрий, 16:35, 19/01/2010 [ответить] [смотреть все]
  • +/
    Прикольно, это мой блог :) я там всякую фигню пишу... :):):)

    Ну раз тут есть, то скажу ещё пару слов :)
    Во первых, идея не совсем моя, я её чуть чуть переделал. В блоге авторство указано.

    Считывая файл cat /proc/net/ipt_recent/SSH (SSH в данном случае - имя цепочки) можно просматривать кто имеет доступ, или не закрыл его за собой. Естественно вся информация до перезагрузки.

     
     
  • 2.4, Andrey Mitrofanov, 17:54, 19/01/2010 [^] [ответить] [смотреть все]  
  • +/
    >Прикольно, это мой блог :) я там всякую фигню пишу... :):):)

    А-га, вот ещё один блоггер:
    http://roland.entierement.nu/blog/2008/08/19/netfilter-based-port-knocking.ht

    Порт-нокер _без_ демона или сканирования логов -- средствами "того самого" -m recent.

     
  • 2.7, reminux, 16:44, 21/01/2010 [^] [ответить] [смотреть все]  
  • +/
    Спасибо за идею Изначально почерпнул ее из твоего блога, потом сходил на сайт р... весь текст скрыт [показать]
     
     
  • 3.9, pavlinux, 01:15, 22/01/2010 [^] [ответить] [смотреть все]  
  • +/
    Я придумал круче bin bush name local l 1 l ... весь текст скрыт [показать]
     
     
  • 4.10, reminux, 13:14, 23/01/2010 [^] [ответить] [смотреть все]  
  • +/
    >> минус всего этого дела в том, что не изо всяких мест
    >> могут быть доступны порты 3333/tcp и 64444/tcp.
    >
    >например?

    существует масса сетей (от сетей мелких районных провайдеров до корпоративных сетей), в которых наружу закрыто все, кроме нескольких самых популярных портов вроде 80/tcp, 110/tcp, 5190/tcp и некоторых других. из таких мест в свою хитрую дверь не попадешь.

     
  • 1.11, Michael Shigorin, 15:34, 24/01/2010 [ответить] [смотреть все]  
  • +/
    Занятно, но если не бояться насчёт возможности установления фактов соединений с секретными портами -- то заметно проще, заодно эффективней от сканов отодвинуть ssh на левый порт.  А если бояться, то лучше даже не port knocking в классическом виде (например, http://zeroflux.org/knock умеет и последовательности tcp/udp-портов), а реализации SPA (single packet auth -- авторизация по одному криптопакету).
     
  • 1.12, enchant, 13:38, 28/01/2010 [ответить] [смотреть все]  
  • +/
    Более подробная и расширенная информация есть здесь - http://wiki.enchtex.info/howto/iptables/ssh-guard
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor