#!/bin/bash ### BEGIN INIT INFO # Provides: firewall # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Démarre les règles iptables # Description: Charge la configuration du pare-feu iptables ### END INIT INFO # On met en variable le chemin pour atteindre le programme Iptables, ainsi que sa version pour IPv6. IPT=/sbin/iptables IPT6=/sbin/ip6tables function start { # Fonction à exécuter au démarrage du firewall, de la manière suivante : # firewall start # Vider les règles actuelles $IPT -t filter -F $IPT6 -t filter -F # Vider les règles personnelles $IPT -t filter -X $IPT6 -t filter -X # Interdire toute connexion entrante et sortante. # Par défaut on interdit toute connexion, on débloquera les ports nécessaires # par la suite. C'est pour cette raison qu'il est important de saisir ce script # dans un fichier et non pas directement dans votre terminal, sinon à partir # de la prochaine ligne nous serons bloqués, sans accès au serveur $IPT -t filter -P INPUT DROP $IPT -t filter -P FORWARD DROP $IPT -t filter -P OUTPUT DROP $IPT6 -t filter -P INPUT DROP $IPT6 -t filter -P FORWARD DROP $IPT6 -t filter -P OUTPUT DROP # Ne pas casser les connexions établies $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT6 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT6 -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Autoriser loopback $IPT -t filter -A INPUT -i lo -j ACCEPT $IPT -t filter -A OUTPUT -o lo -j ACCEPT $IPT6 -t filter -A INPUT -i lo -j ACCEPT $IPT6 -t filter -A OUTPUT -o lo -j ACCEPT # ICMP (Ping, pour voir si votre serveur est toujours accessible) $IPT -t filter -A INPUT -p icmp -j ACCEPT $IPT -t filter -A OUTPUT -p icmp -j ACCEPT $IPT6 -t filter -A INPUT -p icmp -j ACCEPT $IPT6 -t filter -A OUTPUT -p icmp -j ACCEPT # RTM (Real Time Monitring), pour OVH $IPT -A INPUT -p udp --dport 6100:6200 -j ACCEPT $IPT -A OUTPUT -p udp --dport 6100:6200 -j ACCEPT $IPT6 -A INPUT -p udp --dport 6100:6200 -j ACCEPT $IPT6 -A OUTPUT -p udp --dport 6100:6200 -j ACCEPT # SSH # n'oubliez pas de changer le numéro de port si vous avez configuré SSH pour écouter sur un autre port que le 22 $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT # DNS - Nécessaire pour la gestion des noms de domaine avec Bind9 si vous voulez utiliser vos propres DNS $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT $IPT -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT $IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT # NTP out - Pour ajuster automatiquement l'heure sur votre serveur $IPT -t filter -A OUTPUT -p udp --dport 123 -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 INPUT -p tcp --dport 8443 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT #$IPT6 -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #$IPT6 -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #$IPT6 -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT #$IPT6 -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT #$IPT6 -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT # Mail SMTP : port 25 #$IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT # Mail POP3 : port 110 #$IPT -t filter -A INPUT -p tcp --dport 110 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT # Mail IMAP : port 143 #$IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT # Mail POP3S : port 995 #$IPT -t filter -A INPUT -p tcp --dport 995 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT # FTP #$IPT -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT #$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # pour ne pas bloquer les accès FTP en cours #$IPT -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT #$IPT6 -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT #$IPT6 -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # pour ne pas bloquer les accès FTP en cours #$IPT6 -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT # Webmin #$IPT -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT #$IPT -t filter -A OUTPUT -p tcp --dport 10000 -j ACCEPT # Anti flood ou déni de service $IPT -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT $IPT -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT # Limitation des scans de ports à 1 scan par seconde $IPT -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Anti relais SMTP $IPT -N LOG_REJECT_SMTP $IPT -A LOG_REJECT_SMTP -j LOG --log-prefix ' SMTP REJECT PAQUET : ' $IPT -A LOG_REJECT_SMTP -j DROP } function stop { # Fonction à exécuter à l'arrêt du firewall, de la manière suivante : # firewall stop # on remet tout à zéro et on efface les règles en cours $IPT -P INPUT ACCEPT $IPT -P OUTPUT ACCEPT $IPT -t filter -F } case "$1" in start|restart) echo -n "Démarrage du firewall..." stop start echo "OK." ;; stop) echo -n "Arrêt du firewall..." stop echo "OK." ;; *) echo "Utilisation : $0 {start|stop|restart}"; exit 1 ;; esac exit 0