Βήματα για τη διασφάλιση του VPS μας

Αυτό το σεμινάριο δείχνει πώς να προετοιμάσετε και να ασφαλίσετε έναν εικονικό ιδιωτικό διακομιστή (VPS) με το Debian GNU / Linux. Πριν ξεκινήσουμε, θεωρούνται ορισμένα πράγματα:

  1. Έχετε ένα ενδιάμεσο επίπεδο εξοικείωσης με το GNU / Linux.
  2. Υπάρχει ένα VPS για προσωπική χρήση στο οποίο έχουμε πρόσβαση μέσω SSH.
  3. Το VPS διαθέτει το αποκλειστικό εξωτερικό ipv4 250.250.250.155 και ο πάροχος μας κατέχει το μπλοκ 250.250.0.0/16. (1)
  4. Στο VPS μας θα έχουμε ενεργοποιημένες μόνο τις υπηρεσίες http, https και ssh για πρόσβαση από έξω.
  5. Το εξωτερικό DNS δεν θα ενεργοποιηθεί αφού συνήθως γίνεται στον πίνακα του παρόχου μας. (2)
  6. Θα λειτουργήσει ως υπερχρήστη.

εγκατάσταση

Ως πρώτο βήμα, ας ενημερώσουμε τον διακομιστή και εγκαταστήσουμε μερικά πακέτα που θα χρειαζόμαστε:

# aptitude update & aptitude safe-upgrade # aptitude -RvW install dropbear gesftpserver sslh iptables-persistent ulogd fail2ban nginx-light apache2-utils dnsutils telnet ghostscript poppler-utils zip unzip unrar-free p7zip-full λιγότερα multitail tee mc

διαμόρφωση

Τώρα πρόκειται να δημιουργήσουμε έναν χρήστη εργασίας. Η εργασία ως root σε έναν διακομιστή είναι ανασφαλής, επομένως θα δημιουργήσουμε πρώτα έναν ειδικό χρήστη:

Χειριστής adduser usermod -aG sudo

Η πρώτη εντολή δημιουργεί τον χρήστη χειριστή, η δεύτερη την προσθέτει στην ομάδα sudo, που θα επιτρέψει την εκτέλεση εφαρμογών ως root.

Προσαρμόστε τα δικαιώματα για σούπερ χρήστες

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

visudo

Αυτή η εντολή επιτρέπει βασικά την τροποποίηση του αρχείου / etc / sudoers; στην οποία πρέπει να περιέχουν αυτές τις γραμμές:

Προεπιλογές env_reset, timestamp_timeout = 0% sudo ALL = (ALL: ALL) ALL

Στην πρώτη γραμμή η επιλογή προστίθεται στις προεπιλεγμένες τιμές timestamp_timeout το οποίο σας επιτρέπει να ορίσετε τον χρόνο λήξης (σε λεπτά) του κωδικού πρόσβασης κατά την εκτέλεση της εντολής sudo. Η προεπιλογή είναι 5, αλλά αυτό μερικές φορές δεν είναι ασφαλές για δύο λόγους:

  1. Εάν ακούσια αφήσουμε τον υπολογιστή μας συνδεδεμένο πριν από τη λήξη του κωδικού πρόσβασης, κάποιος θα μπορούσε να εκτελέσει μια εντολή ως root χωρίς περιορισμούς.
  2. Εάν, λόγω άγνοιας, εκτελέσουμε μια εφαρμογή ή σενάριο που περιέχει κακόβουλο κώδικα πριν από τη λήξη του κωδικού πρόσβασης, η εφαρμογή θα μπορούσε να έχει πρόσβαση στο σύστημά μας ως υπερχρήστη, χωρίς τη ρητή συγκατάθεσή μας.

Έτσι, για να αποφύγουμε τους κινδύνους, έχουμε ορίσει την τιμή στο μηδέν, δηλαδή, κάθε φορά που εκτελείται η εντολή sudo, θα πρέπει να εισάγεται ο κωδικός πρόσβασης. Εάν μια αρνητική τιμή ορίζεται ως -1, το αποτέλεσμα είναι ότι ο κωδικός πρόσβασης δεν λήγει ποτέ, κάτι που θα παράγει το αντίθετο αποτέλεσμα από αυτό που θέλουμε.

