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 :
- Le trafic entrant adressé à la machine elle-même atteint la chaîne INPUT.
- Le trafic sortant généré localement atteint la chaîne OUTPUT.
- 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.