Port knocking

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
SKAUT
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-01-07 20:36:19
Откуда: РК, г. Атырау

Port knocking

Непрочитанное сообщение SKAUT » 2012-01-07 21:52:12

Доброго часа всем!

Ситуация такова:
Прочитал статью Port knocking и решил реализовать, т.к. частенько на наш старый сервак ломятся "неизвестные". Отдельно готовлю новый и хотел бы его защитить, а самому заходить по ssh и править конфиги иногда.
Поставил серверную часть (knockd). Версия ОС 8.2-RELEASE. Ядро собрано с опциями для ipfirewall по статье с lissyara.su. Единственное то, что правило в нём пока одно - разрешающее, и нет DUMMYNET.

knockd.conf

Код: Выделить всё

[options]
         logfile = /var/log/knockd.log
         interface = em0

[opencloseSSH]

	sequence      = 1000,2000,3000
        seq_timeout   = 5
        tcpflags      = syn
        start_command = /sbin/pfctl -t good_hosts -T add %IP%
        cmd_timeout   = 10
        stop_command  = /sbin/pfctl -t good_hosts -T delete %IP%

[open22]
        sequence    = 4000,5000,6000
        seq_timeout = 5
        tcpflags    = syn
        command     = /sbin/pfctl -t good_hosts -T add %IP%

[close22]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        tcpflags    = syn
        command     = /sbin/pfctl -t good_hosts -T delete %IP%
В pf.conf прописал следующее:

Код: Выделить всё

table <good_hosts> persist

block in on $ext_if all
pass in on $ext_if inet proto tcp from <good_hosts> \
 to $ext_if port 22 keep state
Далее: /sbin/ipfw add 100 allow tcp from %IP% to me 22 keep-state
Ругнулось на unknown host "IP". Думаю что надо было здесь и в knockd.conf писать реальный адрес.
Ладно, плюнул, т.к. подключаться буду с компа через ADSL а там каждый раз другой адрес.
Нашёл WinKnock чтобы подключаться с win7. Конфиг для неё такой:

Код: Выделить всё

#opencloseSSH
ip xxx.xxx.xxx.xxx
open 1000:Tcp
open 2000:Tcp
open 3000:Udp
close 1000:Tcp
close 2000:Udp
close 3000:Tcp
#open22
ip xxx.xxx.xxx.xxx
open 4000:Tcp
open 5000:Tcp
open 6000:Tcp
#close22
ip xxx.xxx.xxx.xxx
close 7000:Tcp
close 8000:Tcp
close 9000:Tcp
Затем на сервере pfctl -f /etc/pf.conf и пытаюсь подключиться через WinKnock: вроде пишет что открыто, а putty сообщает о timeout error.

Вопрос: понимаю, что я не всё понял, как это должно работать, и прошу подсказать, каким же образом это всё осуществить в моём примере.
Новичок FreeBSD, но очень итересно) И нужно.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Port knocking

Непрочитанное сообщение FreeBSP » 2012-01-07 22:41:45

1) man knockd
2) что пользуем? ipfw или PF ??? или все вместе? а то заявлено про наличие ipfw в ядре, а кроме PF ничего не трогается
3) курим логи. если выложишь - можно покурить вместе
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
SKAUT
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-01-07 20:36:19
Откуда: РК, г. Атырау

Re: Port knocking

Непрочитанное сообщение SKAUT » 2012-01-07 22:53:23

1) man knockd
Хорошо. Почитаю
2) что пользуем? ipfw или PF ??? или все вместе? а то заявлено про наличие ipfw в ядре, а кроме PF ничего не трогается
Планирую ipfw потому и встраивал его в ядро, а по статье правила были как и для него так и для pf. Задать правило для ipfw не удалось (ошибка выше), а часть в pf.conf показана.
3) курим логи. если выложишь - можно покурить вместе
В понедельник на работу выйду, логи выложу, будим курить. Сейчас никак уже попасть не смогу на сервак. Сам же себе всё отрубил)
Сейчас пойду по инету гуглить ман по knockd)
Новичок FreeBSD, но очень итересно) И нужно.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Port knocking

Непрочитанное сообщение FreeBSP » 2012-01-07 23:38:14

http://www.freebsd.org/cgi/man.cgi?quer ... ormat=html
правила ipfw надо было писать не в консоль, а в конфиг кнокд
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Port knocking

Непрочитанное сообщение dikens3 » 2012-01-08 0:27:08

У Вас pf.conf только касательно ssh, он не полный. В нём всего два правила по сути:
1. Принимать соединения на порт 22 от некоторых хостов.
2. Блокировать всё.

Вам видимо нужно разрешить всё, и пускать только определённые IP на SSH. Пока не поймёте как работает firewall.

Код: Выделить всё

pass in on $ext_if all
block in quick on $ext_if inet proto tcp from !<good_hosts> \
to $ext_if port 22
Не помню как отрицание делается в pf, написал !
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
SKAUT
проходил мимо
Сообщения: 3
Зарегистрирован: 2012-01-07 20:36:19
Откуда: РК, г. Атырау

Re: Port knocking

Непрочитанное сообщение SKAUT » 2012-01-09 7:23:32

вот такие вот логи имеются...
pf.log

Код: Выделить всё