Στη δεύτερη γραμμή διευκρινίζεται ότι η ομάδα sudo μπορεί να εκτελέσει οποιαδήποτε εντολή σε οποιονδήποτε υπολογιστή, κάτι που είναι συνηθισμένο, αν και μπορεί να προσαρμοστεί. (3) Υπάρχουν εκείνοι που για ευκολία θέτουν τη γραμμή ως εξής για να αποφύγουν να πληκτρολογήσουν τον κωδικό πρόσβασης:

% sudo ALL = (ALL: ALL) NOPASSWD: ALL

Ωστόσο, όπως εξηγήσαμε προηγουμένως, αυτό είναι επικίνδυνο και επομένως δεν συνιστάται.

Απενεργοποίηση επανεκκίνησης

Για λόγους ασφαλείας, θα απενεργοποιήσουμε επίσης την επανεκκίνηση χρησιμοποιώντας το συνδυασμό πλήκτρων Ctrl + Alt + Del, για την οποία πρέπει να προσθέσουμε αυτήν τη γραμμή στο αρχείο / etc / inittab:

ca: 12345: ctrlaltdel: / bin / echo "Το Ctrl + Alt + Del έχει απενεργοποιηθεί."

Αντικαταστήστε το OpenSSH με το DropBear

Τα περισσότερα VPS έρχονται με εγκατεστημένο το OpenSSH, το οποίο είναι σίγουρα πολύ χρήσιμο, αλλά αν δεν χρειαστεί να εκμεταλλευτούμε όλες τις λειτουργίες του OpenSSH, υπάρχουν ελαφρύτερες εναλλακτικές λύσεις για ένα VPS, όπως dropbear, το οποίο συνήθως είναι αρκετό για τακτική χρήση. Ωστόσο, ένα μειονέκτημα αυτής της εφαρμογής είναι ότι δεν συνοδεύεται από έναν ενσωματωμένο διακομιστή SFTP και γι 'αυτό εγκαταστήσαμε το πακέτο στην αρχή διακομιστής gesftpserver.

Για να ρυθμίσετε το Dropbear, θα τροποποιήσουμε το αρχείο / etc / default / dropbear έτσι ώστε να περιέχει αυτές τις δύο γραμμές:

NO_START = 0 DROPBEAR_EXTRA_ARGS = "- w -p 127.0.0.1:22 -I 1200 -m"

Η πρώτη γραμμή επιτρέπει απλώς την υπηρεσία και η δεύτερη κάνει πολλά πράγματα:

  1. Αποφύγετε την πρόσβαση στο root.
  2. Βάζει την υπηρεσία να ακούει στη θύρα 22 της τοπικής διεπαφής (θα εξηγήσουμε γιατί αργότερα).
  3. Ορίζει τον χρόνο αναμονής (20 λεπτά).

SSLH

Η θύρα 22 (SSH) είναι πολύ γνωστή και είναι γενικά μία από τις πρώτες που προσπαθούν να παραβιάσουν οι εισβολείς, επομένως θα χρησιμοποιήσουμε τη θύρα 443 (SSL). Συμβαίνει ότι αυτή η θύρα χρησιμοποιείται για ασφαλή περιήγηση μέσω HTTPS.

Για αυτό θα χρησιμοποιήσουμε το πακέτο sslh, το οποίο δεν είναι τίποτα περισσότερο από έναν πολυπλέκτη που αναλύει τα πακέτα που φτάνουν στη θύρα 443 και τα δρομολογεί εσωτερικά σε μία υπηρεσία ή άλλη ανάλογα με το αν ο τύπος κίνησης είναι SSH ή SSL.

Το SSLH δεν μπορεί να ακούσει σε μια διεπαφή όπου ήδη ακούγεται μια άλλη υπηρεσία, γι 'αυτό κάναμε προηγουμένως το Dropbear να ακούει στην τοπική διεπαφή.

