bsd$ whereis -s knock
knock: /usr/ports/security/knock
bsd$ sudo make -C /usr/ports/security/knock/ -D BATCH install clean
bsd$ rehash
При выполнении команды telnet 217.20.XX.XXX XXXX, операционная система MS Windows делает ТРИ(!) попытки подключения на порт XXXX по адресу 217.20.XX.XXX (следует обратить внимание, что флаги все одинаковые: Flags [S], seq 361962239, win 65535, options [mss 1460,nop,nop,sackOK]). Таким образом, если сервис knockd сконфигурирован на прослушивание более двух портов, то при помощи telnet открыть целевой порт не получится, т.к. попытка соединения на каждый порт knockd будет выполнена трижды подряд и времени, отведенного для прохождения последовательности соединений (seq_timeout) будет недостаточно
bsd$ cat /usr/local/etc/knockd.conf
[options]
logfile = /var/log/knockd.log
interface = fxp0
[openSSH]
sequence = XXXX,YYYY
seq_timeout = 20
command = /sbin/ipfw -q add NNNN allow tcp from %IP% to me NNNN
tcpflags = syn
[closeSSH]
sequence = AAAA,BBBB
seq_timeout = 20
command = /sbin/ipfw -q delete NNNN
tcpflags = syn
Запуск сервиса автоматически при загрузке системы
bsd$ echo 'knockd_enable="YES"' | sudo tee -a /etc/rc.conf
bsd$ grep -i knockd /etc/rc.conf
knockd_enable="YES"
Кроме того, создать файл лога:
bsd$ sudo touch /var/log/knockd.log
bsd$ sudo chmod 0600 /var/log/knockd.log
И, определив ротацию лога в /etc/newsyslog.conf, перезапустить syslogd:
bsd$ grep -i knockd /etc/newsyslog.conf
/var/log/knockd.log | 400 | 3 | 100 | * | JC |
bsd$ sudo /etc/rc.d/syslogd restart
Для запуска сервиса нет нужды перезагружать систему
bsd$ sudo /usr/local/etc/rc.d/knockd start
FreeBSD 9.0-RELEASE: Tue Jan 3 07:46:30 UTC 2012