Linux tips & tricks: server, open u

Voor degenen die zichzelf toegang willen bieden tot hun servers, waar ook ter wereld, via SSH/RDP/een andere optie — een kleine RTFM/handleiding.

We willen zonder VPN en andere fratsen werken, met elk apparaat binnen handbereik.

En zodat we niet teveel hoeven te rommelen met de server.

Alles wat daarvoor nodig is — knockd, vaardige handen en 5 minuten werk.

"Op internet staat alles", dat klopt (zelfs op Habr), maar als het aankomt op concrete implementaties — daar begint het...

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

De handleiding is geschikt voor zowel beginners als doorgewinterde mensen, dus er zullen opmerkingen zijn, maar korter.

1. Server

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

  • stel het in (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" openende deel is ingesteld op automatisch sluiten na 1 uur. Just in case...

  • /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 een draaiende virtuele Windows Server (/etc/knockd.conf; gebruik de interface naam die je wilt):

    [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 clientpings op de server met het commando iptables -S.

2. Gids door de struikels

knockd.conf:

In de manual staat ook alles (maar dat is niet zeker), echter knockd is een behoorlijk spaarzame vriend wat betreft berichten, dus wees extra aandachtig.

  • versie
    In de repositories van Fedora/CentOS is de laatste knockd versie vandaag — 0.63. Wie UDP wil — zoek naar pakketten 0.70.
  • interface
    In de standaardconfiguratie van Fedora/CentOS staat deze regel ontbreekt. Handmatig toevoegen, anders werkt het niet.
  • timeout
    Hier zelf kiezen wat je wilt. Het moet zo zijn dat de client voldoende tijd heeft voor alle pings — en dat de bot-poortscanner het moeilijk krijgt (want ze zullen 146% scannen).
  • start/stop/command.
    Als er één team is, dan command, als er twee zijn, dan start_command+stop_command.
    Als je een fout maakt, zal knockd zwijgen, maar niet werken.
  • proto
    In theorie kun je UDP gebruiken. In de praktijk heb ik tcp en udp gemengd, en de klant op het strand in Bali kon de poort pas openen na de vijfde poging. Want TCP kwam aan wanneer dat moest, maar UDP is niet zeker. Maar dat is weer een kwestie van smaak.
  • sequence
    De onzichtbare valkuil is dat de sequenties elkaar niet mogen overlappen... hoe zeg je dat...

Bijvoorbeeld, zo:

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

Bij een schoppende 11111 open zal hij wachten op de volgende schoppende op 22222. Echter, bij deze (22222) schoppende zal hij beginnen met werken sluiten en alles zal kapotgaan. Dit hangt ook af van de vertraging van de client. Zo gaat dat ©.

iptables

Als dit in /etc/sysconfig/iptables staat:

*nat
:PREROUTING ACCEPT [0:0]

doet ons weinig pijn, dan is dit:

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

toch hinderlijk.

Aangezien knockd regels aan het einde van de INPUT-keten toevoegt, zullen we reject krijgen.

En dit reject uitschakelen betekent dat je de machine aan alle winden blootstelt.

Om niet te ergeren aan iptables wat waar voor wat moet komen (zoals mensen voorstellen) laten we het eenvoudiger maken: de standaard

  • in CentOS/Fedora de eerste regel (‘wat niet verboden is, is toegestaan’) vervangen door het tegenovergestelde, en de laatste regel verwijderen.
  • Uiteindelijk zou het er als volgt uit moeten zien:

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

Je kunt natuurlijk in plaats van DROP ook REJECT doen, maar met DROP hebben bots een beter leven.

3. Klant

Dit is het meest interessante deel (tenzij je mij vraagt), omdat je niet alleen vanaf elk strand moet kunnen werken, maar ook vanaf elk apparaat.

In principe zijn een aantal klanten vermeld op

het project, maar dat valt ook in de categorie 'alles is te vinden op internet'. Daarom zal ik noemen wat hier en nu bij mij werkt. website Bij het kiezen van een klant moet je ervoor zorgen dat deze de optie delay tussen de pakketten ondersteunt. Ja, het strand is het strand, maar 100 megabit garandeert geen correcte volgorde van pk's op het juiste moment vanuit deze locatie.

En ja — bij het configureren van de client moet je de delay zelf afstemmen. Te veel timeout — bots vallen aan, te weinig — de klant kan niet bijbenen. Te veel delay — de klant kan niet bijbenen of er zijn conflicten van schoppen (zie 'vallen'), te weinig — pakketten dwalen af in het internet.

Bij timeout=5s is delay=100..500ms een prima werkbare optie.

Hoe vreemd het ook klinkt, het is vrij moeilijk om een duidelijke knock-client voor dit platform te vinden. Een die CLI ondersteunt, delay heeft, TCP — en zonder tierelantijnen.

Windows

Het is moeilijk te geloven, maar een duidelijke knock-client voor dit platform vinden is best uitdagend. Eén die CLI ondersteunt, delay heeft, TCP — en zonder franjes.

Je kunt bijvoorbeeld proberen dit. Blijkbaar is mijn Google niet zo goed.

Linux

Hier is alles eenvoudig:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Het eenvoudigst is om de poort van homebrew te installeren:
brew install knock
en maak de benodigde batchbestanden zoals:

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

iOS

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

Android

«Knock on Ports». Geen reclame, maar hij werkt gewoon. En de ontwikkelaars zijn behoorlijk responsief.

P.S. markdown op Habr, dat zal ooit wel goedkomen…

UPD1: dankzij een goed persoon is er een werkende client voor Windows.
UPD2: nog een goede persoon herinnerde me eraan dat het niet altijd nuttig is om nieuwe regels aan het einde van iptables toe te voegen. Maar — het hangt ervan af.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster