Firewall IPv6
De Captaine's Wiki.
Voici un petit script pour configurer un Firewall IPv6 sur un serveur :
#!/bin/bash
#-----------------------------------------------------------------------#
# #
# Description : Firewal with ip6tables #
# OS : Linux #
# Requires : ip6tables - ip_conntrack* - modprobe #
# Licence : GPL #
# Version : 0.2.0 #
# Author : Benoît Pourre <benoitpourre AT rt74.eu> #
# Web site : http://www.rt74.eu/ #
# #
#-----------------------------------------------------------------------#
# Variables
export IF_RESEAU="eth0"
start_fw()
{
# On efface toutes les regles existantes
/sbin/ip6tables -F
# On supprime d'eventuelles regles personnelles
/sbin/ip6tables -X
# Mise en place des regles par defaut (on refuse tout par default)
/sbin/ip6tables -P INPUT DROP
/sbin/ip6tables -P FORWARD DROP
/sbin/ip6tables -P OUTPUT DROP
# On accepte les connexions sur la boucle locale (sur lo == 127.0.0.1)
/sbin/ip6tables -A INPUT -i lo -j ACCEPT
/sbin/ip6tables -A OUTPUT -o lo -j ACCEPT
# On accepte la sortie de certain protocoles (commenter les lignes selon le besoin)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p UDP --dport domain -j ACCEPT # Port 53 (Windows udp)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport domain -j ACCEPT # Port 53 (Windows tcp)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport netbios-ssn -j ACCEPT # Port 139 (smb or windows share)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport microsoft-ds -j ACCEPT # Port 445 (smb or windows share)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport http -j ACCEPT # Port 80 (Http)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport https -j ACCEPT # Port 443 (Https)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport imap -j ACCEPT # Port 143 (Imap)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport imaps -j ACCEPT # Port 993 (Imaps)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport pop3 -j ACCEPT # Port 110 (Pop3)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport smtp -j ACCEPT # Port 25 (Smtp)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport smtps -j ACCEPT # Port 465 (Smtps)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport ftp-data -j ACCEPT # Port 20 (Ftp Data)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport ftp -j ACCEPT # Port 21 (Ftp)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport ssh -j ACCEPT # Port 22 (Ssh)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport nntp -j ACCEPT # Port 119 (News groups)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport ldap -j ACCEPT # Port 389 (ldap)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport ldaps -j ACCEPT # Port 636 (ldaps)
/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport 5222 -j ACCEPT # Port 5222 (Jabber)
#/sbin/ip6tables -A INPUT -i $IF_RESEAU -p TCP --dport 6881:6889 -j ACCEPT # Port 6881 a 6889 (Bittorrent)
# On autorise les connexions deja etablies ou relatives a une autre connexion a sortir
/sbin/ip6tables -A OUTPUT -o $IF_RESEAU --match state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# On autorise les connexions deja etablies a entrer
/sbin/ip6tables -A INPUT -i $IF_RESEAU --match state --state ESTABLISHED,RELATED -j ACCEPT
# On autorise le PC a faire des ping sur des IP exterieur
/sbin/ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
# On interdit les PC a l'exterieur de faire des ping
/sbin/ip6tables -A INPUT -p icmpv6 -j ACCEPT
# Ecriture de la politique de log
# Ici on affiche [ip6tables DROP] dans /var/log/message a chaque paquet rejette par ip6tables
/sbin/ip6tables -N LOG_DROP
/sbin/ip6tables -A LOG_DROP -j LOG --log-level 1 --log-prefix '[ip6tables DROP]:'
/sbin/ip6tables -A LOG_DROP -j DROP
# On met en place les logs en entree, sortie et routage selon la politique LOG_DROP ecrit avant
/sbin/ip6tables -A FORWARD -j LOG_DROP
/sbin/ip6tables -A INPUT -j LOG_DROP
/sbin/ip6tables -A OUTPUT -j LOG_DROP
# Chargement du module de gestion des connexion state (autorisation des connexions deja etablies a passer le firewall)
/sbin/modprobe ip_conntrack
# Chargement du module special pour palier au probleme de connexion FTP passive
/sbin/modprobe ip_conntrack_ftp
}
stop_fw()
{
# Vidage des règles pour toutes les tables :
ip6tables -F
# permet l'effacement de toutes les chaînes qui ne sont pas par défaut dans la
# table filter notamment LOG_ACCEPT
ip6tables -X
# On remet la politique par défaut à ACCEPT dans les trois tables par défaut
ip6tables -P INPUT ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD ACCEPT
}
case "$1" in
start)
start_fw
echo "firewall started"
;;
stop)
stop_fw
echo "firewall stopped"
;;
restart)
stop_fw
echo "firewall stopped"
start_fw
echo "firewall restarted"
;;
*)
echo "usage: $0 [start|stop|restart]" >&2
exit 1
esac
exit 0
Vous pouvez le télécharger ici[1].
Il faut ensuite le placer dans /etc/init.d. Pour qu'il soit exécuté au démarrage :
sudo update-rc.d script-ip6tables start 99 2 . stop 00 2 0 1 6 .

