Linux tips & trucs: server, open

Voor degenen die zichzelf en hun dierbaren overal ter wereld toegang moeten geven tot hun servers via SSH/RDP/anders, een kleine RTFM/spur.

We moeten het doen zonder VPN en andere toeters en bellen, vanaf elk apparaat dat voorhanden is.

En zodat je niet te veel hoeft te oefenen met de server.

Het enige wat je hiervoor nodig hebt is klopte, gestrekte armen en 5 minuten werk.

“Alles staat op internet”, natuurlijk (zelfs op Habré), maar als het om een ​​specifieke implementatie gaat, begint het hier...

We zullen oefenen met Fedora/CentOS als voorbeeld, maar dat maakt niet uit.

De uitloper is geschikt voor zowel beginners als experts op dit gebied, dus er zullen opmerkingen zijn, maar deze zullen korter zijn.

1. Serveerster

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

  • configureer het (bijvoorbeeld 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

    Het “openingsgedeelte” is ingesteld om na 1 uur automatisch te sluiten. Je weet maar 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
    ...

  • vooruit:

    service iptables restart
    service knockd start

  • je kunt RDP toevoegen aan de virtuele Windows Server die binnenin draait (/etc/knockd.conf; vervang de interfacenaam naar jouw smaak):

    [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

    We volgen al onze kicks van de client op de server met het commando iptables -S.

2. Gids voor harken

knockd.conf:

De mana bevat ook alles (maar dit is onnauwkeurig), maar knockd is een vriend die nogal gierig is met berichten, dus je moet heel voorzichtig zijn.

  • versie
    In de Fedora/CentOS repository's is de laatste klop voor vandaag 0.63. Wie UDP wil, zoek naar pakketten van 0.70.
  • interface
    In de standaard Fedora/CentOS-configuratie is deze regel Geen. Voeg het toe met je handen, anders werkt het niet.
  • time-out
    Hier kunt u kiezen op basis van uw smaak. Het is noodzakelijk dat de client genoeg tijd heeft voor alle kicks - en de poortscannerbot zal kapot gaan (en 146% zal scannen).
  • starten/stoppen/commando.
    Als er één commando is, dan commando, als er twee zijn, dan start_command+stop_command.
    Als u een fout maakt, blijft knockd stil, maar werkt niet.
  • daarom
    Theoretisch kan UDP worden gebruikt. In de praktijk heb ik tcp en udp gemengd, en de klant van het strand op Bali kon de poort pas voor de vijfde keer openen. Omdat TCP arriveerde toen het nodig was, maar UDP is geen feit. Maar dit is wederom een ​​kwestie van smaak.
  • volgorde
    De impliciete hark is dat de reeksen elkaar niet mogen kruisen... hoe zeg je dat...

Dit bijvoorbeeld:

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

Via kick 11111 open zal wachten op de volgende kick op 22222. Na deze (22222) kick zal het echter beginnen te werken dichtbij en alles zal kapot gaan. Dit is mede afhankelijk van de vertraging van de klant. Zulke dingen ©.

iptables

Als in /etc/sysconfig/iptables dit is:

*nat
:PREROUTING ACCEPT [0:0]

Het stoort ons niet echt, dus hier is het:

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

Het interfereert.

Omdat knockd regels toevoegt aan het einde van de INPUT-keten, krijgen we een afwijzing.

En het uitschakelen van deze afwijzing betekent dat de auto voor alle winden wordt geopend.

Om niet te verdwalen in iptables, wat moet je vóór wat invoegen (zoals dit mensen suggereren) laten we het eenvoudiger maken:

  • standaard op CentOS/Fedora eerste de regel (“wat niet verboden is, is toegestaan”) wordt vervangen door het tegenovergestelde,
  • en we verwijderen de laatste regel.

Het resultaat zou moeten zijn:

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

Je kunt natuurlijk REJECT doen in plaats van DROP, maar met DROP wordt het leven leuker voor bots.

3. Klant

Deze plek is het meest interessant (vanuit mijn oogpunt), omdat je niet alleen vanaf elk strand moet werken, maar ook vanaf elk apparaat.

In principe wordt een aantal opdrachtgevers genoteerd Online project, maar dit komt uit dezelfde serie ‘alles staat op internet’. Daarom zal ik opsommen wat hier en nu binnen handbereik werkt.

Wanneer u een client kiest, moet u ervoor zorgen dat deze de vertragingsoptie tussen pakketten ondersteunt. Ja, er zijn verschillen tussen stranden en 100 megabit garandeert nooit dat pakketten vanaf een bepaalde locatie in de juiste volgorde op het juiste moment aankomen.

En ja, bij het aanmaken van een client moet je zelf de vertraging selecteren. Te veel time-out - bots zullen aanvallen, te weinig - de client zal geen tijd hebben. Te veel vertraging - de klant haalt het niet op tijd of er ontstaat een conflict van idioten (zie "rakes"), te weinig - de pakketten gaan verloren op internet.

Met time-out=5s is vertraging=100..500ms een volledig werkende optie

Dakramen en raamkozijnen

Hoe grappig het ook klinkt, het is nogal niet triviaal dat Google een duidelijke knock-client voor dit platform is. Zodanig dat de CLI vertraging, TCP ondersteunt - en zonder buigingen.

Als alternatief kunt u het proberen dit is. Blijkbaar is mijn Google geen taart.

Linux

Het is hier eenvoudig:

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

MacOS

De eenvoudigste manier is om de port vanuit homebrew te installeren:
brew install knock
en teken de benodigde batchbestanden voor opdrachten zoals:

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

iOS

Een werkende optie is KnockOnD (gratis, uit de winkel).

Android

"Klop op poorten" Geen reclame, maar het werkt gewoon. En de ontwikkelaars zijn behoorlijk responsief.

PS-korting op Habré, natuurlijk, God zegene hem ooit...

UPD1: dankzij aan een goed mens gevonden werkende klant onder Windows.
UPD2: Nog een goede man herinnerde me eraan dat het plaatsen van nieuwe regels aan het einde van iptables niet altijd nuttig is. Maar - het hangt ervan af.

Bron: www.habr.com

Voeg een reactie