Για όσους πρέπει να παρέχουν στους εαυτούς τους, στα αγαπημένα τους πρόσωπα, πρόσβαση στους διακομιστές τους από οπουδήποτε στον κόσμο μέσω SSH/RDP/άλλου, ένα μικρό RTFM/spur.
Πρέπει να κάνουμε χωρίς VPN και άλλες καμπάνες και σφυρίχτρες, από οποιαδήποτε συσκευή στο χέρι.
Και για να μην χρειάζεται να ασκείστε πολύ με τον διακομιστή.
Το μόνο που χρειάζεστε για αυτό είναι
"Όλα είναι στο Διαδίκτυο", φυσικά (ακόμη και στο
Θα εξασκηθούμε χρησιμοποιώντας το 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 - και χωρίς τόξα.
Ως επιλογή μπορείτε να δοκιμάσετε
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: χάρη σε
UPD2: Αλλο ένα
Πηγή: www.habr.com