GNU/Linux >> Linux Esercitazione >  >> Debian

Protezione del tuo VPS basato su Ubuntu/Debian utilizzando il firewall IPTABLES/Netfilter

Nel seguente articolo ti mostreremo come puoi proteggere e proteggere il tuo server virtuale basato su Ubuntu o Debian usando un firewall applicazione, chiamata iptables.

Cos'è iptables?

È un programma applicativo per lo spazio utente che consente a un amministratore di sistema di configurare le tabelle fornite dal firewall del kernel Linux (implementato come moduli Netfilter diversi ) e le catene e le regole che memorizza.

Per contenere il numero di tentativi di effrazione e per filtrare le porte aperte sul tuo server virtuale, è necessario configurare correttamente il tuo firewall .

Per semplificare la gestione delle regole del firewall del tuo server, forniremo un semplice script di shell che ti aiuterà con la gestione delle regole del firewall. Fondamentalmente, ogni volta che è necessario modificare le regole del firewall, utilizzare questo script per aggiungere/rimuovere le regole desiderate.

REGOLAZIONE DEL FIREWALL

Prima di racchiudere le regole in uno script, dividiamolo in sezioni in modo da poter conoscere il design del firewall e quali regole saranno in atto.

VECCHIE REGOLE DI LAVAGGIO

Le regole del firewall possono essere cancellate usando i seguenti comandi:

## iptables --flush
## iptables --delete-chain
## iptables --table nat --flush
## iptables --table nat --delete-chain

DETERMINARE I PORTI DI SERVIZIO

Devi sapere quali servizi hai esposto al pubblico in modo da poter stabilire regole appropriate per loro. Un modo per scoprire quali servizi sono in ascolto su quali porte è utilizzare netstat o ss comandi come in:

## netstat -tunlp

or

## ss -tunlp

ad esempio, stiamo usando uno dei nostri server virtuali Ubuntu 12.04 LTS e quello che segue è l'output di netstat comando:

## netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      296/mysqld
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 209.135.140.77:53       0.0.0.0:*               LISTEN      353/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      173/vsftpd
tcp        0      0 0.0.0.0:5622            0.0.0.0:*               LISTEN      630/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      449/sendmail: MTA:
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      353/named
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      590/apache2
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      261/dovecot
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      261/dovecot
udp        0      0 209.135.140.77:53       0.0.0.0:*                           353/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           353/named

quindi questo significa che abbiamo le seguenti porte aperte al pubblico:

  • 25 (smtp)
  • 587 (invio SMTP)
  • 110 (pop3)
  • 143 (imap)
  • 993 (imap ssl)
  • 995 (pop3 ssl)
  • 80 (http)
  • 443 (https)
  • 53 (dns)
  • 21 (ftp)
  • 5622 (ssh)

IMPOSTA LE POLITICHE PREDEFINITE

ok, ora possiamo impostare i criteri del nostro firewall su DROP tutto in INPUT e AVANTI catene e consentire il traffico in OUTPUT catena.

la tabella predefinita filter contiene tre catene integrate:

  1. Il traffico in entrata indirizzato alla macchina stessa colpisce la catena INPUT.
  2. Il traffico in uscita, generato localmente raggiunge la catena OUTPUT.
  3. Il traffico instradato che non dovrebbe essere consegnato localmente raggiunge la catena FORWARD.

controlla man 8 iptables per ulteriori informazioni su questo

le politiche predefinite possono essere applicate utilizzando i seguenti comandi:

## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out
## iptables -P FORWARD DROP
## iptables -P OUTPUT ACCEPT

REGOLAZIONE DEL FIREWALL

La prossima cosa da fare è impostare effettivamente le regole del firewall per i nostri servizi. Poiché la catena INPUT è ESAURITA, dovremo inserire nella white list i servizi in ascolto su porte pubbliche, quindi:

la prima cosa è abilitare l'uso gratuito delle loopback interfaces , per garantire che tutte le sessioni TCP inizino con SYN e per consentire pacchetti stabiliti e correlati:

## iptables -A INPUT -i lo -j ACCEPT
## iptables -A OUTPUT -o lo -j ACCEPT
## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

quindi, apriamo le nostre porte di servizio utilizzando regole firewall come:

### SSH
## iptables -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

### HTTP
## iptables -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

### SMTP
## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

e così via. Una volta che tutti i servizi sono stati inseriti nella white list, è una buona idea consentire i pacchetti ICMP e LOG e DROP tutto il resto nella catena INPUT.

## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
## iptables -A INPUT -j LOG
## iptables -A INPUT -j DROP

SALVA/RIPRISTINA LE REGOLE DEL FIREWALL

