Linux tips & tricks: Server, open up

For those who need to ensure access to their servers from anywhere in the world via SSH/RDP/other — a small RTFM/cheat sheet.

We need to do without VPNs and other frills, from any device at hand.

And so that we don't have to juggle too much with the server.

Everything you need for this is — knockd, skilled hands, and 5 minutes of work.

"Everything is on the internet", of course (even at Habr), but when it comes to concrete implementation — that's where it all begins...

We'll practice using Fedora/CentOS as an example, but that's not important.

The cheat sheet is suitable for both beginners and veterans of the field, so there will be comments, but shorter.

1. Server

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

  • configure it (for example on 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

    "The opening part" is set to auto-close in 1 hour. 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
    ...

  • go ahead:

    service iptables restart
    service knockd start

  • you can add RDP on a virtual Windows Server running inside ( /etc/knockd.conf; substitute the interface name to your liking):

    [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 keep track of all our client pings on the server with the command iptables -S.

2. Guide to pitfalls

knockd.conf:

There's everything in the manuals too (but this is not certain), however, knockd is quite stingy with messages, so you need to be very attentive.

  • version
    In the Fedora/CentOS repositories, the latest knockd is 0.63. If you want UDP — look for version 0.70.
  • interface
    In the default configuration of Fedora/CentOS this line manglende. You need to add it manually, otherwise it won't work.
  • timeout
    Here you can choose as you like. It needs to be enough time for the client to make all pings — and to block the bot port scanner (and they will be scanning at 146%).
  • start/stop/command.
    Hvis der er ét kommando - sÄ command, hvis der er to - sÄ start_command+stop_command.
    Hvis du laver en fejl - vil knockd vĂŠre stille, men det vil ikke fungere.
  • proto
    Teoretisk kan man bruge UDP. I praksis blandede jeg tcp og udp, og klienten fra stranden i Bali kunne kun Äbne sin port efter femte forsÞg. For TCP kom pakkerne, men for UDP var det ikke sikkert. Men det er en smagssag, igen.
  • sekvens
    Implicit faldgruber er, at sekvenserne ikke mÄ overlappe... hvordan skal jeg sige det...

For eksempel, sÄdan her:

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

Ved spark 11111 open vil vente pÄ nÊste spark ved 22222. Men ved dette (22222) spark vil det begynde at fungere close og alt vil gÄ i stykker. Dette afhÊnger ogsÄ af forsinkelsen fra klienten. SÄdan er det ©.

iptables

Hvis i /etc/sysconfig/iptables er dette her:

*nat
:PREROUTING ACCEPT [0:0]

det generer os ikke meget, sÄ er dette her:

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

det gĂžr det ikke.

Da knockd tilfÞjer regler til slutningen af INPUT kÊden, vil vi fÄ reject.

At deaktivere dette reject - det ville vÊre at Äbne maskinen for alle vinde.

For ikke at blive forvirret med iptables om hvad der skal indsÊttes hvornÄr (som folk foreslÄr) vil vi gÞre det lettere: standard

  • i CentOS/Fedora den fĂžrste regel ("hvad ikke er forbudt - er tilladt") vil vi ĂŠndre til det modsatte, og den sidste regel fjerner vi.
  • Resultatet skal blive:

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

Man kan selvfĂžlgelig gĂžre det til REJECT i stedet for DROP, men med DROP vil bots have det sjovere.

3. Klient

Her bliver det mest interessante (efter min mening), da man skal kunne arbejde ikke kun fra enhver strand, men ogsÄ fra enhver enhed.

I princippet er en rÊkke klienter nÊvnt pÄ

projektet, men det er i samme kategori som "alt er pÄ internettet". Derfor vil jeg nÊvne det, som virker for mig lige nu. websitet NÄr du vÊlger en klient, skal du sikre dig, at den understÞtter muligheder for forsinkelse mellem pakkerne. Ja, strande varierer, og 100 megabit garanterer ikke pakkerne ankommer i den rigtige rÊkkefÞlge pÄ det rigtige tidspunkt fra dette sted.

Og ja - nÄr du konfigurerer klienten, skal du justere forsinkelsen selv. For meget timeout - bots vil angribe, for lidt - klienten kan ikke fÞlge med. For meget delay - klienten kan ikke fÞlge med, eller der vil vÊre konflikter med gentagne spark (se "faldgruber"), for lidt - pakkerne vil fortsÊtte med at fare vild pÄ internettet.

Ved timeout=5s er delay=100..500ms en helt fungerende mulighed.

Som sjovt det lyder, men det er ret kompliceret at finde en ordentlig knock-klient til denne platform. En, der har CLI, understĂžtter delay, TCP - og uden unĂždvendige ting.

Windows

Det lyder mĂ„ske morsomt, men det er ret vanskeligt at finde en ordentlig knock-klient til denne platform. En, der er CLI-baseret, understĂžtter forsinkelse, TCP – og uden nogen unĂždvendige detaljer.

Som en mulighed kan man prĂžve dette her. Åbenbart er min Google ikke sĂ„ god.

Linux

Det er meget enkelt:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Det nemmeste er at installere porten fra homebrew:
brew install knock
og lave de nĂždvendige batchfiler i form af:

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

iOS

En fungerende lþsning — KnockOnD (gratis, fra butikken).

Android

«Knock on Ports». Ikke reklame, det virker bare. Og udviklerne er ret lydhÞre.

P.S. Markdown pÄ Habré, mÄ lad os hÄbe, at det engang bliver bedre...

UPD1: takket vĂŠre en god person blev fundet en fungerende klient til Windows.
UPD2: endnu en god person mindede mig om, at det ikke altid er nyttigt at tilfþje nye regler til bunden af iptables. Men — det afhénger.

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster