Port knocking

Защита информации, сетевая безопасность, уязвимости

Модератор: Rostov114

Port knocking

Сообщение staskur » 03 мар 2009, 23:43

отсутствие объекта нападения как лучшая защита.....


понадобилось мне тут дать коллеге доступ по ssh к одному из серверов.

Код: Выделить всёРазвернуть
host# uname -a
FreeBSD host.mydomain.ru 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Tue Jan 13 16:30:18 MSK 2009
root@host.mydomain.ru:/usr/obj/usr/src/sys/m_kernell.2009-01-13  i386


казалось бы все просто - заводи юзера и пусть ковыряется...
но простой путь обычно упрощает жизнь не только юзерам, но и "врагам"

изначально доступ разрешен только определенным юзерам, подключающимся со строго определенных адресов.
Но у "новичка" был динамический адрес и простое решение разрешить в файерволле
диапазон IP адресов мне не показалось разумным, но тем не менее, задав пароль подлиннее,
на первые пару дней так и сделал.

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

наморщенный мозг выдал навскидку несколько вариантов решения
- смена порта (по умолчанию 22), но это в общем то ничего не меняет, т.к. сканеры давно уже
не останавливаются только на нем.
- городить аутентификацию по DSA ключу тем более не хотелось.

в идеале хотелось иметь открытый порт 22 для подключения только тогда когда это нужно,
а в остальное время пусть его вообще не будет (о как завернул... :) )

поскольку, как известно, "все уже украдено до нас" ((с) операция Ы) , то ковыряние в портах навело на

Код: Выделить всёРазвернуть
Port:   knock-0.5.20051124_1
Path:   /usr/ports/security/knock
Info:   A flexible port-knocking server and client
Maint:  shaun@FreeBSD.org
B-deps:
R-deps:
WWW:    http://www.zeroflux.org/cgi-bin/cvstrac/knock/wiki/


что это за зверь ? это серверная и клиентская часть для реализации технологии port knocking

вкратце, применительно к задаче защиты порта ssh , делается это так -
изначально защищаемый порт ssh вообще закрыт в файерволле
и открывается только после того как мы "постучимся" на сервер по строго опреденным портам
и в определенной последовательности, да еще и определенного протокола (tcp или udp)

на сервере должна работать соответсвенно серверная часть и слушать по каким портам стучится юзер,
когда он "постучится" в правильном порядке, то "вдруг" :wink: появляется открытый порт 22 и далее коннект
к нему как обычно.

следуя freebsd-way ставим , естественно, только из портов, предварительно их обновив.

Код: Выделить всёРазвернуть
host# cd /usr/ports/security/knock
host# make config


вылезет окно, в котором всего лишь две опции , первая - SERVER, а вторая - CLIENT.
поскольку подключаться собираемся к этой машине, то выбираем только SERVER
и жмем OK

затем собираем и устанавливаем эту самую серверную часть (knockd)
Код: Выделить всёРазвернуть
host# make install clean && rehash


в /usr/local/etc/ у нас появится файл примера конфигурации knockd.conf.sample
копируем его
Код: Выделить всёРазвернуть
host# cd /usr/local/etc/
host# cp knockd.conf.sample knockd.conf


теперь открываем в редакторе какой вам больше нравится (лично мне ee и mcedit )
Код: Выделить всёРазвернуть
[options]
   # Имя и путь к лог файлу
        logfile = /var/log/knockd.log
        # какой интерфейс слушаем
   interface = rl0
# описываем действия для открытия порта 22
[openSSH]
   # последовательность портов tcp на которые нужно "постучаться" для открытия ssh
        sequence    = 7007,8008,9009
   # Таймаут соединения с портами
        seq_timeout = 5
        # команда, выполняемая при удачном "простукивании"
   command     = /sbin/ipfw -q add 50 allow tcp from  %IP% to me 22 keep-state
        tcpflags    = syn
# описываем действия для закрытия порта 22
[closeSSH]
   # последовательность портов tcp на которые нужно "постучаться" для закрытия ssh
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /sbin/ipfw -q delete 50
        tcpflags    = syn


как видим действия до безобразия просты - при "простукивании" портов 7007,8008,9009
в файерволл добавляется правило, разрешающее подключение к порту 22.
И более того !!! разрешающее подключаться только с вашего IP адреса.

ну а когда работа закончена . то после отключеня от сервера стучимся по портам 9000,8000,7000 и
правило из файерволла удаляется и только что доступный порт 22 пропадает :oops: ...

обеспечиваем запуск демона
добавляем в /etc/rc.conf строчку
Код: Выделить всёРазвернуть
knockd_enable="YES" 

и запускаем демон
Код: Выделить всёРазвернуть
host# cd /usr/local/etc/rc.d/
host# ./knockd.sh start
Starting knockd.


проверяем его работу
Код: Выделить всёРазвернуть
host# ps ax | grep knockd
25067  ??  Ss     0:01,01 /usr/local/bin/knockd -d
26097  p1  DL+    0:00,01 grep knockd


все жужжуит ....