Le regole del firewall non sono persistenti per impostazione predefinita, il che significa che andranno perse se, ad esempio, si riavvia il server virtuale. Per salvare il tuo attuale firewall in /etc/fwall.rules useresti qualcosa come:

## iptables-save > /etc/fwall.rules

e per ripristinare le regole salvate, dovresti usare qualcosa come:

## iptables-restore -c /etc/fwall.rules

per ripristinare automaticamente le regole all'avvio del sistema, dovresti utilizzare un pacchetto chiamato iptables-persistent oppure puoi semplicemente creare uno script in /etc/network/if-pre-up.d che caricherà le regole salvate in /etc/fwall.rules , ad esempio:

## vim /etc/network/if-pre-up.d/iptables

#!/bin/bash
test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules

## chmod +x /etc/network/if-pre-up.d/iptables

SCRIPT FIREWALL

salva lo script in /usr/local/bin/fwall-rules e rendilo eseguibile

#!/bin/bash

IPTABLES=/sbin/iptables

echo " * flushing old rules"
${IPTABLES} --flush
${IPTABLES} --delete-chain
${IPTABLES} --table nat --flush
${IPTABLES} --table nat --delete-chain

echo " * setting default policies"
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD DROP
${IPTABLES} -P OUTPUT ACCEPT

echo " * allowing loopback devices"
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT

${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## BLOCK ABUSING IPs HERE ##
#echo " * BLACKLIST"
#${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP
#${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP

echo " * allowing ssh on port 5622"
${IPTABLES} -A INPUT -p tcp --dport 5622  -m state --state NEW -j ACCEPT

echo " * allowing ftp on port 21"
${IPTABLES} -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT

echo " * allowing dns on port 53 udp"
${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT

echo " * allowing dns on port 53 tcp"
${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

echo " * allowing http on port 80"
${IPTABLES} -A INPUT -p tcp --dport 80  -m state --state NEW -j ACCEPT

echo " * allowing https on port 443"
${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

echo " * allowing smtp on port 25"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

echo " * allowing submission on port 587"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT

echo " * allowing imaps on port 993"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT

echo " * allowing pop3s on port 995"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

echo " * allowing imap on port 143"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

echo " * allowing pop3 on port 110"
${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

echo " * allowing ping responses"
${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

# DROP everything else and Log it
${IPTABLES} -A INPUT -j LOG
${IPTABLES} -A INPUT -j DROP

#
# Save settings
#
echo " * SAVING RULES"

if [[ -d /etc/network/if-pre-up.d ]]; then
    if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then
        echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables
        echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
fi

iptables-save > /etc/fwall.rules
iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules

per attivare le regole che hai preparato nello script, basta eseguire

## fwall-rules

dalla riga di comando. Per aggiungere o rimuovere una regola, devi solo aprire lo script, aggiungere o rimuovere la regola desiderata, salvarla ed eseguirla di nuovo, ad esempio:

## fwall-rules
 * flushing old rules
 * setting default policies
 * allowing loopback devices
 * allowing ssh on port 5622
 * allowing ftp on port 21
 * allowing dns on port 53 udp
 * allowing dns on port 53 tcp
 * allowing http on port 80
 * allowing https on port 443
 * allowing smtp on port 25
 * allowing submission on port 587
 * allowing imaps on port 993
 * allowing pop3s on port 995
 * allowing imap on port 143
 * allowing pop3 on port 110
 * allowing ping responses
 * SAVING RULES

Ovviamente non devi fare nulla di tutto ciò se usi uno dei nostri servizi di hosting VPS Linux, nel qual caso puoi semplicemente chiedere ai nostri esperti amministratori Linux di farlo per te. Sono disponibili 24 ore su 24, 7 giorni su 7 e si prenderanno immediatamente cura della tua richiesta.

PS. Se questo post ti è piaciuto condividilo con i tuoi amici sui social network utilizzando i pulsanti a sinistra o semplicemente lascia una risposta qui sotto. Grazie.


Debian
  1. Configurazione del firewall utilizzando Iptables su Ubuntu 14.04

  2. Esempio di utilizzo del firewall UFW in Debian/Ubuntu

  3. Installazione e utilizzo di Docker su Ubuntu e Debian

  4. Come installare SSHGuard su un VPS Ubuntu

  5. Come migliorare la sicurezza di Debian VPS utilizzando DenyHosts e Logwatch

Come trovare il tuo indirizzo IP pubblico in Ubuntu 20.04 LTS

Come abilitare/disabilitare il ping usando iptables su Debian 10

Come trovare i dispositivi connessi alla tua rete usando Debian Linux

Procedura:proteggere il tuo server Ubuntu o Debian con IPTables

Cambia la tua porta SSH in Ubuntu e Debian

Come configurare un firewall sul tuo server Linux