00:00:00.000000 rule 4294967295/8(ip-option): pass in on em0: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:00.000011 rule 4294967295/8(ip-option): pass in on em1: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:06.999947 rule 4294967295/8(ip-option): pass in on em1: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:00.000042 rule 4294967295/8(ip-option): pass in on em0: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
19:30:50.868797 rule 4294967295/8(ip-option): pass in on em0: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:00.000012 rule 4294967295/8(ip-option): pass in on em1: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:06.999989 rule 4294967295/8(ip-option): pass in on em1: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
00:00:00.000041 rule 4294967295/8(ip-option): pass in on em0: 10.0.0.0 > 224.0.0.1: igmp query v3 [max resp time 1s]
knockd.log

Код: Выделить всё

[2012-01-06 15:06:49] starting up, listening on em0
[2012-01-06 19:51:08] 178.91.59.226: opencloseSSH: Stage 1
[2012-01-06 19:51:08] 178.91.59.226: opencloseSSH: Stage 2
[2012-01-06 19:56:14] 178.91.59.226: opencloseSSH: sequence timeout (stage 2)

[2012-01-06 19:56:14] 178.91.59.226: opencloseSSH: Stage 1
[2012-01-06 19:56:14] 178.91.59.226: opencloseSSH: Stage 2
[2012-01-06 19:56:29] 178.91.59.226: opencloseSSH: sequence timeout (stage 2)

[2012-01-06 19:56:29] 178.91.59.226: open22: Stage 1
[2012-01-06 19:56:29] 178.91.59.226: open22: Stage 2
[2012-01-06 19:57:26] 178.91.59.226: open22: sequence timeout (stage 2)

[2012-01-06 19:57:26] 178.91.59.226: close22: Stage 1
[2012-01-06 19:57:26] 178.91.59.226: close22: Stage 2
[2012-01-06 19:57:26] 178.91.59.226: close22: Stage 3
[2012-01-06 19:57:26] 178.91.59.226: close22: OPEN SESAME
[2012-01-06 19:57:26] close22: running command: /sbin/pfctl -t good_hosts -T delete 178.91.59.226
ipfw list

Код: Выделить всё

65535 allow ip from any to any
pf.conf

Код: Выделить всё

ext_if="em0"
int_if="em1"

table <good_hosts> persist
block in on $ext_if all
pass in on $ext_if inet proto tcp from <good_hosts> \
 to $ext_if port 22 keep state

set skip on lo
knockd.conf

Код: Выделить всё

[options]
        logfile = /var/log/knockd.log
        interface = em0

[opencloseSSH]
        sequence    = 1000,2000,3000
        seq_timeout = 5
        start_command     = /sbin/pfctl -t good_hosts -T add %IP%
        tcpflags    = syn
        cmd_timeout   = 10
        stop_command  = /sbin/pfctl -t good_hosts -T delete %IP%

[open22]
        sequence    = 4000,5000,6000
        seq_timeout = 5
        tcpflags    = syn
        command     = /sbin/pfctl -t good_hosts -T add %IP%

[close22]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /sbin/pfctl -t good_hosts -T delete %IP%
        tcpflags    = syn
Новичок FreeBSD, но очень итересно) И нужно.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Port knocking

Непрочитанное сообщение FreeBSP » 2012-01-09 16:03:14

разберись в реализации порткнокинга в knockd и в винкнок. а именно - как и что должно происходить и почему

или для ленивых:

Код: Выделить всё

kldunload pf
ipfw add check-state
ipfw add 200 deny ip from any to me ssh
knockd.conf:

Код: Выделить всё

# Глобальная секция(описание параметров демона)
[options]
		# Имя и путь к лог файлу
        logfile = /var/log/knockd.log
		# На каком интерфейсе демон 
		# будет ждать заданной последовательности
        interface = rl0

# Секция, описывающая открытия
# и закрытия определенного порта
[opencloseSSH]

		# Уникальная последовательность
        sequence      = 1000:udp,2000:tcp,3000:udp
		# Таймаут соединения с портами
        seq_timeout   = 5
		# Флаги, установленные в tcp пакетах
        tcpflags      = syn
		# Команда, которая выполнитсся при успешном соединение с портами в определенной последовательности
        start_command = /sbin/ipfw add 100 allow tcp from %IP% to me 22 keep-state
		# Через какое время будет выполнена stop_command, после выполнения start_command
        cmd_timeout   = 10
		# Команда, которая выполнится после timeout'а
        stop_command  = /sbin/ipfw delete 100

# Секция для открытия порта
[open22]
        sequence    = 4000:tcp,5000:tcp,6000:udp
        seq_timeout = 5
        tcpflags    = syn
		# Команда, которая выполнится при успешном  соединение с портами
        command     = /sbin/ipfw add 100 allow tcp from %IP% to me 22 keep-state

# Секция для закрытия порта
[close22]
        sequence    = 7000:udp,8000:tcp,9000:tcp
        seq_timeout = 5
        tcpflags    = syn
        command     = /sbin/ipfw delete 100
winknock.cfg

Код: Выделить всё

#openSSH and close automatically
ip xxx.xxx.xxx.xxx
open 1000:Udp
open 2000:Tcp
open 3000:Udp

#only open22
ip xxx.xxx.xxx.xxx
open 4000:Tcp
open 5000:Tcp
open 6000:Udp
#only close22
ip xxx.xxx.xxx.xxx
close 7000:Udp
close 8000:Tcp
close 9000:Tcp
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!