Συμβουλές και κόλπα Linux: διακομιστής, άνοιγμα

Για όσους πρέπει να παρέχουν στους εαυτούς τους, στα αγαπημένα τους πρόσωπα, πρόσβαση στους διακομιστές τους από οπουδήποτε στον κόσμο μέσω SSH/RDP/άλλου, ένα μικρό RTFM/spur.

Πρέπει να κάνουμε χωρίς VPN και άλλες καμπάνες και σφυρίχτρες, από οποιαδήποτε συσκευή στο χέρι.

Και για να μην χρειάζεται να ασκείστε πολύ με τον διακομιστή.

Το μόνο που χρειάζεστε για αυτό είναι χτύπησε, ίσια χέρια και 5 λεπτά δουλειά.

"Όλα είναι στο Διαδίκτυο", φυσικά (ακόμη και στο Habré), αλλά όταν πρόκειται για μια συγκεκριμένη υλοποίηση, εδώ ξεκινάει...

Θα εξασκηθούμε χρησιμοποιώντας το Fedora/CentOS ως παράδειγμα, αλλά αυτό δεν έχει σημασία.

Το κίνητρο είναι κατάλληλο τόσο για αρχάριους όσο και για ειδικούς σε αυτό το θέμα, επομένως θα υπάρχουν σχόλια, αλλά θα είναι πιο σύντομα.

