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

  • ішінде айналатын виртуалды Windows серверіне RDP қосуға болады (/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 репозиторийлерінде бүгінгі күні ең соңғы соққы 0.63. Кім UDP қалайды - 0.70 пакеттерді іздеңіз.
  • интерфейс
    Әдепкі Fedora/CentOS конфигурациясында бұл жол жоқ. Қолыңызбен қосыңыз, әйтпесе ол жұмыс істемейді.
  • үзіліс
    Мұнда сіз өз талғамыңызға қарай таңдай аласыз. Клиентте барлық соққылар үшін жеткілікті уақыт болуы керек - порт сканерінің боты бұзылады (және 146% сканерлейді).
  • бастау/тоқтату/командасы.
    Егер бір пәрмен болса, онда пәрмен, егер екеуі болса, бастау_командасы+тоқтату_командасы.
    Егер сіз қателессеңіз, knockd үнсіз қалады, бірақ жұмыс істемейді.
  • proto-
    Теориялық тұрғыдан 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

Сіз, әрине, DROP орнына ҚАБЫЛДАУ әрекетін жасай аласыз, бірақ DROP көмегімен өмір боттар үшін қызықтырақ болады.

3. Клиент

Бұл жер ең қызықты (менің көзқарасым бойынша), өйткені кез келген жағажайдан ғана емес, кез келген құрылғыдан да жұмыс істеу керек.

Негізінде, бірнеше клиенттер тізімде сайт жоба, бірақ бұл «бәрі Интернетте» сериясынан. Сондықтан мен осы жерде және қазір қолымда жұмыс істейтін нәрселерді тізімдеймін.

Клиентті таңдаған кезде оның пакеттер арасындағы кешіктіру опциясын қолдайтынына көз жеткізу керек. Иә, жағажайлар арасында айырмашылықтар бар және 100 мегабит пакеттердің белгілі бір жерден қажетті уақытта дұрыс ретпен келетініне ешқашан кепілдік бермейді.

Және иә, клиентті орнату кезінде кешіктіруді өзіңіз таңдауыңыз керек. Тым көп күту – боттар шабуыл жасайды, тым аз – клиенттің уақыты болмайды. Тым көп кешіктіру - клиент оны уақытында орындамайды немесе ақымақтардың қақтығысы болады («тырмаларды» қараңыз), тым аз - пакеттер Интернетте жоғалады.

Күту уақыты = 5 секунд болғанда, кідіріс = 100..500 мс - толығымен жұмыс істейтін опция

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

пікір қалдыру