Info16.fr

Le blog de B@rtounet

#Gnu/Linux

Script Firewall iptables

27 juillet 2011 Rédigé par bartounet

Je met en ligne un petit script me permettant de mettre en place un firewall sur mes serveur linux histoire que je le perde pas...

#!/bin/bash
 #
 #Antony MARTINEAU 2007
 #Firewall script   "BAD PACKETS STOP HERE"
 
 ipmaboite=$(ping -c1 maboite.dnsalias.net | grep time | sed -n 1p | cut -d"(" -f2 | cut -d")" -f1)
 echo "ip de maboite $ipmaboite"
 
 firewall_start() {
 # Nous vidons les chaînes :
 iptables -F
 # Nous supprimons d'éventuelles chaînes personnelles :
 iptables -X 
 
 # Nous les faisons pointer par défaut sur DROP
 
 iptables -P INPUT DROP
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD DROP
 
 # Nous faisons de même avec toutes les autres tables, 
 # à savoir "nat" et "mangle", mais en les faisant pointer
 # par défaut sur ACCEPT. Ca ne pose pas de problèmes 
 # puisque tout est bloqué au niveau "filter"
 
 iptables -t nat -F
 iptables -t nat -X 
 
 iptables -t nat -P PREROUTING ACCEPT
 iptables -t nat -P POSTROUTING ACCEPT
 iptables -t nat -P OUTPUT ACCEPT
 
 iptables -t mangle -F
 iptables -t mangle -X 
 
 iptables -t mangle -P PREROUTING ACCEPT
 iptables -t mangle -P INPUT ACCEPT
 iptables -t mangle -P OUTPUT ACCEPT
 iptables -t mangle -P FORWARD ACCEPT
 iptables -t mangle -P POSTROUTING ACCEPT
 
 ##AUTORISATION DES SERVICES FONDAMENTAUX
 
 # Autoriser TOUT pour ma Freebox differents client SSH
 #Attention apres differents test il faut toujours indiquer le protocole quand on specifie un port de destination
 iptables -A INPUT -s 82.122.232.222 -j ACCEPT
 iptables -A INPUT -s $ipmaboite -j ACCEPT
 iptables -A INPUT -p tcp -s $ipmaboite --dport 3128 -j ACCEPT
 iptables -A INPUT -p tcp -s $ipmaboite --dport 22 -j ACCEPT
 #iptables -A INPUT -p tcp -s 200.200.200.200 --dport 22 -j ACCEPT
 
 # Autoriser SSH
 #iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
 #echo - Autoriser SSH : [OK]
 
 # Ne pas casser les connexions etablies
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 echo - Ne pas casser les connexions établies : [OK]
 
 ################ Priorisation de la bande passante et des connections ######################
 
 echo "[priorisation des connections ssh ...]";
 iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay
 
 echo "[priorisation des connections http ...]";
 iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput
 
 ###### Fin Inialisation ######
 ##### Debut Regles ######
 
 # Autoriser les requetes DNS, FTP, HTTP, NTP
 iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
 iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
 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 OUTPUT -p udp --dport 123 -j ACCEPT
 echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK]
 
 # Autoriser le serveur DNS
 # Les 4 règles suivantes acceptent le rôle de serveur DNS
 iptables -A INPUT -p udp --dport 53 -j ACCEPT
 iptables -A INPUT -p tcp --dport 53 -j ACCEPT
 iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
 # Les 4 règles suivantes acceptent notre rôle de client DNS
 # Autorisation de la sortie de la requète
 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
 # Autorisation du retour de la réponse
 iptables -A INPUT -p udp --sport 53 -j ACCEPT
 iptables -A INPUT -p tcp --sport 53 -j ACCEPT 
 echo - Autoriser serveur DNS : [OK]
 
 # Autoriser loopback
 iptables -t filter -A INPUT -i lo -j ACCEPT
 iptables -t filter -A OUTPUT -o lo -j ACCEPT
 echo - Autoriser loopback : [OK]
 
 # Autoriser ping
 #iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 #iptables -A INPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
 # Limite de 10 pings par seconde 
 iptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
 echo - Autoriser ping : [OK]
 
 # HTTP
 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 INPUT -p tcp --dport 8443 -j ACCEPT
 iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport https -j ACCEPT
 iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -p tcp --sport https -j ACCEPT 
 echo - Autoriser serveur Apache : [OK]
 
 # FTP
 #modprobe ip_conntrack_ftp
 iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
 iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
 iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 echo - Autoriser serveur FTP : [OK]
 
 #Serveur Teamspeak
 iptables -t filter -A INPUT -p udp --dport 8767 -j ACCEPT
 echo - Autoriser serveur TS : [OK]
 
 #Mail
 iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
 iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
 echo - Autoriser serveur Mail : [OK]
 
 #Log iptables (je log tout sauf les paquets de broadcast)
 iptables -t filter -A INPUT -j ULOG -d ! 91.121.31.255 --ulog-prefix="[IPTABLES BLOCKED]"
 }
 
 firewall_stop() {
 
 iptables -F
 iptables -X
 iptables -P INPUT ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 
 iptables -t nat -F
 iptables -t nat -X
 iptables -t nat -P PREROUTING ACCEPT
 iptables -t nat -P POSTROUTING ACCEPT
 iptables -t nat -P OUTPUT ACCEPT
 
 iptables -t mangle -F
 iptables -t mangle -X
 iptables -t mangle -P PREROUTING ACCEPT
 iptables -t mangle -P OUTPUT ACCEPT
 echo " [firewall desactive]"
 
 }
 
 firewall_restart() {
 firewall_stop
 sleep 2
 firewall_start
 }
 
 case "$1" in
 'start')
 firewall_start
 ;;
 'stop')
 firewall_stop
 ;;
 'restart')
 firewall_restart
 ;;
 'status')
 iptables -L
 iptables -t nat -L
 iptables -t mangle -L
 ;;
 *)
 echo "Usage: firewall {start|stop|restart|status}"
 esac

Information sur bartounet auteur de l'article

Les commentaires sont fermés.