GNU/Linux >> Tutoriels Linux >  >> Debian

Sécurisation de votre VPS basé sur Ubuntu/Debian à l'aide du pare-feu IPTABLES/Netfilter

Dans l'article suivant, nous vous montrerons comment vous pouvez sécuriser et protéger votre serveur virtuel basé sur Ubuntu ou Debian à l'aide d'un pare-feu application, appelée iptables.

Qu'est-ce qu'iptables ?

Il s'agit d'un programme d'application d'espace utilisateur qui permet à un administrateur système de configurer les tables fournies par le pare-feu du noyau Linux (implémentées comme différents modules Netfilter ) et les chaînes et les règles qu'il stocke.

Afin de limiter le nombre de tentatives d'effraction et de filtrer les ports ouverts sur votre serveur virtuel, il est nécessaire de bien configurer votre firewall .

Pour faciliter la gestion des règles de pare-feu de votre serveur, nous fournirons un script shell simple qui vous aidera à gérer les règles de pare-feu. Fondamentalement, chaque fois que vous avez besoin de modifier vos règles de pare-feu, vous utiliserez ce script pour ajouter/supprimer la ou les règles souhaitées.

CONFIGURER LES RÈGLES DE PARE-FEU

Avant d'encapsuler les règles dans un script, divisons-le en sections afin que vous puissiez connaître la conception du pare-feu et les règles qui seront en place.

FLUGER LES ANCIENNES RÈGLES

Les règles de pare-feu peuvent être vidées à l'aide des commandes suivantes :

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

DÉTERMINER LES PORTS DE SERVICE

Vous devez savoir quels services vous avez exposés au public afin de pouvoir définir des règles appropriées pour eux. Une façon de trouver quels services écoutent sur quels ports est d'utiliser le netstat ou ss commandes comme dans :

## netstat -tunlp

or

## ss -tunlp

par exemple, nous utilisons l'un de nos serveurs virtuels Ubuntu 12.04 LTS et voici la sortie de netstat commande :

## 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

cela signifie donc que nous avons les ports suivants ouverts au public :

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

CONFIGURER LES POLITIQUES PAR DÉFAUT

ok, nous pouvons maintenant configurer les politiques de notre pare-feu pour DROP tout dans l'INPUT et AVANCER chaînes et autoriser le trafic dans la OUTPUT chaîne.

la table par défaut filter contient trois chaînes intégrées :

  1. Le trafic entrant adressé à la machine elle-même atteint la chaîne INPUT.
  2. Le trafic sortant généré localement atteint la chaîne OUTPUT.
  3. Le trafic routé qui ne devrait pas être livré localement atteint la chaîne FORWARD.

vérifier man 8 iptables pour plus d'informations à ce sujet

les politiques par défaut peuvent être appliquées à l'aide des commandes suivantes :

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

CONFIGURER LES RÈGLES DE PARE-FEU

La prochaine chose à faire est de configurer les règles de pare-feu pour nos services. Comme la chaîne INPUT est ABANDONNÉE, nous devrons mettre en liste blanche les services qui écoutent sur les ports publics, donc :

la première chose est de permettre l'utilisation gratuite des loopback interfaces , pour s'assurer que toutes les sessions TCP doivent commencer par SYN et pour autoriser les paquets établis et associés :

## 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

ensuite, ouvrons nos ports de service en utilisant des règles de pare-feu telles que :

### 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

etc. Une fois que tous les services sont sur liste blanche, c'est une bonne idée d'autoriser les paquets ICMP et de LOG et DROP tout le reste dans la chaîne INPUT.

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

ENREGISTRER/RESTAURER LES RÈGLES DU PARE-FEU

Les règles de pare-feu ne sont pas persistantes par défaut, ce qui signifie qu'elles seront perdues si vous redémarrez votre serveur virtuel par exemple. Pour enregistrer votre pare-feu actuel dans /etc/fwall.rules vous utiliseriez quelque chose comme :

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

et pour restaurer les règles enregistrées, vous utiliseriez quelque chose comme :

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

pour que les règles soient automatiquement restaurées au démarrage du système, vous devez soit utiliser un package nommé iptables-persistent ou vous pouvez simplement créer un script dans /etc/network/if-pre-up.d qui chargera les règles enregistrées dans /etc/fwall.rules , par exemple :

## 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 PARE-FEU

enregistrez le script dans /usr/local/bin/fwall-rules et le rendre exécutable

#!/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

pour activer les règles que vous avez préparées dans le script, exécutez simplement

## fwall-rules

depuis la ligne de commande. Pour ajouter ou supprimer une règle, il vous suffit d'ouvrir le script, d'ajouter ou de supprimer la règle souhaitée, de l'enregistrer et de l'exécuter à nouveau, par exemple :

## 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

Bien sûr, vous n'avez rien à faire si vous utilisez l'un de nos services d'hébergement VPS Linux, auquel cas vous pouvez simplement demander à nos administrateurs linux experts de le faire pour vous. Ils sont disponibles 24h/24 et 7j/7 et prendront immédiatement en charge votre demande.

PS. Si vous avez aimé cet article, partagez-le avec vos amis sur les réseaux sociaux en utilisant les boutons à gauche ou laissez simplement une réponse ci-dessous. Merci.


Debian
  1. Exemple d'utilisation du pare-feu UFW dans Debian/Ubuntu

  2. Installer et utiliser Docker sur Ubuntu et Debian

  3. Accélérez vos sites Web basés sur PHP en utilisant Zend Optimizer sur un VPS CentOS 6

  4. Script :Installer WordPress sur un VPS Debian/Ubuntu

  5. Installer MODX sur un VPS Debian 7

Comment trouver votre adresse IP publique dans Ubuntu 20.04 LTS

Comment activer/désactiver Ping en utilisant iptables sur Debian 10

Comment trouver des périphériques connectés à votre réseau à l'aide de Debian Linux

Comment :sécuriser votre serveur Ubuntu ou Debian avec IPTables

Changez votre port SSH dans Ubuntu et Debian

Comment configurer un pare-feu sur votre serveur Linux