1. Διακομιστής

  • εγκατάσταση knock-server:
    yum/dnf install knock-server

  • ρυθμίστε το (για παράδειγμα στο 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

    Το τμήμα "ανοίγματος" έχει ρυθμιστεί να κλείνει αυτόματα μετά από 1 ώρα. Ποτέ δεν ξέρεις...

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

  • προς τα εμπρός:

    service iptables restart
    service knockd start

  • μπορείτε να προσθέσετε RDP στον εικονικό διακομιστή Windows που περιστρέφεται μέσα (/etc/knockd.conf; αντικαταστήστε το όνομα της διεπαφής για να ταιριάζει με το γούστο σας):

    [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

    Παρακολουθούμε όλα τα χτυπήματά μας από τον πελάτη στον διακομιστή με την εντολή iptables -S.

2. Οδηγός για τσουγκράνες

knockd.conf:

Το μάνα περιέχει επίσης τα πάντα (αλλά αυτό είναι ανακριβές), αλλά ο knockd είναι ένας φίλος που είναι αρκετά τσιγκούνης με τα μηνύματα, επομένως πρέπει να είστε πολύ προσεκτικοί.

  • εκδοχή
    Στα αποθετήρια Fedora/CentOS, το τελευταίο knockd για σήμερα είναι 0.63. Ποιος θέλει UDP - αναζητήστε πακέτα 0.70.
  • διεπαφή
    Στην προεπιλεγμένη διαμόρφωση Fedora/CentOS αυτή η γραμμή όχι. Προσθέστε με τα χέρια σας, διαφορετικά δεν θα λειτουργήσει.
  • χρονικού ορίου
    Εδώ μπορείτε να επιλέξετε ανάλογα με το γούστο σας. Είναι απαραίτητο ο πελάτης να έχει αρκετό χρόνο για όλα τα χτυπήματα - και το bot του σαρωτή θύρας θα χαλάσει (και το 146% θα σαρώσει).
  • έναρξη/διακοπή/εντολή.
    Αν υπάρχει μία εντολή, τότε εντολή, αν είναι δύο, τότε start_command+stop_command.
    Εάν κάνετε λάθος, το knockd θα παραμείνει σιωπηλό, αλλά δεν θα λειτουργήσει.
  • proto
    Θεωρητικά, το UDP μπορεί να χρησιμοποιηθεί. Στην πράξη, ανακάτεψα tcp και udp, και ο πελάτης από την παραλία στο Μπαλί μπόρεσε να ανοίξει την πύλη μόνο την πέμπτη φορά. Επειδή το TCP έφτασε όταν χρειαζόταν, αλλά το UDP δεν είναι γεγονός. Αλλά αυτό είναι και πάλι θέμα γούστου.
  • ακολουθία
    Η σιωπηρή γκανιότα είναι ότι οι ακολουθίες δεν πρέπει να τέμνονται... πώς να το θέσω...

Για παράδειγμα, αυτό:

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

Με κλωτσιά 11111 ανοίξτε θα περιμένει το επόμενο λάκτισμα στο 22222. Ωστόσο, μετά από αυτό το (22222) λάκτισμα θα αρχίσει να λειτουργεί κοντά και όλα θα σπάσουν. Αυτό εξαρτάται και από την καθυστέρηση του πελάτη. Τέτοια πράγματα ©.

iptables

Εάν στο /etc/sysconfig/iptables αυτό είναι:

*nat
:PREROUTING ACCEPT [0:0]

Δεν μας ενοχλεί πραγματικά, οπότε ορίστε:

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

Παρεμβαίνει.

Εφόσον το knockd προσθέτει κανόνες στο τέλος της αλυσίδας INPUT, θα λάβουμε απόρριψη.

Και η απενεργοποίηση αυτής της απόρριψης σημαίνει άνοιγμα του αυτοκινήτου σε όλους τους ανέμους.

Για να μην χαθείτε στα iptables τι να εισάγετε πριν από τι (όπως αυτό ανθρώπους προτείνουμε) ας το κάνουμε πιο απλό:

  • Προκαθορισμένο στο CentOS/Fedora πρώτα ο κανόνας («ό,τι δεν απαγορεύεται επιτρέπεται») θα αντικατασταθεί από το αντίθετο,
  • και αφαιρούμε τον τελευταίο κανόνα.

Το αποτέλεσμα θα πρέπει να είναι:

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

Μπορείτε, φυσικά, να κάνετε REJECT αντί για DROP, αλλά με το DROP η ζωή θα είναι πιο διασκεδαστική για τα bots.

3. Πελάτης

Αυτό το μέρος είναι το πιο ενδιαφέρον (από την άποψή μου), αφού πρέπει να εργάζεστε όχι μόνο από οποιαδήποτε παραλία, αλλά και από οποιαδήποτε συσκευή.

Καταρχήν, ένας αριθμός πελατών παρατίθεται στη λίστα Σε απευθείας σύνδεση έργο, αλλά αυτό είναι από την ίδια σειρά "όλα είναι στο Διαδίκτυο". Ως εκ τούτου, θα απαριθμήσω τι λειτουργεί στα χέρια μου εδώ και τώρα.

Όταν επιλέγετε έναν πελάτη, πρέπει να βεβαιωθείτε ότι υποστηρίζει την επιλογή καθυστέρησης μεταξύ των πακέτων. Ναι, υπάρχουν διαφορές μεταξύ των παραλιών και τα 100 megabit δεν εγγυώνται ποτέ ότι τα πακέτα θα φτάσουν με τη σωστή σειρά τη σωστή στιγμή από μια δεδομένη τοποθεσία.

Και ναι, όταν ρυθμίζετε έναν πελάτη, πρέπει να επιλέξετε μόνοι σας την καθυστέρηση. Πάρα πολύ timeout - τα bots θα επιτεθούν, πολύ λίγο - ο πελάτης δεν θα έχει χρόνο. Πάρα πολύ μεγάλη καθυστέρηση - ο πελάτης δεν θα τα καταφέρει εγκαίρως ή θα υπάρξει σύγκρουση ηλιθίων (βλ. "τσάντες"), πολύ μικρή - τα πακέτα θα χαθούν στο Διαδίκτυο.

Με timeout=5s, η καθυστέρηση=100..500ms είναι μια απόλυτα λειτουργική επιλογή

Windows

Ανεξάρτητα από το πόσο αστείο ακούγεται, δεν είναι καθόλου ασήμαντο να Google ένας ξεκάθαρος πελάτης για αυτήν την πλατφόρμα. Έτσι ώστε το CLI να υποστηρίζει καθυστέρηση, TCP - και χωρίς τόξα.

Ως επιλογή μπορείτε να δοκιμάσετε αυτό είναι. Προφανώς το Google μου δεν είναι κέικ.

Linux

Είναι απλό εδώ:

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

MacOS

Ο ευκολότερος τρόπος είναι να εγκαταστήσετε τη θύρα από το homebrew:
brew install knock
και σχεδιάστε τα απαραίτητα αρχεία δέσμης για εντολές όπως:

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

iOS

Μια επιλογή εργασίας είναι το KnockOnD (δωρεάν, από το κατάστημα).

Android

"Knock on Ports" Όχι διαφήμιση, αλλά λειτουργεί. Και οι προγραμματιστές ανταποκρίνονται αρκετά.

Υ.Γ. Σημείωση στον Χαμπρέ, φυσικά, ο Θεός να τον έχει καλά μια μέρα...

UPD1: χάρη σε σε έναν καλό άνθρωπο βρέθηκαν εργαζόμενος πελάτης κάτω από τα Windows.
UPD2: Αλλο ένα καλός άνθρωπος μου υπενθύμισε ότι η τοποθέτηση νέων κανόνων στο τέλος του iptables δεν είναι πάντα χρήσιμη. Αλλά - εξαρτάται.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο