За тези, които трябва да осигурят на себе си и на своите близки достъп до сървърите си от всяка точка на света чрез SSH/RDP/друго, малък RTFM/spur.
Трябва да се справим без VPN и други звънци и свирки, от всяко устройство под ръка.
И за да не се налага да тренирате твърде много със сървъра.
Всичко, от което се нуждаете за това е
„Всичко е в интернет“, разбира се (дори на
Ще се упражняваме да използваме Fedora/CentOS като пример, но това няма значение.
Шпорът е подходящ както за начинаещи, така и за експерти по този въпрос, така че ще има коментари, но те ще бъдат по-кратки.
1. Сървър
-
инсталирайте knock-сървър:
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 Server, който се върти вътре (/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 този ред Не. Добавете с ръцете си, иначе няма да се получи. - изчакване
Тук можете да изберете по ваш вкус. Необходимо е клиентът да има достатъчно време за всички ритници - и ботът за сканиране на портове ще се развали (и 146% ще сканира). - старт/стоп/команда.
Ако има една команда, тогава команда, ако има две, тогава start_command+stop_command.
Ако направите грешка, knockd ще остане безшумен, но няма да работи. - следователно
Теоретично може да се използва UDP. На практика смесих tcp и udp и клиентът от плажа в Бали успя да отвори портата едва на петия път. Тъй като TCP пристигна, когато беше необходимо, но UDP не е факт. Но това пак е въпрос на вкус. - последователност
Неявният рейк е, че последователностите не трябва да се пресичат... как да кажа това...
Например това:
open: 11111,22222,33333
close: 22222,11111,33333
С удар 11111 отворен ще изчака следващия удар на 22222. Въпреки това, след този (22222) удар ще започне да работи близо и всичко ще се счупи. Това зависи и от забавянето на клиента. Такива неща ©.
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, ще получим отказ.
И изключването на този отказ означава отваряне на колата за всички ветрове.
За да не се изгубите в iptables какво да вмъкнете преди какво (като това
- по подразбиране на CentOS/Fedora първи правилото („което не е забранено е позволено“) ще бъде заменено с обратното,
- и премахваме последното правило.
Резултатът трябва да бъде:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
Можете, разбира се, да направите REJECT вместо DROP, но с DROP животът ще бъде по-забавен за ботовете.
3. Клиент
Това място е най-интересното (от моя гледна точка), тъй като трябва да работите не само от всеки плаж, но и от всяко устройство.
По принцип са посочени редица клиенти
Когато избирате клиент, трябва да се уверите, че той поддържа опцията за забавяне между пакетите. Да, има разлики между плажовете и 100 мегабита никога не гарантират, че пакетите ще пристигнат в правилния ред в точното време от дадено местоположение.
И да, когато настройвате клиент, трябва сами да изберете забавянето. Твърде много таймаут - ботовете ще атакуват, твърде малко - клиентът няма да има време. Твърде много забавяне - клиентът няма да стигне навреме или ще има конфликт на идиоти (вижте "гребла"), твърде малко - пакетите ще се загубят в Интернет.
С таймаут=5s, delay=100..500ms е напълно работеща опция
Windows
Колкото и смешно да звучи, не е тривиално за Google да има ясен клиент за тази платформа. Така че CLI поддържа забавяне, TCP - и без лъкове.
Друга възможност е да опитате
Linux
Тук е просто:
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
MacOS
Най-лесният начин е да инсталирате порта от homebrew:
brew install knock
и начертайте необходимите пакетни файлове за команди като:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
IOS
Работещ вариант е KnockOnD (безплатен, от магазина).
Android
„Почукайте на портовете“ Не е реклама, но просто работи. И разработчиците са доста отзивчиви.
PS намаление на Хабре, разбира се, Бог да го благослови някой ден...
UPD1: благодарение на
UPD2: Друг
Източник: www.habr.com