Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

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

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Ένα firewall με ufw και nftables

Ενότητα 5: Προστασία του δικτύου · Χρόνος ανάγνωσης: 12 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να ρυθμίσετε ένα firewall που επιτρέπει μόνο ό,τι χρειάζεται, για IPv4 και IPv6, χωρίς να κλειδώσετε τον εαυτό σας έξω, και γνωρίζετε από τι δεν σας προστατεύει ένα firewall στον server σας.

Βασικές έννοιες: φίλτρο πακέτων, netfilter, nftables, iptables-nft, ufw, προεπιλεγμένη πολιτική, allow, deny, reject, limit, IPv6 στο ufw, firewall του παρόχου, firewalld, Docker και το firewall

Τι κάνει ένα firewall

Ένα firewall στον server σας είναι ένα φίλτρο πακέτων: για κάθε εισερχόμενο πακέτο δικτύου ελέγχει μια λίστα κανόνων και αποφασίζει αν μπορεί να περάσει. Στο Linux αυτό το φίλτρο βρίσκεται στον kernel και ονομάζεται netfilter. Το ρυθμίζετε με ένα πρόγραμμα:

  • Το nftables (εντολή nft) είναι το τρέχον εργαλείο. Το Debian το χρησιμοποιεί από προεπιλογή από το Debian 10.
  • Το iptables είναι το παλιό εργαλείο. Στα σύγχρονα συστήματα το iptables είναι συνήθως μια μετάφραση προς το nftables (iptables-nft), ώστε οι παλιοί οδηγοί να εξακολουθούν να λειτουργούν.
  • Το ufw (Uncomplicated Firewall) είναι ένα απλό επίπεδο από πάνω, προεγκατεστημένο στο Ubuntu και εγκαθίσταται με μία εντολή στο Debian. Για έναν μεμονωμένο server, το ufw είναι η ευκολότερη επιλογή. Αυτό το μάθημα χρησιμοποιεί το ufw και στη συνέχεια δείχνει πώς φαίνονται οι ίδιοι κανόνες στο nftables.

Ένα firewall είναι το δεύτερο επίπεδο άμυνάς σας. Το πρώτο είναι ότι οι υπηρεσίες ακούν μόνο στη σωστή διεύθυνση (μάθημα 5.1). Μαζί εξασφαλίζουν ότι ένα λάθος στο ένα επίπεδο δεν γίνεται αμέσως μια ανοιχτή πόρτα.

Πρώτα: πώς επιστρέφετε αν κάτι πάει στραβά;

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

  1. Μάθετε πώς ανοίγετε την κονσόλα του παρόχου σας (μάθημα 1.2). Λειτουργεί εκτός δικτύου, άρα και όταν το firewall κλείνει τα πάντα. Εκεί συνδέεστε και πληκτρολογείτε ufw disable.
  2. Δημιουργήστε ένα snapshot αν έχετε αμφιβολίες.
  3. Κρατήστε ανοιχτή την τρέχουσα συνεδρία SSH και δοκιμάστε με μια δεύτερη συνεδρία.

Το ufw σε πέντε βήματα

Βήμα 1: εγκατάσταση και επιλογή της προεπιλογής.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Η προεπιλεγμένη πολιτική ισχύει για ό,τι δεν καλύπτεται από κάποιον κανόνα. Το "deny incoming" σημαίνει: ό,τι εισέρχεται απαγορεύεται, εκτός από όσα επιτρέψετε στη συνέχεια. Αυτή είναι η μόνη ασφαλής βάση. Την εξερχόμενη κίνηση (όταν ο server σας κατεβάζει ενημερώσεις) την επιτρέπετε.

Βήμα 2: επιτρέψτε το SSH, πριν ενεργοποιήσετε το firewall.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

Το OpenSSH είναι ένα προφίλ εφαρμογής που γνωρίζει το ufw (αντιστοιχεί στη θύρα 22/tcp). Αν το SSH εκτελείται σε άλλη θύρα, χρησιμοποιήστε τον αριθμό: sudo ufw allow 2222/tcp. Προσέξτε το "Rules updated (v6)": το ufw δημιουργεί τον κανόνα και για IPv6. Το κάνει επειδή στο /etc/default/ufw υπάρχει η γραμμή IPV6=yes, που είναι η προεπιλογή. Ελέγξτε το· αν είναι no, τότε το firewall σας ισχύει μόνο για IPv4.

