Linux patarimai ir gudrybės: serveris, atidarykite

Tiems, kuriems reikia suteikti sau, savo artimiesiems prieigą prie savo serverių iš bet kurios pasaulio vietos per SSH/RDP/kitą, nedidelį RTFM/spur.

Turime apsieiti be VPN ir kitų skambučių ir švilpukų iš bet kurio turimo įrenginio.

Ir kad nereikėtų per daug mankštintis su serveriu.

Viskas, ko jums reikia tam, yra trankyti, tiesios rankos ir 5 minutės darbo.

Žinoma, „viskas yra internete“ (netgi Habré), bet kai kalbama apie konkretų įgyvendinimą, tai čia ir prasideda...

Praktikuosime naudodami Fedora / CentOS kaip pavyzdį, bet tai nesvarbu.

Spuras tinka tiek pradedantiesiems, tiek šio klausimo žinovams, todėl komentarų bus, bet jie bus trumpesni.

1. Serveris

  • įdiegti knock-server:
    yum/dnf install knock-server

  • sukonfigūruokite jį (pavyzdžiui, 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

    „Atidarymo“ dalis nustatyta taip, kad automatiškai užsidarytų po 1 valandos. Niekada nežinai...

  • /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
    ...

  • Persiųsti:

    service iptables restart
    service knockd start

  • galite pridėti KPP prie virtualaus Windows serverio, besisukančio viduje (/etc/knockd.conf; pakeiskite sąsajos pavadinimą pagal savo skonį):

    [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

    Mes stebime visus savo kliento smūgius serveryje naudodami komandą iptables -S.

2. Grėblių vadovas

knockd.conf:

Manoje taip pat yra visko (bet tai netikslu), bet knockd yra gana šykštus žinučių draugas, todėl reikia būti labai atsargiems.

  • versija
    „Fedora“ / „CentOS“ saugyklose naujausias šios dienos „knockd“ yra 0.63. Kas nori UDP - ieškokite 0.70 paketų.
  • sąsaja
    Numatytoje „Fedora“ / „CentOS“ konfigūracijoje ši eilutė ne. Pridėkite rankomis, kitaip neveiks.
  • laukimas
    Čia galite pasirinkti pagal savo skonį. Būtina, kad klientas turėtų pakankamai laiko visiems smūgiams – ir prievado skaitytuvo botas suges (ir nuskaitys 146 proc.).
  • start/stop/command.
    Jei yra viena komanda, tada komanda, jei yra dvi, tada start_command+stop_command.
    Jei padarysite klaidą, knockd tylės, bet neveiks.
  • todėl
    Teoriškai galima naudoti UDP. Praktikoje sumaišiau tcp ir udp, o klientas iš Balio paplūdimio tik penktą kartą sugebėjo atidaryti vartus. Kadangi TCP atvyko, kai reikėjo, bet UDP nėra faktas. Bet čia vėlgi skonio reikalas.
  • seka
    Netiesioginis grėblys yra tas, kad sekos neturi susikirsti... kaip tai pasakyti...

Pavyzdžiui, tai:

open: 11111,22222,33333
close: 22222,11111,33333

Smūgis 11111 atidaryti lauks kito smūgio ties 22222. Tačiau po šio (22222) smūgio jis pradės veikti close ir viskas sugrius. Tai priklauso ir nuo kliento vėlavimo. Tokie dalykai ©.

iptables

Jei /etc/sysconfig/iptables tai yra:

*nat
:PREROUTING ACCEPT [0:0]

Mums tai tikrai netrukdo, todėl štai:

*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Tai trukdo.

Kadangi knockd prideda taisykles į INPUT grandinės pabaigą, gausime atmetimą.

O išjungti šį atmetimą reiškia atidaryti automobilį visiems vėjams.

Kad nepasiklystumėte iptables, ką įterpti prieš ką (pvz žmonės pasiūlykite) padarykime paprasčiau:

  • numatytas „CentOS“ / „Fedora“. pirmas taisyklė („kas nedraudžiama, tas leidžiama“) bus pakeista priešinga,
  • ir pašaliname paskutinę taisyklę.

Rezultatas turėtų būti:

*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited

Žinoma, vietoj DROP galite atlikti REJECT, bet su DROP robotams gyvenimas bus smagesnis.

3. Klientas

Ši vieta yra pati įdomiausia (mano požiūriu), nes dirbti reikia ne tik iš bet kokio paplūdimio, bet ir iš bet kurio įrenginio.

Iš esmės sąraše yra nurodyta keletas klientų Dabar naršo projektas, bet tai iš tos pačios serijos „viskas yra internete“. Todėl išvardinsiu, kas čia ir dabar veikia po ranka.

Renkantis klientą, turite įsitikinti, kad jis palaiko vėlavimo tarp paketų parinktį. Taip, yra skirtumų tarp paplūdimių ir 100 megabitų niekada negarantuoja, kad paketai iš tam tikros vietos atvyks reikiama tvarka tinkamu laiku.

Ir taip, steigiant klientą, vėlavimą reikia pasirinkti pačiam. Per daug laiko – robotai puls, per mažai – klientas neturės laiko. Per daug delsimo – klientas nespės laiku arba kils idiotų konfliktas (žr. „grėbliai“), per mažai – paketai pasimes internete.

Kai skirtas laikas = 5 s, delsa = 100...500 ms yra visiškai veikianti parinktis

Windows

Kad ir kaip juokingai tai skambėtų, „Google“ yra gana nebanalus šios platformos klientas. Toks, kad CLI palaiko delsą, TCP – ir be lankų.

Arba galite pabandyti štai kas. Matyt, mano Google nėra pyragas.

Linux

Čia viskas paprasta:

dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333

MacOS

Lengviausias būdas yra įdiegti prievadą iš namų brew:
brew install knock
ir nubrėžkite reikiamus paketinius failus tokioms komandoms kaip:

#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333

"iOS"

Veikia KnockOnD (nemokama, iš parduotuvės).

Android

„Knock on Ports“ Ne reklama, bet tai tiesiog veikia. Ir kūrėjai gana reaguoja.

PS sumažinimas Habré, žinoma, Dievas palaimina jį kada nors...

UPD1: ačiū geram žmogui rasta dirbantis klientas pagal Windows.
UPD2: Kitas geras žmogus priminė, kad naujų taisyklių dėjimas iptables pabaigoje ne visada naudingas. Bet - tai priklauso.

Šaltinis: www.habr.com

Добавить комментарий