на этом настройка серверной части закончена и осталось определиться с клиентской.
поскольку большинство тут, думаю, сидит под форточками, то и пример для них...

можно использовать два варианта - knock-cygwin.zip или winknock.rar

конфиг там очень простой и содержит лишь адрес сервера (или доменное имя) и
список портов по которым нужно постучаться

теперь перед подключением к порту 22 сначала простукиваем заданные порты одной
из вышеуказаных программок, а после отключения от 22 , аналогичным простукиванием - закрываем его совсем.

результат работы всего этого безобразия в /var/log/knockd.log выглядит так
Код: Выделить всёРазвернуть
[2009-03-03 19:51] 88.147.222.22: openSSH: Stage 1
[2009-03-03 19:51] 88.147.222.22: openSSH: Stage 2
[2009-03-03 19:51] 88.147.222.22: openSSH: Stage 3
[2009-03-03 19:51] 88.147.222.22: openSSH: OPEN SESAME
[2009-03-03 19:51] openSSH: running command: /sbin/ipfw -q add 50 allow tcp from  88.147.222.22 to me 22 keep-state

[2009-03-03 20:51] 88.147.222.22: closeSSH: Stage 1
[2009-03-03 20:51] 88.147.222.22: closeSSH: Stage 2
[2009-03-03 20:51] 88.147.222.22: closeSSH: Stage 3
[2009-03-03 20:51] 88.147.222.22: closeSSH: OPEN SESAME
[2009-03-03 20:51] closeSSH: running command: /sbin/ipfw -q delete 50

в случае если порты перебираются неверно то примерно такая запись,
т.е. до исполнения каких либо команд дело не доходит
Код: Выделить всёРазвернуть
[2009-03-03 21:59] 88.147.222.22: openSSH: Stage 1
[2009-03-03 21:59] 88.147.222.22: openSSH: Stage 2


вот собственно и все... всевозможные доморощенные хакеры посланы далеко и надолго,
причем даже не догадываются об этом...

согласитесь, очень сложно что либо взламывать, особенно когда нечего....
(порта то открытого нет вообще)

p.s. конфиг knockd самый простой, дабы не усложнять восприятие...
почему ipfw ? да нравится он мне.. да простят меня поклонники pf, но больной синтаксис явно не преимущество...
ip - случайный...
Лучше установить FreeBSD, чем потратить 20 лет на Linux'ы и выяснить какой из них хуже.
staskur
Участник
 
Сообщения: 45
Зарегистрирован: 28 фев 2009, 03:54
Откуда: Саратов - заводской
Домен: zavodhub.vfose.ru

Re: Port knocking

Сообщение zk » 03 мар 2009, 23:47

Безопасность это конечно хорошо, но сходить с ума мне кажется лишним.
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: Port knocking

Сообщение Костик » 04 мар 2009, 01:19

а ipfw работает со стандартным ядром?

а на счет паранои безопасности )) ну если подбирают пароль то лучше защититься на всякий пожарный :)

сделаю типа такого )
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: Port knocking

Сообщение zk » 04 мар 2009, 02:35

а ipfw работает со стандартным ядром?

O_o
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: Port knocking

Сообщение Костик » 04 мар 2009, 02:49

zk писал(а):
а ipfw работает со стандартным ядром?

O_o


ну я имею ядро при стандартной установке, вроде для фаервола его нужно пересобирать :)

или ошибаюсь?
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: Port knocking

Сообщение zk » 04 мар 2009, 04:13

А что кто-то юзает ядро без файрвола?

Я конечно могу предположить варианты когда он не нужен, но в реальной жизни они не встречаются.
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: Port knocking

Сообщение staskur » 04 мар 2009, 06:51

Если форвардинг использовать не будете, то можно не пересобирать...
грузите его (файерволл) модулем и все...
Лучше установить FreeBSD, чем потратить 20 лет на Linux'ы и выяснить какой из них хуже.
staskur
Участник
 
Сообщения: 45
Зарегистрирован: 28 фев 2009, 03:54
Откуда: Саратов - заводской
Домен: zavodhub.vfose.ru

Re: Port knocking

Сообщение NowhereMan » 04 мар 2009, 13:30

От подбора пароля прекрасно спасает denyhosts.
Аватара пользователя
NowhereMan
Активный участник
 
Сообщения: 73
Зарегистрирован: 12 апр 2008, 00:29
Домен: linuxdoc.vfose.ru

Re: Port knocking

Сообщение server801 » 04 мар 2009, 19:37

отлично работает (проверенно на личном опыте) порт sshguard.3 попытки неверных и нах в даун...самое интресное в том что он не записывает ни в какие файлы лог ,а держит бан IP на уровне памяти...а вообще отличная статья!а вообще если есть желание что либо написать прошу сюда http://freebsd.vfose.ru/
ИзображениеИзображение
Изображение
Аватара пользователя
server801
Активный участник
 
Сообщения: 511
Зарегистрирован: 14 янв 2009, 14:28


Вернуться в Компьютерная безопасность

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

cron