Linux-vinkkejä ja temppuja: palvelin, avaa

Niille, joiden on tarjottava itselleen, läheisilleen pääsy palvelimiinsa mistä päin maailmaa tahansa SSH/RDP/muu kautta, pieni RTFM/spur.

Meidän on pärjättävä ilman VPN:ää ja muita kelloja ja pillejä miltä tahansa laitteelta.

Ja jotta sinun ei tarvitse harjoitella liikaa palvelimen kanssa.

Kaikki mitä tarvitset tähän on koputti, suorat kädet ja 5 minuuttia työtä.

"Kaikki on Internetissä" tietysti (myös Habré), mutta kun on kyse tietystä toteutuksesta, se alkaa tästä...

Harjoittelemme Fedora/CentOS:n käyttöä esimerkkinä, mutta sillä ei ole väliä.

Spur sopii sekä aloittelijoille että asiantuntijoille tässä asiassa, joten kommentteja tulee, mutta ne ovat lyhyempiä.

1. Palvelin

  • asenna knock-server:
    yum/dnf install knock-server

  • määritä se (esimerkiksi ssh:ssa) - /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

    Avausosa on asetettu sulkeutumaan automaattisesti 1 tunnin kuluttua. Ei sitä koskaan tiedä...

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

  • eteenpäin:

    service iptables restart
    service knockd start

  • voit lisätä RDP:n virtuaaliseen Windows Serveriin, joka pyörii sisällä (/etc/knockd.conf; korvaa käyttöliittymän nimi makusi mukaan):

    [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

    Seuraamme kaikkia potkujamme asiakkaalta palvelimella komennolla iptables -S.

2. Opas haravoihin

knockd.conf:

Mana sisältää myös kaiken (mutta tämä on epätarkka), mutta knockd on ystävä, joka on melko niukka viesteissä, joten sinun on oltava erittäin varovainen.

  • versio
    Fedora/CentOS-varastoissa tämän päivän viimeisin koputus on 0.63. Kuka haluaa UDP:n - etsi 0.70 paketteja.
  • liitäntä
    Fedora/CentOS-oletuskokoonpanossa tämä rivi ei. Lisää käsin, muuten se ei toimi.
  • aikakatkaisu
    Täällä voit valita makusi mukaan. On välttämätöntä, että asiakkaalla on tarpeeksi aikaa kaikkiin potkuihin - ja porttiskanneribotti hajoaa (ja 146% skannaa).
  • käynnistys/pysäytys/komento.
    Jos komentoja on yksi, niin komento, jos niitä on kaksi, niin start_command+stop_command.
    Jos teet virheen, knockd pysyy hiljaa, mutta ei toimi.
  • siksi
    Teoriassa UDP:tä voidaan käyttää. Käytännössä sekoitin tcp:n ja udp:n, ja asiakas Balin rannalta pystyi avaamaan portin vasta viidennen kerran. Koska TCP saapui tarvittaessa, mutta UDP ei ole tosiasia. Mutta tämä on taas makuasia.
  • järjestys
    Implisiittinen rake on se, että sekvenssit eivät saa leikkiä... kuinka sen sanoisin...

Esimerkiksi tämä:

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

Potkulla 11111 avata odottaa seuraavaa potkua klo 22222. Kuitenkin tämän (22222) potkun jälkeen se alkaa toimia lähellä ja kaikki menee rikki. Tämä riippuu myös asiakkaan viiveestä. Sellaiset asiat ©.

iptables

Jos tiedostossa /etc/sysconfig/iptables tämä on:

*nat
:PREROUTING ACCEPT [0:0]

Se ei todellakaan haittaa meitä, joten tässä se on:

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

Se häiritsee.

Koska knockd lisää säännöt INPUT-ketjun loppuun, saamme hylkäämisen.

Ja tämän hylkäyksen kytkeminen pois päältä tarkoittaa auton avaamista kaikille tuulille.

Jotta et eksy iptablesiin, mitä ennen mitä tulee lisätä (kuten tämä ihmiset ehdota) tehdään siitä yksinkertaisempi:

  • oletuksena CentOS/Fedorassa ensimmäinen sääntö ("mikä ei ole kiellettyä on sallittua") korvataan päinvastoin,
  • ja poistamme viimeisen säännön.

Tuloksena pitäisi olla:

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

Voit tietysti tehdä hylkäämisen DROP:n sijaan, mutta DROP-toiminnolla elämä on hauskempaa boteille.

3. Asiakas

Tämä paikka on mielenkiintoisin (minun näkökulmastani), koska sinun ei tarvitse työskennellä vain miltä tahansa rannalta, vaan myös mistä tahansa laitteesta.

Periaatteessa listattuna on useita asiakkaita Online projekti, mutta tämä on samasta sarjasta "kaikki on Internetissä". Siksi luettelen, mikä toimii käden ulottuvillani tässä ja nyt.

Asiakasta valittaessa on varmistettava, että se tukee pakettien välistä viivevaihtoehtoa. Kyllä, rantojen välillä on eroja, ja 100 megabittiä ei koskaan taata, että paketit saapuvat oikeassa järjestyksessä oikeaan aikaan tietystä paikasta.

Ja kyllä, asiakasta perustaessasi sinun on valittava viive itse. Liian paljon aikakatkaisua - botit hyökkäävät, liian vähän - asiakkaalla ei ole aikaa. Liian paljon viivettä - asiakas ei ehdi ajoissa tai syntyy idioottien konflikti (katso "haravat"), liian vähän - paketit katoavat Internetiin.

Kun aikakatkaisu = 5 s, viive = 100...500 ms on täysin toimiva vaihtoehto

Windows

Huolimatta siitä, kuinka hauskalta se kuulostaa, Googlelle ei ole aivan triviaalia selkeä koputusasiakas tälle alustalle. Sellainen, että CLI tukee viivettä, TCP:tä - ja ilman jousia.

Vaihtoehtona voit kokeilla Tämä on. Ilmeisesti Googleni ei ole kakku.

Linux

Täällä se on yksinkertaista:

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

MacOS

Helpoin tapa on asentaa portti Homebrew'sta:
brew install knock
ja piirrä tarvittavat erätiedostot komennoille, kuten:

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

iOS

Toimiva vaihtoehto on KnockOnD (ilmainen, kaupasta).

Android

"Knock on Ports" Ei mainontaa, mutta se vain toimii. Ja kehittäjät ovat melko reagoivia.

PS-merkintä Habrelle, tietysti, Jumala siunatkoon häntä jonain päivänä...

UPD1: kiitokset hyvälle ihmiselle löytyi työskentelevä asiakas Windowsin alla.
UPD2: Toinen hyvä ihminen muistutti minua siitä, että uusien sääntöjen asettaminen iptablesin loppuun ei ole aina hyödyllistä. Mutta - riippuu.

Lähde: will.com

Lisää kommentti