Ссылки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
https://putty.org.ru/articles/port-knocking https://habr.com/ru/companies/inDrive/articles/673976/ http://www.portknocking.org/ https://www.youtube.com/watch?v=5TCvRlD1sSw https://ipset.netfilter.org/iptables.man.html https://ipset.netfilter.org/ipset.man.html https://ipset.netfilter.org/iptables-extensions.man.html https://b14esh.com/nix/iptables/iptables-konspekt.html https://b14esh.com/device/mikrotik/konspekt-mikrotik-firewall.html |
knockd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
0. Сервис knockd служит для прослушивания любого порта и выполнения любой команды commnad. apt install -y knockd 1. Настройка: vim /etc/knockd.conf -------------------- [options] UseSyslog Interface = enp3s0 [SSH] sequence = 7000,8000,9000 seq_timeout = 5 tcpflags = syn start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 45916 -j ACCEPT stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 45916 -j ACCEPT cmd_timeout = 60 --------------------- Interface вы можете определить, какой интерфейс прослушивать в случае, если в вашей системе он не является единственным. Значение параметра sequence определяет последовательность. Числа являются номерами TCP-портов. Также, вы можете явно указать, TCP или UDP порт использовать, при помощи суффиксов :tcp и :udp. Например: sequence = 3333:tcp,9999:udp,1010:udp,8675:tcp Значение параметра seq_timeout задаёт максимальное время в секундах, которое отводится на совершение клиентом последовательности подключений. Если клиент не укладывается в это время — подключение будет отклонено. Значение параметра command определяет путь и параметры вызываемой программы в случае обнаружения корректной последовательности. Параметром tcpflags вы можете определять, какие флаги должны иметь пакеты, участвующие в последовательности. Несколько флагов необходимо разделять запятой: tcpflags = syn,ack,urg А для явного исключения отельных флагов нужно использовать восклицательный знак: tcpflags = syn,!ack,urg Параметр start_command по смыслу идентичен параметру command. Значение параметра cmd_timeout определяет временной интервал в секундах, по истечении которого запустится команда, определённая значением параметра stop_command. Таким образом, вы можете открывать определённый порт лишь на некоторый промежуток времени. 2. Автозапуск: ip a - имя интерфеса vim /etc/default/knockd ----------------------- START_KNOCKD=1 KNOCKD_OPTS="-i enp3s0" ----------------------- Здесь enp3s0 это сетевой интерфейс на котором работает программа knockd. systemctl start knockd systemctl enable knockd systemctl status knockd |
Собственно а как стучать в порты?!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!!! Port Knocking есть строенный в PuTTY Программа knock для постукивания в порт: knock 10.0.1.100 3333:tcp 9999:udp 1010:udp 8675:tcp Программа nmap: for x in 7000 8000 9000; do nmap -Pn --max-retries 0 -p $x 10.10.0.12; done Для windows: ping -l 2 -n 5 10.0.0.25 - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5 Для linux: ping -s 2 -c 5 10.0.0.25 - - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5 |
icmp knoking / iptables / ipset
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Пример правил в iptables: iptables -N INPUT_NEW iptables -N PORTKNOCKING iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m conntrack --ctstate NEW -j INPUT_NEW iptables -A INPUT_NEW -j PORTKNOCKING iptables -A INPUT_NEW -p tcp -m tcp --dport 22 -m set --match-set knock_allow src,src -j ACCEPT iptables -A PORTKNOCKING -p icmp --icmp-type 8 -m connbytes --connbytes 500:500 --connbytes-mode bytes --connbytes-dir original -m set --match-set knock_step_2 src -j SET --add-set knock_allow src,src --exist iptables -A PORTKNOCKING -p icmp --icmp-type 8 -m connbytes --connbytes 1028:1028 --connbytes-mode bytes --connbytes-dir original -m set --match-set knock_step_1 src -j SET --add-set knock_step_2 src iptables -A PORTKNOCKING -p icmp --icmp-type 8 -m connbytes --connbytes 999:999 --connbytes-mode bytes --connbytes-dir original -j SET --add-set knock_step_1 src iptables -P INPUT DROP Создание списков: ipset create knock_allow hash:net,iface timeout 60 ipset create knock_step_1 hash:ip timeout 2 ipset create knock_step_2 hash:ip timeout 2 Вот так пингуем: ping -l 971 -w 100 -n 1 mysrv.com; ping -l 1000 -w 100 -n 1 mysrv.com; ping -l 472 -w 100 -n 1 mysrv.com; ssh mysrv.com |
Mikrotik port knoking icmp
1 2 3 4 5 6 7 |
!!! может быть полезно для создания portknoking !!! по умолчанию размер пакета ping равен 28 !!! Для windows: ping -l 2 -n 5 10.0.0.25 - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5 !!! Для linux: ping -s 2 -c 5 10.0.0.25 - - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5 /ip firewall filter add action=add-src-to-address-list address-list=ping_size_2_me address-list-timeout=10m chain=input in-interface-list=WAN packet-size=30 protocol=icmp |