Linux съвети и трикове: сървър, отворете

За тези, които трябва да осигурят на себе си и на своите близки достъп до сървърите си от всяка точка на света чрез SSH/RDP/друго, малък RTFM/spur.

Трябва да се справим без VPN и други звънци и свирки, от всяко устройство под ръка.

И за да не се налага да тренирате твърде много със сървъра.

Всичко, от което се нуждаете за това е почука, прави ръце и 5 минути работа.

„Всичко е в интернет“, разбира се (дори на хабре), но когато става въпрос за конкретна реализация, тук започва...

Ще се упражняваме да използваме 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 - и без лъкове.

Друга възможност е да опитате това е то. Явно моят Google не е торта.

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: благодарение на на добър човек намерени работещ клиент под Windows.
UPD2: Друг добър човек ми напомни, че поставянето на нови правила в края на iptables не винаги е полезно. Но - зависи.

Източник: www.habr.com

Добавяне на нов коментар