Script Firewall IPv6 pour un serveur

Voici un petit script pour configurer un Firewall IPv6 sur un serveur :

#!/bin/bash
#-----------------------------------------------------------------------#
#                                                                       #
# Description : Firewal avec ip6tables                                  #
# OS          : Linux                                                   #
# Requires    : ip6tables - ip_conntrack* - modprobe                    #
# Licence     : GPL                                                     #
# 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 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 Script firewall IPv6 ip6tables ici.

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 .
Vus : 1422
Publié par Captaine74 : 14