Linux tips & tricks: server, iepenje

Foar dyjingen dy't moatte foarsjen harsels, harren leafsten, mei tagong ta harren tsjinners fan oeral yn 'e wrâld fia SSH / RDP / oar, in lytse RTFM / spur.

Wy moatte dwaan sûnder VPN en oare toeters en bellen, fan elk apparaat by de hân.

En sadat jo net te folle mei de tsjinner hoege te oefenjen.

Alles wat jo nedich hawwe foar dit is knockd, rjochte earms en 5 minuten fan wurk.

"Alles is op it ynternet," fansels (sels op Habré), mar as it giet om in spesifike ymplemintaasje, dit is wêr't it begjint ...

Wy sille oefenje mei it brûken fan Fedora/CentOS as foarbyld, mar dat makket neat út.

De spur is geskikt foar sawol begjinners as saakkundigen yn dizze saak, dus der sille opmerkingen wêze, mar se sille koarter wêze.

1. Tsjinner

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

  • konfigurearje it (bygelyks op 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

    It diel "iepening" is ynsteld om nei 1 oere automatysk te sluten. Do wist it mar noait...

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

  • foarút:

    service iptables restart
    service knockd start

  • jo kinne RDP tafoegje oan 'e firtuele Windows-tsjinner dy't binnen draait (/etc/knockd.conf; ferfange de ynterface-namme om jo smaak te passen):

    [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

    Wy folgje al ús kicks fan 'e kliïnt op' e tsjinner mei it kommando iptables -S.

2. Gids foar rakes

knockd.conf:

De mana befettet ek alles (mar dit is net krekt), mar knockd is in freon dy't nochal sûch is mei berjochten, dus jo moatte heul foarsichtich wêze.

  • ferzje
    Yn 'e Fedora / CentOS-repositories is de lêste knockd foar hjoed 0.63. Wa wol UDP - sykje 0.70 pakketten.
  • ynterface
    Yn de standert Fedora/CentOS-konfiguraasje dizze line ôfwêzich. Foegje mei jo hannen ta, oars wurket it net.
  • skoft
    Hjir kinne jo kieze neffens jo smaak. It is needsaaklik dat de kliïnt hat genôch tiid foar alle kicks - en de haven scanner bot sil ôfbrekke (en 146% sil scan).
  • start / stop / kommando.
    As der ien kommando is, dan kommando, as d'r twa binne, dan start_command+stop_command.
    As jo ​​in flater meitsje, sil knockd stil bliuwe, mar sil net wurkje.
  • prototype
    Teoretysk kin UDP brûkt wurde. Yn 'e praktyk mingde ik tcp en udp, en de kliïnt fan it strân yn Bali koe de poarte allinich de fyfde kear iepenje. Omdat TCP oankaam as it nedich is, mar UDP is gjin feit. Mar dit is wer in kwestje fan smaak.
  • folchoarder
    De ymplisite rake is dat de sekwinsjes net krúsje moatte ... hoe te sizzen ...

Bygelyks dit:

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

Troch kick 11111 iepen sil wachtsje op de folgjende kick op 22222. Nei dizze (22222) kick sil it lykwols begjinne te wurkjen slute en alles sil brekke. Dit hinget ek ôf fan de fertraging fan de kliïnt. Sokke dingen ©.

iptables

As yn /etc/sysconfig/iptables dit is:

*nat
:PREROUTING ACCEPT [0:0]

It makket ús net echt lestich, dus hjir is it:

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

It hinderet wol.

Sûnt knockd foeget regels ta oan 'e ein fan' e INPUT-ketting, sille wy ôfwize krije.

En it útskeakeljen fan dizze ôfwizing betsjut dat de auto iepenet foar alle wynen.

Om net te ferdwalen yn iptables wat te ynfoegje foar wat (lykas dit minsken suggerearje) litte wy it ienfâldiger meitsje:

  • standert op CentOS / Fedora de earste de regel ("wat net ferbean is is tastien") sil wurde ferfongen troch it tsjinoerstelde,
  • en wy fuortsmite de lêste regel.

It resultaat moat wêze:

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

Jo kinne fansels REJECT dwaan ynstee fan DROP, mar mei DROP sil it libben leuker wêze foar bots.

3. Kliïnt

Dit plak is it meast nijsgjirrich (fanút myn eachpunt), om't jo net allinich moatte wurkje fan elk strân, mar ek fan elk apparaat.

Yn prinsipe, in oantal kliïnten wurde fermeld op side projekt, mar dit is út deselde searje "alles is op it ynternet." Dêrom sil ik listje wat hjir en no binnen myn fingertoppen wurket.

As jo ​​​​in kliïnt kieze, moatte jo derfoar soargje dat it de opsje foar fertraging tusken pakketten stipet. Ja, d'r binne ferskillen tusken strannen en 100 megabits garandearje noait dat pakketten yn 'e juste folchoarder op' e krekte tiid komme fan in bepaalde lokaasje.

En ja, by it ynstellen fan in klant, moatte jo sels de fertraging selektearje. Tefolle time-out - bots sille oanfalle, te min - de kliïnt sil gjin tiid hawwe. Tefolle fertraging - de kliïnt sil it net op 'e tiid meitsje of d'r sil in konflikt wêze fan idioaten (sjoch "raken"), te min - de pakketten sille ferlern gean op it ynternet.

Mei timeout = 5s, fertraging = 100..500ms is in folslein wurkjende opsje

Windows

Hoe grappich it ek klinkt, it is frij net-triviaal foar Google in dúdlike knock-kliïnt foar dit platfoarm. Sa dat de CLI stipet fertraging, TCP - en sûnder bôgen.

Alternatyf kinne jo besykje dit is it. Blykber is myn Google gjin taart.

linux

It is hjir ienfâldich:

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

MacOS

De maklikste manier is om de haven fan homebrew te ynstallearjen:
brew install knock
en tekenje de nedige batchbestannen foar kommando's lykas:

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

iOS

In wurkopsje is KnockOnD (fergees, fan 'e winkel).

Android

"Klop op havens" Net reklame, mar it wurket gewoan. En de ûntwikkelders binne frij responsyf.

PS markdown op Habré, fansels, God segenje him ienris ...

UPD 1: tank oan oan in goed persoan fûn wurkjende klant ûnder Windows.
UPD 2: Noch ien goede man herinnerde my dat it pleatsen fan nije regels oan 'e ein fan iptables net altyd nuttich is. Mar - it hinget ôf.

Boarne: www.habr.com

Add a comment