Βήμα 3: ό,τι άλλο χρειάζεστε.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # μόνο αν χρησιμοποιείτε HTTP/3

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

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Βήμα 4: ενεργοποίηση.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Βήμα 5: έλεγχος. Ανοίξτε ένα δεύτερο παράθυρο και συνδεθείτε ξανά. Αν πετύχει, το SSH είναι σωστά ρυθμισμένο. Στη συνέχεια δείτε τους κανόνες:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Η αφαίρεση ενός κανόνα γίνεται με αριθμούς: sudo ufw status numbered και μετά sudo ufw delete 3.

deny, reject και limit

  • Το deny απορρίπτει σιωπηλά το πακέτο: από έξω βλέπετε "φιλτραρισμένη" (μάθημα 5.1).
  • Το reject στέλνει πίσω μια άρνηση: από έξω βλέπετε "κλειστή". Πιο κομψό για τις δικές σας υπηρεσίες, αλλά αποκαλύπτει ότι υπάρχει server.
  • Το limit επιτρέπει μια σύνδεση, αλλά μπλοκάρει μια διεύθυνση που προσπαθεί να συνδεθεί έξι ή περισσότερες φορές μέσα σε 30 δευτερόλεπτα. Χρήσιμο για το SSH: sudo ufw limit OpenSSH αντί για allow. Είναι χονδροειδές (μετρά συνδέσεις, όχι αποτυχημένες συνδέσεις χρήστη)· το fail2ban (μάθημα 5.3) είναι πιο ακριβές.

Οι ίδιοι κανόνες στο nftables

Το ufw γράφει στο παρασκήνιο κανόνες netfilter. Αν θέλετε να εργαστείτε χωρίς ufw, γράφετε μόνοι σας ένα αρχείο nftables. Στο Debian βρίσκεται στο /etc/nftables.conf και το φορτώνετε με την υπηρεσία nftables:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Διαβάστε το ως εξής. Ο πίνακας ονομάζεται filter και ανήκει στην οικογένεια inet: ένας πίνακας για IPv4 και IPv6 ταυτόχρονα, ώστε να μην μπορείτε να ξεχάσετε το IPv6. Στην αλυσίδα input η πολιτική είναι drop. Στη συνέχεια: οι απαντήσεις σε συνδέσεις που ήδη υπάρχουν επιτρέπεται να επιστρέψουν (established,related), ό,τι περνά από το loopback επιτρέπεται, το ICMP επιτρέπεται (απαραίτητο μεταξύ άλλων για το IPv6 και για μηνύματα σφάλματος σχετικά με το μέγεθος πακέτων), και οι θύρες 22, 80 και 443 επιτρέπονται.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # έλεγχος χωρίς φόρτωση
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Χρησιμοποιήστε είτε το ufw είτε ένα δικό σας αρχείο nftables, όχι και τα δύο: γράφουν στο ίδιο netfilter και μπορεί να συγκρούονται οι κανόνες τους.

Από τι δεν σας προστατεύει το firewall

  • Υπηρεσίες που επιτρέπετε εσείς. Η θύρα 443 είναι ανοιχτή για τον ιστότοπό σας· ένα κενό ασφαλείας στον ιστότοπό σας είναι επομένως απολύτως προσβάσιμο. Το firewall προστατεύει μόνο τις θύρες που είναι κλειστές.
  • Docker. Όταν δημοσιεύετε μια θύρα με το Docker (-p 5432:5432), το Docker ορίζει δικούς του κανόνες netfilter, που ανακατευθύνουν την κίνηση πριν ισχύσουν οι κανόνες του ufw. Η τεκμηρίωση του Docker αναφέρει ρητά ότι το Docker και το ufw δεν συνεργάζονται καλά. Μια θύρα container μπορεί λοιπόν να είναι ανοιχτή από έξω ενώ το ufw status δεν την εμφανίζει. Τη λύση (δημοσίευση στο 127.0.0.1) τη μαθαίνετε στο μάθημα 9.3.
  • Εξερχόμενη κίνηση. Με το "allow outgoing", ένα παραβιασμένο πρόγραμμα μπορεί να επικοινωνήσει με οπουδήποτε. Για τους περισσότερους μικρούς servers αυτή είναι μια αποδεκτή επιλογή· τα αυστηρά περιβάλλοντα περιορίζουν και την εξερχόμενη κίνηση.

Το firewall του παρόχου σας

Πολλοί πάροχοι διαθέτουν επίσης ένα firewall στο δίκτυο, μπροστά από τον server σας, το οποίο ρυθμίζετε στον πίνακα ελέγχου πελάτη (μερικές φορές ονομάζεται "cloud firewall" ή "security group"). Αποτελεί ένα εξαιρετικό επιπλέον επίπεδο και λειτουργεί ακόμη κι αν κάνετε κάποιο λάθος στον ίδιο τον server. Δεν αντικαθιστά όμως το firewall στον server: αν μεταφέρετε τον server ή αλλάξετε πάροχο, δεν σας ακολουθεί, και δεν το προσφέρουν όλοι οι πάροχοι. Γι' αυτό διατηρείτε πάντα ένα firewall στον ίδιο τον server.

Στο AlmaLinux και στο Rocky Linux

Εκεί το firewalld είναι ενεργό από προεπιλογή, με ζώνες. Οι σημαντικότερες εντολές:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Χωρίς --permanent μια αλλαγή ισχύει μόνο μέχρι την επόμενη επανεκκίνηση· με --permanent ισχύει μόνο μετά το --reload. Το SSH είναι ήδη ανοιχτό στην προεπιλεγμένη ζώνη.

Στην πράξη

Αν παρ' όλα αυτά κλειδωθείτε έξω από ένα VPS στη WebOké, ανοίγετε την κονσόλα στην οθόνη του VPS, συνδέεστε και απενεργοποιείτε το firewall (ufw disable) ή αναιρείτε τον τελευταίο κανόνα. Σε άλλους παρόχους αυτή η είσοδος έκτακτης ανάγκης ονομάζεται επίσης console, VNC ή rescue. Μάθετε πού βρίσκεται αυτό το κουμπί πριν το χρειαστείτε.

Σύνοψη

  • Ένα firewall είναι το δεύτερο επίπεδό σας μετά το "ακρόαση μόνο όπου χρειάζεται"· το nftables είναι το εργαλείο στον kernel, το ufw ένα απλό επίπεδο από πάνω.
  • Ξεκινήστε με default deny incoming, επιτρέψτε το SSH πριν από το ufw enable, δοκιμάστε με δεύτερη συνεδρία και γνωρίζετε την κονσόλα του παρόχου σας.
  • Ελέγξτε ότι το ufw καλύπτει και το IPv6 (IPV6=yes)· στο nftables η οικογένεια inet το κάνει με μία κίνηση.
  • Το deny δίνει από έξω "φιλτραρισμένη", το reject δίνει "κλειστή"· το limit επιβραδύνει τις επαναλαμβανόμενες συνδέσεις.
  • Οι θύρες του Docker παρακάμπτουν το ufw (μάθημα 9.3)· το firewall του παρόχου σας είναι επιπλέον επίπεδο, όχι υποκατάστατο.

Κουίζ

1. Με ποια σειρά ενεργοποιείτε το ufw για πρώτη φορά σε έναν server στον οποίο είστε συνδεδεμένοι μέσω SSH;



2. Μετά το ufw enable ο ιστότοπός σας δεν λειτουργεί πλέον μέσω IPv4, αλλά το SSH λειτουργεί. Ποια είναι η πιο πιθανή αιτία;



3. Δημοσιεύετε με το Docker τη θύρα 5432 ενός container βάσης δεδομένων. Το ufw status δεν εμφανίζει κανόνα για το 5432. Είναι η βάση δεδομένων προσβάσιμη από έξω;



4. Γιατί το παράδειγμα nftables χρησιμοποιεί έναν πίνακα της οικογένειας inet;



5. Ο πάροχός σας διαθέτει ένα firewall δικτύου στον πίνακα ελέγχου πελάτη. Χρειάζεστε τότε ακόμη firewall στον server;



Άσκηση

Άσκηση O5.2: Ρύθμιση του firewall σας. Ενεργοποιήστε στον server σας ένα firewall με ufw (ή nftables, ή firewalld στο AlmaLinux/Rocky): από προεπιλογή όλα κλειστά για την εισερχόμενη κίνηση, SSH, και ό,τι άλλο πραγματικά χρειάζεστε. Δοκιμάστε με μια δεύτερη συνεδρία, ελέγξτε αν καλύπτεται το IPv6 και δείτε από έξω με nc αν μια μη επιτρεπόμενη θύρα είναι κλειστή ή φιλτραρισμένη. Συμπληρώστε τη λίστα ελέγχου και επικολλήστε το ufw status verbose σας (ή το nft list ruleset)· αναφέρετε για κάθε ανοιχτή θύρα τι εξυπηρετεί.

Άσκηση O5.2: Ρύθμιση του firewall σας

Αυτή την άσκηση την κάνετε μόνοι σας: κανείς δεν την ελέγχει. Σημειώστε τι έχετε κάνει και επισημάνετε την άσκηση ως ολοκληρωμένη.



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

Για περαιτέρω μελέτη

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…