Afficher/cacher Sommaire
Parefeu iptables
https://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html
https://www.memoinfo.fr/tutoriels-linux/configurer-firewall-linux-iptables/
Pare-feu IPv4/IPv6, versions bureau et serveur
Alternative script /etc/init.d/firewall
#! /bin/sh
### BEGIN INIT INFO
# Provides: PersonalFirewall
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Personal Firewall
# Description:
### END INIT INFO
# programme iptables IPV4 et IPV6
IPT=/sbin/iptables
IP6T=/sbin/ip6tables
# fonction qui démarre le firewall
do_start() {
# Efface toutes les règles en cours. -F toutes. -X utilisateurs
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
#
$IP6T -t filter -F
$IP6T -t filter -X
# Il n'y a pas de NAT en IPV6
#$IP6T -t nat -F
#$IP6T -t nat -X
$IP6T -t mangle -F
$IP6T -t mangle -X
# stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT ACCEPT
#
$IP6T -t filter -P INPUT DROP
$IP6T -t filter -P FORWARD DROP
$IP6T -t filter -P OUTPUT ACCEPT
# Ne pas casser les connexions etablies
$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
$IP6T -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser Loopback
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -j ACCEPT
#
$IP6T -t filter -A INPUT -i lo -j ACCEPT
$IP6T -t filter -A OUTPUT -o lo -j ACCEPT
# SSH
$IPT -t filter -A INPUT -p tcp --dport 55026 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 55026 -j ACCEPT
#
$IP6T -t filter -A INPUT -p tcp --dport 55026 -j ACCEPT
$IP6T -t filter -A OUTPUT -p tcp --dport 55026 -j ACCEPT
# DNS in/out
# /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
$IPT -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
$IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
$IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#
$IP6T -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
$IP6T -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
$IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
$IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
# HTTP + HTTPS
$IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
$IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
$IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
$IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
#
echo "firewall started [OK]"
}
# fonction qui arrête le firewall
do_stop() {
# Efface toutes les règles
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
#
$IP6T -t filter -F
$IP6T -t filter -X
#$IP6T -t nat -F
#$IP6T -t nat -X
$IP6T -t mangle -F
$IP6T -t mangle -X
# remet la stratégie
$IPT -t filter -P INPUT ACCEPT
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD ACCEPT
#
$IP6T -t filter -P INPUT ACCEPT
$IP6T -t filter -P OUTPUT ACCEPT
$IP6T -t filter -P FORWARD ACCEPT
#
echo "firewall stopped [OK]"
}
# fonction status firewall
do_status() {
# affiche les règles en cours
clear
echo Status IPV4
echo -----------------------------------------------
$IPT -L -n -v
echo
echo -----------------------------------------------
echo
echo status IPV6
echo -----------------------------------------------
$IP6T -L -n -v
echo
}
case "$1" in
start)
do_start
# quitte sans erreur
exit 0
;;
stop)
do_stop
# quitte sans erreur
exit 0
;;
restart)
do_stop
do_start
# quitte sans erreur
exit 0
;;
status)
do_status
# quitte sans erreurs
exit 0
;;
*)
# Si on ne tape ni "start" ni "stop"... on affiche une erreur
echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
# quitte le script avec un etat "en erreur"
exit 1
;;
esac
Ensuite on rend le fichier exécutable :
chmod +x /etc/init.d/firewall
Maintenant on peut le tester :
/etc/init.d/firewall start
Pour regarder les règles en cours :
/etc/init.d/firewall status
Afin de l’ajouter aux scripts appelés au démarrage :
update-rc.d firewall defaults
Pour le retirer, vous pouvez utiliser la commande suivante :
update-rc.d -f firewall remove
Alternative iptables-persistent
Créer un script pour mettre en place des règles de base.
sudo nano parefeu
#!/bin/sh
# Règles de base
iptables -t filter -F -m comment --comment "Vider les règles table filter"
iptables -t nat -F -m comment --comment "Vider les règles table nat"
iptables -t filter -X -m comment --comment "Vider les règles personnelles table filter"
iptables -t nat -X -m comment --comment "Vider les règles personnelles table nat"
iptables -t filter -P INPUT ACCEPT -m comment --comment "Autoriser toute connexion entrante"
iptables -t filter -P FORWARD ACCEPT -m comment --comment "Autoriser toute redirection"
iptables -t filter -P OUTPUT ACCEPT -m comment --comment "Autoriser toute connexion sortante"
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -m comment --comment "Ne pas casser les connexions en cours"
iptables -t filter -A INPUT -i lo -j ACCEPT -m comment --comment "Autoriser loopback"
iptables -t filter -A INPUT -p icmp -j ACCEPT -m comment --comment "Autoriser ICMP (Ping)"
iptables -t filter -A INPUT -p tcp --dport 55029 -j ACCEPT -m comment --comment "Port SSH Input"
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT -m comment --comment "DNS tcp Input"
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT -m comment --comment "DNS udp Input"
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP Input"
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS Input"
# Règles NFS
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
# Règle port http subsonic
iptables -t filter -A INPUT -p tcp --dport 8090 -j ACCEPT -m comment --comment "Subsonic port http"
# Règles spécifiques
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE -m comment --comment "Activer MASQUERADE sur tunnel vpn tun0 "
iptables -A FORWARD -s 10.10.11.0/24 -i wlan0 -o tun0 -m conntrack --ctstate NEW -j REJECT -m comment --comment "VPN : Bloquer le trafic des clients wlan0 vers tun0"
iptables -A FORWARD -s 10.10.12.0/24 -i wlan0_0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "VPN : Autoriser uniquement le trafic des clients wlan0_0 vers tun0"
fichier exécutable :
sudo chmod +x parefeu
Vous pourrez le tester en l’exécutant directement en ligne de commande.
sudo -s
./parefeu
En cas d’erreur, redémarrez le serveur, les règles seront oubliées et vous permettront de reprendre la main.
En revanche, si les tests s’avèrent concluants, ajoutez le lancement des règles iptables au démarrage.
Après avoir exécuté le script précédent,vérifier la présence des règles
iptables -L
Lancement du parefeu au démarrage
apt install iptables-persistent
Faut-il enregistrer les règles IPv4 actuelles ? OUI
Faut-il enregistrer les règles IPv6 actuelles ? NON
Les tables sont enregistrés sous /etc/iptables/ , rules.v4 pour IPv4 et rules.v6 pour IPv6
Sauvegarde/Restauration manuelle des régles iptables
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4
Bash pour effacer les tables “iptables”
#!/bin/sh
# RAZ tables
iptables -t filter -F -m comment --comment "Vider les règles table filter"
iptables -t nat -F -m comment --comment "Vider les règles table nat"
iptables -t filter -X -m comment --comment "Vider les règles personnelles table filter"
iptables -t nat -X -m comment --comment "Vider les règles personnelles table nat"
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
Autre parefeu
Créer un script pour mettre en place des règles de base.
cd ~
sudo nano parefeu
#!/bin/sh
# Efface toutes les règles en cours. -F toutes. -X utilisateurs
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#
ip6tables -t filter -F
ip6tables -t filter -X
ip6tables -t mangle -F
ip6tables -t mangle -X
# stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT ACCEPT
# Ne pas casser les connexions etablies
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autoriser Loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
#
ip6tables -t filter -A INPUT -i lo -j ACCEPT
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT
# Autoriser icmp
iptables -t filter -A INPUT -p icmp -j ACCEPT
ip6tables -t filter -A INPUT -p icmp -j ACCEPT
# SSH
iptables -t filter -A INPUT -p tcp --dport 55026 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 55026 -j ACCEPT
#
ip6tables -t filter -A INPUT -p tcp --dport 55026 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 55026 -j ACCEPT
# DNS in/out
# /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#
ip6tables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
# HTTP + HTTPS
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# IMAP SMTP
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
fichier exécutable :
sudo chmod +x parefeu
Vous pourrez le tester en l’exécutant directement en ligne de commande.
sudo -s
./parefeu
En cas d’erreur, redémarrez le serveur, les règles seront oubliées et vous permettront de reprendre la main.
En revanche, si les tests s’avèrent concluants, ajoutez le lancement des règles iptables au démarrage.
Après avoir exécuté le script précédent,vérifier la présence des règles
iptables -L
ip6tables -L
Lancement du parefeu au démarrage
apt install iptables-persistent
Faut-il enregistrer les règles IPv4 actuelles ? OUI
Faut-il enregistrer les règles IPv6 actuelles ? OUI
Les tables sont enregistrés sous /etc/iptables/ , rules.v4 pour IPv4 et rules.v6 pour IPv6
Sauvegarde/Restauration manuelle des régles iptables
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6