Τώρα αυτό που πρέπει να κάνουμε είναι να υποδείξουμε τη διασύνδεση και τη θύρα μέσω της οποίας θα πρέπει να ακούει και πού να ανακατευθύνει τα πακέτα ανάλογα με τον τύπο της υπηρεσίας και γι 'αυτό θα τροποποιήσουμε το αρχείο διαμόρφωσης / etc / default / sslh:

DAEMON = / usr / sbin / sslh DAEMON_OPTS = "- user sslh - listen 250.250.250.155:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 - pidfile / var / run / sslh / sslh .pid "RUN = ναι

Τέλος, επανεκκίνηση των υπηρεσιών:

service ssh stop && service dropbear start && service sslh επανεκκίνηση

Μετά την προηγούμενη εντολή, η ασφαλής συνεδρία μας πιθανότατα θα διακοπεί, οπότε αρκεί να συνδεθείτε ξανά, αλλά αυτή τη φορά με τον χρήστη εργασίας και τη χρήση της θύρας 443. Εάν η συνεδρία δεν διακοπεί, συνιστάται να την κλείσετε και να ξεκινήσετε ξανά. με τις κατάλληλες τιμές.

Εάν όλα λειτουργούν σωστά, μπορούμε να συνεχίσουμε να δουλεύουμε ως root και αν το επιθυμούμε, απεγκαταστήστε το OpenSSH:

sudo su - aptitude -r purge openssh-server

Firewall

Το επόμενο πράγμα που θα κάνουμε είναι να διαχωρίσουμε τα αρχεία καταγραφής από το τείχος προστασίας στο ξεχωριστό αρχείο /var/log/firewall.log για να διευκολύνουμε την περαιτέρω ανάλυση, γι 'αυτό εγκαταστήσαμε το πακέτο ulogd κατά την εκκίνηση. Για αυτό θα επεξεργαστούμε το αρχείο /etc/logd.conf για να προσαρμόσετε τη σχετική ενότητα:

[LOGEMU] file = "/ var / log / firewall.log" sync = 1

Στη συνέχεια, θα τροποποιήσουμε το αρχείο περιστροφής εγγραφής / etc / logrotate / ulogd για να διατηρήσετε μια καθημερινή εναλλαγή (με ημερομηνία) και να αποθηκεύσετε συμπιεσμένα σωσίβια στον κατάλογο / var / log / ulog /:

/var/log/ulog/*.log /var/log/firewall.log {daily dateext lostok compress delaycompress sharedscripts create 640 root adm postrotate /etc/init.d/ulogd reload mv /var/log/firewall.log-* .gz / var / log / ulog / endcript}

Στη συνέχεια, θα δημιουργήσουμε τους κανόνες netfilter εκτελώντας τα εξής:

IPT = $ (ποιο iptables) IPEXT = 250.250.250.155 IPEXTBLK = 250.250.0.0 / 16 IPBCAST = 255.255.255.255 $ IPT -F $ IPT -X $ IPT -Z $ IPT -A INPUT -i lo -j ΑΠΟΔΟΧΗ $ IPT - P INPUT DROP $ IPT -P FORWARD DROP $ IPT -P OUTPUT ACCEPT $ IPT -A INPUT -m state --state INVALID -j ULOG --ulog-prefix IN_INVALID $ IPT -A INPUT -p igmp -j ULOG --ulog -prefix IN_IGMP $ IPT -A INPUT -m pkttype -pkt-type broadcast -j ULOG --ulog-prefix IN_BCAST $ IPT -A INPUT -m pkttype --pkt-type multicast -j ULOG --ulog-prefix IN_MCAST $ IPT -A FORWARD -j ULOG --ulog-prefix FORWARD $ IPT -N ICMP_IN $ IPT -A INPUT!  -i lo -p icmp -j ICMP_IN $ IPT -A ICMP_IN -p icmp -f -j ULOG --ulog-prefix IN_ICMP_FRAGMENTED $ IPT -A ICMP_IN -p icmp -m icmp -m μήκος!  - μήκος 28: 1322 -j ULOG --ulog-prefix IN_ICMP_INVALIDSIZE $ IPT -A ICMP_IN -p icmp -m icmp -m hashlimit --hashlimit-above 4 / sec --hashlimit-mode srcip --hashlimit-srcmask 24 - -hashlimit-name icmpflood -j ULOG --ulog-prefix IN_ICMP_FLOOD $ IPT -A ICMP_IN -p icmp -m icmp -m hashlimit --hashlimit-upto 64kb / min --hashlimit-mode srcip --hashlimit-srcmask 24 - hashlimit-name icmpattack -j ULOG --ulog-prefix IN_ICMP_FLOOD $ IPT -A ICMP_IN -p icmp -m icmp -m u32!  --u32 "0x4 & 0x3fff = 0x0" -j ULOG --ulog-prefix IN_ICMP_ATTACK $ IPT -A ICMP_IN -p icmp -m icmp!  --icmp τύπου echo-request -m state --state NEW -j ULOG --ulog-prefix IN_ICMP_INVALID $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type echo-request -j ULOG --ulog- πρόθεμα IN_ICMP $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type echo-request -m limit --limit 1 / sec --limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp - όριο ηχητικής απάντησης τύπου mmp - όριο 2 / δευτερόλεπτο - περιορισμός έκρηξης 4 -j ΑΠΟΔΟΧΗ $ IPT -A ICMP_IN -p icmp -m icmp - όρος προορισμού -mpmp-απρόσιτο όριο 2 / δευτ. --limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type time-υπέρβαση -m όριο - όριο 2 / sec --limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -p icmp -m icmp --icmp-type parameter-problem -m limit --limit 2 / sec --limit-burst 4 -j ACCEPT $ IPT -A ICMP_IN -j ΕΠΙΣΤΡΟΦΗ $ IPT -N UDP_IN $ IPT - ΕΙΣΟΔΟΣ!  -i lo -p udp -j UDP_IN $ IPT -A UDP_IN!  -έι!  -p udp -f -j ULOG --ulog-prefix IN_UDP_FRAGMENTED $ IPT -A UDP_IN -p udp -m udp --sport 53 -m length!  - μήκος 28: 576 -j ULOG --ulog-prefix IN_UDP_DNS_INVALIDSIZE $ IPT -A UDP_IN -p udp -m udp --dport 53 -m -state --state NEW -j ULOG --ulog-prefix IN_UDP_DNSREQUEST $ IPT - Ένα UDP_IN -p udp -m udp --dport 53 -m -state --state NEW -j REJECT --reject-with icmp-port-unreachable $ IPT -A UDP_IN -p udp -m udp!  - αθλητικό 53!  -s $ IPEXTBLK!  -d $ IPBCAST -m state --state NEW -j ULOG --ulog-prefix IN_UDP $ IPT -A UDP_IN -p udp -m udp -m state --state ESTABLISHED, RELATED -j ACCEPT $ IPT -A UDP_IN -j ΕΠΙΣΤΡΟΦΗ $ IPT -N TCP_IN $ IPT - ΕΙΣΟΔΟΣ!  -i lo -p tcp -j TCP_IN $ IPT -A TCP_IN!  -έι!  -p tcp -f -j ULOG --ulog-prefix IN_TCP_FRAGMENTED $ IPT -A TCP_IN -p tcp -m tcp --sport 53 -m state --state ΕΓΚΑΤΑΣΤΑΣΗ, ΣΧΕΤΙΚΟ - μήκος!  --length 513: 1500 -j ULOG --ulog-prefix IN_TCP_DNS_INVALIDSIZE $ IPT -A TCP_IN -p tcp -m tcp --dport 53 -m state --state NEW -j ULOG --ulog-prefix IN_TCP_DNS $ IPT -A TCP_IN -p tcp -m tcp --dport 53 -m state --state NEW -j REJECT --reject-with icmp-port-unreachable $ IPT -A TCP_IN -p tcp -m tcp -m multiport!  -διαστάσεις 80,443 -m κατάσταση - κατάσταση ΝΕΟ -j ULOG --ulog-πρόθεμα IN_TCP $ IPT -A TCP_IN -p tcp -m tcp -m multiport - λιμένες 80,443 -m κατάσταση - κατάσταση ΝΕΟ -m hashlimit - hashlimit-upto 4 / sec --hashlimit-burst 16 --hashlimit-mode srcip --hashlimit-name navreq -j ΑΠΟΔΟΧΗ $ IPT -A TCP_IN -p tcp -m tcp -m multiport --dports 80,443 -m state - κατάσταση ESTABLISHED -m connlimit  --connlimit-above 16 -j ΑΠΟΔΟΧΗ $ IPT -A TCP_IN -p tcp -m tcp -m multiport! 

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

Δεν επιτρέπουν όλα τα VPS την εγκατάσταση επιπλέον μονάδων για το netfilter, αλλά είναι πολύ χρήσιμο PSD, που σας επιτρέπει να αποφύγετε τις σαρώσεις θύρας. Δυστυχώς, αυτή η ενότητα δεν είναι ενσωματωμένη στο netfilter από προεπιλογή, επομένως είναι απαραίτητο να εγκαταστήσετε ορισμένα πακέτα και, στη συνέχεια, να δημιουργήσετε τη λειτουργική μονάδα

aptitude -RvW εγκατάσταση iptables-dev xtables-addons-source module-Assistant module-Assistant --verbose --text-mode auto-install xtables-addons-source

Μόλις ολοκληρωθούν τα παραπάνω, μπορούμε να προσθέσουμε έναν κανόνα ως εξής:

iptables -A INPUT -m psd --psd-weight-threshold 15 --psd-delay-threshold 2000 --psd-lo-port-weight 3 --psd-hi-ports-βάρος 1 -j ULOG --ulog πρόθεμα IN_PORTSCAN

Ο προηγούμενος κανόνας σημαίνει βασικά ότι θα δημιουργήσουμε έναν μετρητή που θα αυξάνεται κατά 3 κάθε φορά που γίνεται προσπάθεια πρόσβασης σε μια θύρα μικρότερη από 1024 και κατά 1 κάθε προσπάθεια πρόσβασης σε μια θύρα μεγαλύτερη από 1023, και όταν αυτός ο μετρητής φτάσει τα 15 σε για χρονικό διάστημα μικρότερο των 20 δευτερολέπτων, τα πακέτα θα εγγραφούν έως Ουλόγκ ως απόπειρα στο portscan. Τα πακέτα θα μπορούσαν να απορριφθούν ταυτόχρονα, αλλά σε αυτήν την περίπτωση σκοπεύουμε να χρησιμοποιήσουμε fail2ban, το οποίο θα διαμορφώσουμε αργότερα.

Μόλις δημιουργηθούν οι κανόνες, πρέπει να λάβουμε ορισμένες προφυλάξεις για να τους κάνουμε μόνιμους, αλλιώς θα τους χάσουμε κατά την επανεκκίνηση του διακομιστή. Υπάρχουν διάφοροι τρόποι για να το επιτύχετε. Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε το πακέτο iptables-persistent που εγκαταστήσαμε στην αρχή, το οποίο αποθηκεύει τους κανόνες /etc/iptables/rules.v4 y /etc/iptables/rules.v6 για ipv6.

iptables-save> /etc/iptables/rules.v4

Στην πραγματικότητα, παρόλο που η χρήση του ipv6 στην Κούβα δεν είναι ακόμη διαδεδομένη, θα μπορούσαμε να δημιουργήσουμε μερικούς βασικούς κανόνες:

IPT = $ (ποιο ip6tables) $ IPT -P INPUT DROP $ IPT -P FORWARD DROP $ IPT -P OUTPUT ACCEPT $ IPT -A INPUT -i lo -j ACCEPT $ IPT -A INPUT! -i lo -m κατάσταση - κατάσταση ΕΓΚΑΤΑΣΤΑΜΕΝΟ, ΣΧΕΤΙΚΟ -j ΑΠΟΔΟΧΗ να μη ρυθμιστεί IPT

Αυτοί οι κανόνες μπορούν επίσης να γίνουν επίμονοι:

ip6tables-save> /etc/iptables/rules.v6

Τέλος, για μεγαλύτερη ασφάλεια, καθαρίζουμε το μητρώο του τείχους προστασίας και επανεκκινούμε τις υπηρεσίες:

echo -n> /var/log/firewall.log υπηρεσία logrotate επανεκκίνηση υπηρεσίας ulogd επανεκκίνηση υπηρεσίας iptables-επίμονη επανεκκίνηση

nginx

Θα χρησιμοποιήσουμε το Nginx ως διακομιστή ιστού, επειδή τα VPS τείνουν να έχουν μειωμένη ποσότητα μνήμης RAM σε σύγκριση με έναν πραγματικό διακομιστή, επομένως γενικά είναι βολικό να έχουμε κάτι ελαφρύτερο από το Apache.

Πριν από τη διαμόρφωση του Nginx, θα δημιουργήσουμε ένα πιστοποιητικό (χωρίς κωδικό πρόσβασης) για χρήση μέσω HTTPS:

cd / etc / nginx openssl genrsa -des3 -out cert.key 4096 cp -v cert.key cert.key.original openssl req -new -key cert.key -out cert.csr openssl rsa -in cert.key.original - out cert.key openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.crt

Μόλις γίνει αυτό, θα δημιουργήσουμε ένα αρχείο κωδικού πρόσβασης για τον χρήστη "elusuario":

htpasswd -c .htpasswd ο χρήστης

Στη συνέχεια, θα τροποποιήσουμε το αρχείο / etc / nginx / sites-available / default για να ορίσετε τις προεπιλεγμένες προτιμήσεις ιστότοπου. Θα μπορούσε να μοιάζει με αυτό:

διακομιστής {server_name localhost; index index.html index.htm default.html default.htm; root / var / www; location / {# ορίστε τη σειρά επαλήθευσης και τη σελίδα για φόρτωση, εάν δεν βρεθεί το URI try_files $ uri $ uri / /index.html; }} διακομιστής {listen 127.0.0.1:443; όνομα_ διακομιστή localhost; index index.html index.htm default.html default.htm; root / var / www; ssl σε; ssl_certificate cert.crt; ssl_certificate_key cert.key; ssl_session_timeout 5μ. # Ενεργοποίηση HTTPS μόνο μέσω TLS (πιο ασφαλές από SSL) ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # δώστε προτίμηση σε κρυπτογράφησης υψηλής αντοχής [HIGH], # μετακινήστε κρυπτογράφους μεσαίας ισχύος [MEDIUM] στο τέλος της λίστας, # απενεργοποιήστε την κρυπτογράφηση χαμηλής ισχύος [LOW] (40 και 56 bits) # απενεργοποιήστε την κρυπτογράφηση με Εξαγωγή αλγορίθμων [EXP] # απενεργοποίηση μηδενικών κρυπτογράφησης [eNULL], χωρίς έλεγχο ταυτότητας [aNULL], SSL (εκδόσεις 2 και 3) και DSS (επιτρέπονται μόνο κλειδιά έως 1024 bit) ! aNULL:! eNULL:! SSLv3:! SSLv2:! DSS; # Προτιμήστε τις μεθόδους κρυπτογράφησης του διακομιστή (από προεπιλογή χρησιμοποιούνται οι πελάτες) ssl_prefer_server_ciphers on; location / {# ενεργοποίηση ελέγχου ταυτότητας auth_basic "Login"; auth_basic_user_file /etc/nginx/.htpasswd; # ορίστε τη σειρά επαλήθευσης και τον κωδικό σελίδας για φόρτωση, εάν το URI try_files $ uri $ uri / = 404 δεν βρέθηκε. # επιτρέψτε τη δημιουργία ενός ευρετηρίου για αυτόματους δείκτες χρηστών με έλεγχο ταυτότητας. autoindex_exact_size off; autoindex_localtime on; }}

Ελέγχουμε ότι η διαμόρφωση είναι σωστή:

nginx-t

Τέλος, επανεκκίνηση της υπηρεσίας:

υπηρεσία nginx επανεκκίνηση

Fail2Ban

Πριν ξεκινήσουμε να ρυθμίζουμε το Fail2Ban, για μεγαλύτερη ασφάλεια διακόπτουμε την υπηρεσία και καθαρίζουμε το μητρώο:

fail2ban-client stop echo -n> /var/log/fail2ban.log

Στη συνέχεια, δημιουργούμε το αρχείο διαμόρφωσης /etc/fail2ban/jail.local με το ακόλουθο προσαρμοσμένο περιεχόμενο:

# Προσαρμοσμένο αρχείο διαμόρφωσης /etc/fail2ban/jail.local # [DEFAULT] findtime = 43200; 12 ώρες bantime = 86400; Maxretry 1 ημέρας = 3; Η απαγόρευση θα τεθεί σε ισχύ μετά την 4η προσπάθεια [ssh] enabled = false [nginx-auth] enabled = true filter = nginx-auth action = iptables-multiport [name = NoAuthFailures, port = "http, https"] logpath = / var / log / nginx * / * error * .log [nginx-badbots] enabled = true filter = apache-badbots action = iptables-multiport [name = BadBots, port = "http, https"] logpath = / var / log / nginx * /*access*.log bantime = 604800; Maxretry 1 εβδομάδας = 0 [nginx-login] enabled = true filter = nginx-login action = iptables-multiport [name = NoLoginFailures, port = "http, https"] logpath = / var / log / nginx * / * πρόσβαση *. log bantime = 1800; 30 λεπτά [nginx-noscript] enabled = true action = iptables-multiport [name = NoScript, port = "http, https"] filter = nginx-noscript logpath = /var/log/nginx*/*access*.log maxretry = 0 [nginx-proxy] enabled = true action = iptables-multiport [name = NoProxy, port = "http, https"] filter = nginx-proxy logpath = /var/log/nginx*/*access*.log bantime = 604800 ; Maxretry 1 εβδομάδας = 0 [firewall] enabled = true action = iptables-multiport [name = Firewall] filter = firewall logpath = /var/log/firewall.log maxretry = 0

Μόλις γίνει αυτό, δημιουργούμε στον κατάλογο /etc/fail2ban/filters.d/ τα ακόλουθα αρχεία:

# /etc/fail2ban/filter.d/nginx-auth.conf # Φίλτρο Auth # Αποκλείει IP που δεν πιστοποιούν τη χρήση βασικού ελέγχου ταυτότητας # [Definition] failregex = Δεν παρέχεται χρήστης / κωδικός πρόσβασης για βασικό έλεγχο ταυτότητας. * πελάτης: user. * δεν βρέθηκε στο. * client: χρήστη. * αναντιστοιχία κωδικού πρόσβασης. * πελάτης: άγνοια =
# /etc/fail2ban/filter.d/nginx-login.conf # Φίλτρο σύνδεσης # Μπλοκάρει IP που δεν πραγματοποιούν έλεγχο ταυτότητας χρησιμοποιώντας τη σελίδα σύνδεσης της εφαρμογής ιστού # Αρχείο καταγραφής πρόσβασης για HTTP 200 + POST / session => αποτυχημένη σύνδεση # [Ορισμός ] failregex = ^ -. * POST / συνεδρίες HTTP / 1 \ .. "200 igneregex =
# /etc/fail2ban/filter.d/nginx-noscript.conf # Φίλτρο Noscript # Αποκλεισμός IP που προσπαθούν να εκτελέσουν σενάρια όπως .php, .pl, .exe και άλλα αστεία σενάρια. # Αγώνες π.χ. # 192.168.1.1 - - "GET /something.php # [Definition] failregex = ^ -. * GET. * (\. Php | \ .asp | \ .exe | \ .pl | \ .cgi | \ scgi) igneregex =
# /etc/fail2ban/filter.d/proxy.conf # Φίλτρο διακομιστή μεσολάβησης # Αποκλεισμός IP που προσπαθούν να χρησιμοποιήσουν διακομιστή ως διακομιστή μεσολάβησης. # Αγώνες π.χ. # 192.168.1.1 - - "ΛΗΨΗ http://www.something.com/ # [Definition] failregex = ^ -. * Λήψη http. * Ignoreregex =
# /etc/fail2ban/filter.d/firewall.conf # Φίλτρο τείχους προστασίας # [Ορισμός] failregex = ^. * IN_ (ΑΚΥΡΟ | PORTSCAN | UDP | TCP |). * SRC = . * $ igneregex =

Τέλος, ξεκινάμε την υπηρεσία και φορτώνουμε τη διαμόρφωση:

fail2ban-service -b fail2ban-client επαναφόρτωση

Επαλήθευση

Ως τελευταίο βήμα, μπορούμε να δούμε τις εγγραφές με ουρά -f o multitail - ακολουθήστε όλα. Στην πραγματικότητα, η τελευταία εφαρμογή προσφέρει το πλεονέκτημα ότι σας επιτρέπει να προβάλλετε πολλά αρχεία ταυτόχρονα και παρέχει βασική επισήμανση σύνταξης.

Σε περίπτωση που ένας λογαριασμός email δεν έχει ρυθμιστεί στο VPS, συνιστάται να απενεργοποιήσετε ένα προειδοποιητικό μήνυμα που εμφανίζεται κατά την εκκίνηση του multitail, για το οποίο θα εκτελέσουμε την ακόλουθη εντολή:

echo "check_mail: 0"> ~ / .multitailrc

Στην πραγματικότητα, θα μπορούσαμε να δημιουργήσουμε ένα ψευδώνυμο (4) για να δούμε τα αρχεία καταγραφής γρήγορα με μια σύντομη εντολή, για παράδειγμα, "flog":

ψευδώνυμο flog = "multitail --follow-all /var/log/firewall.log /var/log/fail2ban.log"

1) Αυτές είναι πλασματικές αξίες.
2) Η ενεργοποίηση άλλων υπηρεσιών είναι εύκολη μόλις καταλάβετε πώς λειτουργεί.
3) Για περισσότερες λεπτομέρειες, τρέξτε man sudoers.
4) Προαιρετικά θα μπορούσε να προστεθεί στο αρχείο ~ / .bash_aliases


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   MSX dijo

    Υπάρχουν μερικά ενδιαφέροντα πράγματα, +1

  2.   Γιουκιτέρου dijo

    @ Hugo αυτή η γραμμή στη διαμόρφωση:

    ssl_protocols SSLv3 TLSv1;

    Θα έβγαζα το SSLv3 από αυτό, επειδή αυτό το πρωτόκολλο δεν είναι πλέον ασφαλές, ακόμη και στο Debian Jessie, πολλές υπηρεσίες έχουν ρυθμιστεί ώστε να αποφεύγουν τη χρήση αυτού του πρωτοκόλλου για αυτόν τον λόγο.

    Πληροφορίες για το θέμα εδώ:

    https://www.linode.com/docs/security/security-patches/disabling-sslv3-for-poodle
    http://disablessl3.com/

    1.    Hugo dijo

      Η ιδέα δεν ήταν πραγματικά να προσφέρουμε τις κύριες υπηρεσίες μέσω HTTPS, αλλά να εξηγήσουμε πώς να χρησιμοποιήσετε τη θύρα 443 για SSH χωρίς να χάσετε τη δυνατότητα χρήσης της για HTTPS εάν είναι απαραίτητο, αλλά ευχαριστώ για την προειδοποίηση.

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

  3.   Ντάνιελ ΠΖ dijo

    Muchas gracias por este estupendo tutorial, ahora lo pondré en practica! :D, Sigan así DesdeLinux, siempre me sorprenden, Saludos desde Perú.

  4.   Ñandekuera dijo

    Σας ευχαριστώ πολύ για την κοινή χρήση.

  5.   Fernando dijo

    πολύ καλός οδηγός και προέρχεται από μαργαριτάρια τώρα που ξεκίνησα σε αυτό το blog, αλλά ακόμη περισσότερο τώρα που πρόκειται να τοποθετήσω το πρώτο μου vps και ακόμα με πολλά προβλήματα, αλλά αυτό το άρθρο με έχει βγάλει από πολλές αμφιβολίες, ευχαριστίες και χαιρετισμούς