Linux wenke en truuks: bediener, maak oop

Vir diegene wat hulself, hul geliefdes, van enige plek in die wêreld toegang tot hul bedieners moet voorsien via SSH/RDP/ander, 'n klein RTFM/spur.

Ons moet klaarkom sonder VPN en ander klokkies en fluitjies, vanaf enige toestel byderhand.

En sodat jy nie te veel met die bediener hoef te oefen nie.

Al wat jy hiervoor nodig het is klopd, reguit arms en 5 minute se werk.

"Alles is op die internet," natuurlik (selfs op Habré), maar wanneer dit by 'n spesifieke implementering kom, is dit waar dit begin ...

Ons sal oefen om Fedora/CentOS as voorbeeld te gebruik, maar dit maak nie saak nie.

Die spoor is geskik vir beide beginners en kundiges in hierdie saak, so daar sal kommentaar wees, maar hulle sal korter wees.

1. Bediener

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

  • stel dit op (byvoorbeeld 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

    Die "opening" deel is ingestel om outomaties toe te maak na 1 uur. Jy weet nooit...

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

  • vorentoe:

    service iptables restart
    service knockd start

  • jy kan RDP by die virtuele Windows Server voeg wat binne draai (/etc/knockd.conf; vervang die koppelvlaknaam om jou smaak te pas):

    [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

    Ons volg al ons skoppe vanaf die kliënt op die bediener met die opdrag iptables -S.

2. Gids vir harke

knockd.conf:

Die mana bevat ook alles (maar dit is onakkuraat), maar knockd is 'n vriend wat nogal suinig is met boodskappe, so jy moet baie versigtig wees.

  • weergawe
    In die Fedora/CentOS-bewaarplekke is die jongste knockd vir vandag 0.63. Wie wil UDP hê - soek 0.70 pakkies.
  • koppelvlak
    In die verstek Fedora/CentOS-konfigurasie hierdie reël geen. Voeg by met jou hande, anders werk dit nie.
  • Time-out
    Hier kan jy kies volgens jou smaak. Dit is nodig dat die kliënt genoeg tyd het vir al die skoppe - en die port skandeerder bot sal breek (en 146% sal skandeer).
  • begin/stop/bevel.
    As daar een opdrag is, dan opdrag, as daar twee is, dan start_command+stop_command.
    As jy 'n fout maak, sal knockd stilbly, maar sal nie werk nie.
  • daarom
    Teoreties kan UDP gebruik word. In die praktyk het ek tcp en udp gemeng, en die kliënt van die strand in Bali kon die hek net die vyfde keer oopmaak. Omdat TCP opgedaag het wanneer dit nodig was, maar UDP is nie 'n feit nie. Maar dit is weer 'n kwessie van smaak.
  • volgorde
    Die implisiete hark is dat die rye nie moet sny nie ... hoe om dit te stel ...

Byvoorbeeld, hierdie:

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

Deur skop 11111 oop sal wag vir die volgende skop by 22222. Na hierdie (22222) skop sal dit egter begin werk naby en alles sal breek. Dit hang ook af van die kliënt se vertraging. Sulke dinge ©.

iptables

As dit in /etc/sysconfig/iptables is, is dit:

*nat
:PREROUTING ACCEPT [0:0]

Dit pla ons nie regtig nie, so hier is dit:

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

Dit meng in.

Aangesien knockd reëls aan die einde van die INPUT-ketting byvoeg, sal ons verwerping kry.

En om hierdie verwerping af te skakel beteken om die motor vir alle winde oop te maak.

Om nie in iptables te verdwaal wat om voor wat in te voeg nie (soos hierdie mense stel voor) kom ons maak dit eenvoudiger:

  • verstek op CentOS/Fedora 1 die reël ("wat nie verbode is nie, word toegelaat nie") sal vervang word deur die teenoorgestelde,
  • en ons verwyder die laaste reël.

Die resultaat moet wees:

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

Jy kan natuurlik REJECT doen in plaas van DROP, maar met DROP sal die lewe vir bots lekkerder wees.

3. Kliënt

Hierdie plek is die interessantste (uit my oogpunt), aangesien jy nie net van enige strand af moet werk nie, maar ook vanaf enige toestel.

In beginsel is 'n aantal kliënte op gelys Online projek, maar dit is uit dieselfde reeks "alles is op die internet." Daarom sal ek lys wat hier en nou by my vingers werk.

Wanneer u 'n kliënt kies, moet u seker maak dat dit die vertragingsopsie tussen pakkies ondersteun. Ja, daar is verskille tussen strande en 100 megabits waarborg nooit dat pakkies in die regte volgorde op die regte tyd vanaf 'n gegewe plek sal aankom nie.

En ja, wanneer jy 'n kliënt opstel, moet jy self die vertraging kies. Te veel time-out - bots sal aanval, te min - die kliënt sal nie tyd hê nie. Te veel vertraging - die kliënt sal dit nie betyds maak nie of daar sal 'n konflik van idiote wees (sien "harke"), te min - die pakkies sal op die internet verlore raak.

Met time-out=5s, vertraging=100..500ms is 'n heeltemal werkende opsie

Windows

Maak nie saak hoe snaaks dit klink nie, dit is nogal nie-triviaal om 'n duidelike klopkliënt vir hierdie platform te Google. Sodanig dat die CLI vertraging, TCP ondersteun - en sonder boë.

Alternatiewelik kan jy probeer hierdie is dit. My Google is blykbaar nie 'n koek nie.

Linux

Alles is eenvoudig hier:

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

MacOS

Die maklikste manier is om die port vanaf homebrew te installeer:
brew install knock
en teken die nodige bondellêers vir opdragte soos:

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

IOS

'n Werkopsie is KnockOnD (gratis, vanaf die winkel).

Android

"Klop op hawens" Nie adverteer nie, maar dit werk net. En die ontwikkelaars reageer baie goed.

PS markdown op Habré, natuurlik, God seën hom eendag...

UPD 1: te danke aan aan 'n goeie mens gevind werkende kliënt onder Windows.
UPD 2: Nog een goeie man het my daaraan herinner dat dit nie altyd nuttig is om nuwe reëls aan die einde van iptables te plaas nie. Maar - dit hang af.

Bron: will.com

Voeg 'n opmerking