За тези, които искат да имат достъп до собствените си сървъри от всяка точка на света чрез SSH/RDP/и др. — малък RTFM/справочник.
Трябва да се справим без VPN и други сложни решения, от всяко устройство под ръка.
И всичко да е така, че да не се занимаваме твърде много със сървъра.
Всичко, от което се нуждаем — , сръчни ръце и 5 минути работа.
«В интернет всичко има», разбира се (дори на ), но когато стане въпрос за конкретна реализация — точно там започват…
Ще упражняваме на примера на Fedora/CentOS, но това не е толкова важно.
Справочникът е подходящ както за начинаещи, така и за ветерани в областта, така че ще има коментари, но по-кратки.
1. Сървър
инсталираме knock-server:
yum/dnf install knock-serverнастройваме го (например на ssh) — /etc/knockd.conf:
[options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT«Отварящата» част е настроена на автоматично затваряне след 1 час. Все пак…
/etc/sysconfig/iptables:
... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ...напред:
service iptables restart service knockd startможе да добавите RDP на виртуален Windows сървър (/etc/knockd.conf; наименованието на интерфейса да се подстави по желание):
[RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2Всички наши опити от клиента следим на сървъра с командата
iptables -S.
2. Пътеводител по грабленията
knockd.conf:
В ръководствата също всичко има (но не точно), но knockd — е много стиснат на съобщения, затова трябва да сте много внимателни.
- версия
В репозиториите на Fedora/CentOS последната версия на knockd днес е 0.63. Който иска UDP — да търси пакети 0.70. - интерфейс
В подразбиращата се конфигурация на Fedora/CentOS този ред липсва. Трябва да се добави ръчно, иначе няма да работи. - timeout
Тук можете да изберете по вкус. Необходимо е клиентът да има достатъчно време за всички удари — и бот-скенерът да се провали (а сканирането ще е 146%). - start/stop/command.
Ако командата е една — то command, ако са две — то start_command+stop_command.
Ако направите грешка — knockd ще замълчи, но няма да работи. - proto
Теоретично е възможно да се използва UDP. На практика аз бях смесил tcp и udp, а клиентът от плажа в Бали успя да отвори портата си само от петия път. Защото TCP пристигна, когато трябва, а UDP — не е сигурно. Но това е въпрос на вкус. - sequence
Неявните проблеми са, че последователностите не трябва да се припокриват… как да го кажа…
Например, нещо такова:
open: 11111,22222,33333
close: 22222,11111,33333По удара 11111 open ще чака следващия удар на 22222. Въпреки това, по този (22222) удар ще започне да работи close и всичко ще се счупи. Това зависи и от закъснението на клиента. Такива работи ©.
iptables
Ако в /etc/sysconfig/iptables е това:
*nat
:PREROUTING ACCEPT [0:0]не ни пречи особено, то тогава това:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedпречи.
Тъй като knockd добавя правила в края на веригата INPUT, ще получим reject.
Ако деактивираме този reject — това е все едно да отворим машината за всички ветрове.
За да не се мъча с iptables какво къде да поставя (както хората дефолтното
- в CentOS/Fedora първото правило («каквото не е забранено — е разрешено») ще заменим с обратното, а последното правило ще премахнем.
- В крайна сметка трябва да е така:
*filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited
Разбира се, вместо DROP може да се постави REJECT, но с DROP на ботите ще им е по-лесно.3. Клиент
Тук е най-интригуващото (от моя гледна точка), защото трябва да работим не само от всеки плаж, но и с всяко устройство.
Всъщност, няколко клиента са посочени на
проекта, но това е от същата серия «в интернет всичко има». Затова ще изброя това, което в момента работи при мен. При избора на клиент е необходимо да се уверите, че той поддържа опцията delay между пакетите. Да, плажовете са различни и 100 мегабита не гарантират доставянето на пакетите в нужния ред и време от всяко място.
И да — при настройката на клиента delay трябва да се подбира индивидуално. Много timeout — ботите ще нападнат, малко — клиентът няма да успее. Много delay — клиентът няма да успее или ще има конфликт на пристъпи (вижте «грабли»), малко — пакетите ще се загубят в интернет.
При timeout=5s е напълно работещ вариант delay=100..500ms
С timeout=5s е напълно работещ вариант delay=100..500ms
Windows
Како звучи смешно, но трудно е да се намери ясен knock клиент за тази платформа. Така че, CLI, да поддържа закъснение, TCP — без излишества.
Можете да опитате . Изглежда, че моят Google не е на ниво.
Linux
Тук всичко е просто:
dnf install knock -y
knock -d 11111 22222 33333MacOS
Най-лесно е да инсталирате порта от homebrew:
brew install knock
и да си създадете нужните командни скриптове:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Работещ вариант — KnockOnD (безплатен, от магазина).
Android
«Knock on Ports». Не е реклама, а просто работи. И разработчиците са доста отзивчиви.
P.S. markdown на Хабре, разбира се, дай Боже да му върви някога…
UPD1: благодарение на беше намерен за Windows.
UPD2: още един напомни, че добавянето на нови правила в края на iptables не винаги е полезно. Но — зависи.
Източник: habr.com
