Règles iptables pour vos applications (pc de bureau)

From Le Wiki de debian-fr.xyz
Jump to: navigation, search

Règles iptables pour vos applications (pc de bureau).

Il serait bon d'avoir une listes de règle iptables à disposition en fonction des applications installées sur un pc de bureau, dans son utilisation la plus courante, sans "nat" ni partage de connexion, juste un pc de travail connecté à Internet. Aussi pour débuter je poste mon script "iptables" qui bien que non exhaustif fera une base convenable. N'hésitez donc pas à rajouter les règles pour les applications qui n'y figurent pas.


Pour en discuter c'est par ici

Pour une utilisation optimal , Désactiver l'IPv6

#! /bin/sh
### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:   
# Required-Stop:   
# Should-Start:     
# Should-Stop:       
# Default-Start:     1 2 3 4 5
# Default-Stop:      0 6
# Short-Description: script iptables
### END INIT INFO
 
# activer au demarage.
# en root avec su ou sudo
# cp ...iptables /etc/init.d/
# chown root:root /etc/init.d/iptables
# chmod 750 /etc/init.d/iptables
# update-rc.d iptables defaults
# /etc/init.d/iptables start

interface_WAN=$(ip route | awk '/^default via/{print $5}')  # suppose que la passerelle est la route par default

on="1"
off="0"
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
ipbox=$(ip route | grep default | cut -d " " -f3)   # suppose que la passerelle est la route par default
ipinterface_WAN=$(ifconfig $interface_WAN | grep adr: | cut -d":" -f2 | cut -d" " -f1)
reseau_box=$(ip route | grep / | grep "$interface_WAN" | cut -d" " -f1 )
ip_broadcast=$(ifconfig $interface_WAN | grep Bcast | cut -d":" -f3 | cut -d" " -f1)	

fileipblackliste="/usr/local/share/ipblacklist"
##### règles à appliquer ou non ######
ftp=$on
mailssl=$on
cupsServeur=$off
mail=$off
ipblacklist=$off
pingexterne=$off
SecondeLife=$off
LandesEternelles=$on
transmition=$off
clientNTP=$on
amsn=$on
Wesnothclient=$on
Wesnothserver=$on
NWNclient=$on
RegnumOnline=$on
CS16=$on
Ryzom=$on
###################################
IPmaskValide() {
ip=$(echo $1 | cut -d"/" -f1)
mask=$(echo $1 | grep "/" | cut -d"/" -f2)
if [ $(echo $1 | grep -c "^\(\(2[0-5][0-5]\|2[0-4][0-9]\|1[0-9][0-9]\|[0-9]\{1,2\}\)\.\)\{3\}\(2[0-5][0-5]\|2[0-4][0-9]\|1[0-9][0-9]\|[0-9]\{1,2\}\)$") -eq 1 ];then
	echo 1
	return 1
fi
if [ ! $(echo $ip | grep -c "^\(\(2[0-5][0-5]\|2[0-4][0-9]\|1[0-9][0-9]\|[0-9]\{1,2\}\)\.\)\{3\}\(2[0-5][0-5]\|2[0-4][0-9]\|1[0-9][0-9]\|[0-9]\{1,2\}\)$") -eq 1 ];then
	echo 0
	return 0
fi
if [ $(echo $mask | grep -c "^\([1-9]\|[1-2][0-9]\|3[0-2]\)$") -eq 1 ];then
	echo 1
	return 1
fi
i=1 
octn=255
result=1
while [ $i -le 4 ]
do
oct=$( echo $mask | grep '\.'| cut -d "." -f$i )
if [ -z $oct ] ; then
	result=0
	break
fi
if [ ! $octn -eq 255 ];then
	if [ ! $oct -eq 0 ];then
		result=0
		break
	fi
fi 
octn=$oct
if [ ! $oct -eq 255 ] &&  [ ! $oct -eq 254 ]  &&  [ ! $oct -eq 252 ] &&  [ ! $oct -eq 248 ] &&  [ ! $oct -eq 240 ] &&  [ ! $oct -eq 224 ] &&  [ ! $oct -eq 192 ] &&  [ ! $oct -eq 128 ] &&  [ ! $oct -eq 0 ]; then
	result=0
	break	
  fi
i=$( expr $i + 1 )
done
   echo $result
   return $result
}
start() {
    ## parametrage pour ce protéger contre les attaques par spoofing et par synflood
    sysctl -w net.ipv4.conf.default.rp_filter=1
    sysctl -w net.ipv4.conf.all.rp_filter=1
    sysctl -w net.ipv4.tcp_syncookies=1
    sysctl -w net.ipv4.tcp_max_syn_backlog=1280
    ### SUPPRESSION de TOUTES LES ANCIENNES TABLES (OUVRE TOUT!!) ###
    iptables -F
    iptables -X
    ### BLOQUE TOUT PAR DEFAUT (si aucune règle n'est définie par la suite) ###
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    ### Iptables refuse les scans XMAS et NULL
   iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
   iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
   iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
   iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
    ### Iptables limite TCP, UDP, ICMP Flood !
    ### Une des attaques possible est de saturer votre interface réseau.
   # TCP Syn Flood
   iptables -A INPUT -i $interface_WAN -p tcp --syn -m limit --limit 3/s -j ACCEPT
   # UDP Syn Flood
   iptables -A INPUT -i $interface_WAN -p udp -m limit --limit 10/s -j ACCEPT
   # Ping Flood
   if [ $pingexterne  -eq $on ];then
      iptables -A INPUT -i $interface_WAN -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
      iptables -A INPUT -i $interface_WAN -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT
   fi
 
    ### IP indésirables
    ## en gros elles sont sur le site du RIPE (organisme distribuant les IP ou plage   IP aux professionnels)
    ## site du RIPE https://apps.db.ripe.net/search/full-text.html (HADOPI et trident media guard (tmg) sont les mots à rechercher ;)
    if [ $ipblacklist=$on ];then
       if [ -e $fileipblackliste ]
       then
	   while read ligne
	   do
		ipdrop=`echo $ligne | cut -d " " -f1`
                if [ $( IPmaskValide $ipdrop ) -eq 1 ] ;then
			iptables -I INPUT  -s $ipdrop -j DROP
			iptables -I OUTPUT  -d $ipdrop -j DROP
                fi
           done < $fileipblackliste
       else
	    echo > $fileipblackliste
	    chown root:root $fileipblackliste
	    chmod 750 $fileipblackliste
       fi
    fi
   # les lignes du fichier ipblacklist doivent être de type :
   # xxx.xxx.xxx.xxx/xx <=espace commentaire sans le # au debut bien sûr
   # ou
   # xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx <=espace commentaire en fonction de comment on écrit le masque réseau
 
   iptables -I INPUT  -s 85.116.217.200/29 -j DROP # HADOPI
   iptables -I INPUT  -s 193.107.240.0/22  -j DROP  # trident media guard (tmg)
   iptables -I INPUT  -s 195.191.244.0/23  -j DROP # trident media guard (tmg)
   iptables -I INPUT  -s 193.105.197.0/24  -j DROP # trident media guard (tmg)
 
   iptables -I OUTPUT  -d 85.116.217.200/29 -j DROP # HADOPI
   iptables -I OUTPUT  -d 193.107.240.0/22  -j DROP # trident media guard (tmg)
   iptables -I OUTPUT  -d 195.191.244.0/23  -j DROP # trident media guard (tmg)
   iptables -I OUTPUT  -d 193.105.197.0/24  -j DROP # trident media guard (tmg)
 
    ### ACCEPT ALL interface loopback ###
    iptables -A INPUT  -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
 
    ### accepte en entrée les connexions déjà établies (en gros cela permet d'accepter 
    ### les connexions initiées par sont propre PC)
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    ### ftp 
    if [ $ftp=$on ];then
  	modprobe ip_conntrack_ftp	# chargement du module permettent le suivi des connections ftp
	iptables -A OUTPUT -p tcp --dport 21  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 
        iptables -A OUTPUT -p tcp --dport 1023:65535  -m state --state ESTABLISHED,RELATED -j ACCEPT
    fi
 
    ### DHCP
    iptables -A OUTPUT -o $interface_WAN -p udp --sport 68 --dport 67 -j ACCEPT
    iptables -A INPUT -i $interface_WAN -p udp --sport 67 --dport 68 -j ACCEPT
 
    ### DNS indispensable pour naviguer facilement sur le web ###
    iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
 
    ### HTTP navigation internet non sécurisée ###
    iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
 
    ### HTTPS pour le site des banques .... ###
    iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
    
    ### cups serveur , impriment partager sous cups
   if [  $cupsServeur -eq $on ]
   then
    iptables -A OUTPUT -d $ip_broadcast -p udp -m udp --sport 631 --dport 631 -j ACCEPT # diffusion des imprimantes partager sur le réseaux
    iptables -A INPUT -s $reseau_box -m state --state NEW -p TCP --dport 631 -j ACCEPT
    iptables -I INPUT -s $ipbox -m state --state NEW -p TCP --dport 631 -j DROP # drop les requette provenent de la passerelle
   fi
    ### emesene,pindgin,amsn...  ####
   if [  $amsn -eq $on ]
   then
       iptables -A OUTPUT -p tcp -m tcp --dport 1863 -j ACCEPT     
       iptables -A OUTPUT -p tcp -m tcp --dport 6891:6900 -j ACCEPT # pour transfert de fichiers , webcam
       iptables -A OUTPUT -p udp -m udp --dport 6891:6900 -j ACCEPT # pour transfert de fichiers , webcam
   fi
    ### smtp + pop ssl thunderbird ... réceptions des message ####
    if [  $mailssl -eq $on ]
    then
	iptables -A OUTPUT -p tcp -m tcp --dport 995 -j ACCEPT		# pop/ssl
	iptables -A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT      # smtp/ssl
    fi
    ###  smtp + pop thunderbird ... envoi des messages ###
    if [  $mail -eq $on ]
	then
        iptables -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
        iptables -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
    fi
    ### clientNTP ... syncro à un serveur de temps ###
    if [  $clientNTP -eq $on ]
    then
       iptables -A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
    fi
    ### client-transmission
    if [  $transmition -eq $on ]
    then
       iptables -A OUTPUT -p udp -m udp --sport 51413 --dport 1023:65535  -j ACCEPT
       iptables -A OUTPUT -p tcp -m tcp --sport 30000:65535 --dport 1023:65535  -j ACCEPT
    fi
    ### ping ... autorise à "pinger" un ordinateur distant ###
    iptables -A OUTPUT -p icmp -j ACCEPT

 
    ### Regnum Online
    if [  $RegnumOnline -eq $on ]
    then
   	iptables -A OUTPUT  -d 91.123.197.131 -p tcp --dport 47300 -j ACCEPT # autentification
	iptables -A OUTPUT  -d 91.123.197.142 -p tcp --dport 48000:48002  -j ACCEPT # nemon
    fi
    
    if [  $NWNclient -eq $on ];then
       iptables -A OUTPUT  -p udp --dport 5120:5121 -j ACCEPT
       iptables -I OUTPUT  -d 204.50.199.9 -j DROP # nwmaster.bioware.com permet d'éviter le temps d'attente avant l'ouverture du multijoueur 
    fi

    ### LandesEternelles
    if [  $LandesEternelles -eq $on ]
    then
        iptables -A OUTPUT  -d 62.93.225.45 -p tcp --dport 3000 -j ACCEPT
    fi
    ### SecondeLife
    if [  $SecondeLife -eq $on ]
   then
       iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
       iptables -A INPUT  -s 216.82.0.0/18 -p tcp --dport 1023:65535 -j ACCEPT # Secondelife
       iptables -A INPUT  -s 64.94.252.0/23 -p tcp --dport 1023:65535 -j ACCEPT # Voice
       iptables -A INPUT  -s 70.42.62.0/24 -p tcp --dport 1023:65535 -j ACCEPT # Voice
       iptables -A INPUT  -s 74.201.98.0/23 -p tcp --dport 1023:65535 -j ACCEPT # Voice
 
       iptables -A INPUT  -s 216.82.0.0/18 -p udp --dport 1023:65535 -j ACCEPT # Secondelife
       iptables -A INPUT  -s 64.94.252.0/23 -p udp --dport 1023:65535 -j ACCEPT # Voice
       iptables -A INPUT  -s 70.42.62.0/24 -p udp --dport 1023:65535 -j ACCEPT # Voice
       iptables -A INPUT  -s 74.201.98.0/23 -p udp --dport 1023:65535 -j ACCEPT # Voice
 
       iptables -A OUTPUT  -d 216.82.0.0/18 -p tcp --sport 1023:65535 -j ACCEPT # Secondelife
       iptables -A OUTPUT  -d 64.94.252.0/23 -p tcp --sport 1023:65535 -j ACCEPT # Voice
       iptables -A OUTPUT  -d 70.42.62.0/24 -p tcp --sport 1023:65535 -j ACCEPT # Voice
       iptables -A OUTPUT  -d 74.201.98.0/23  -p tcp --sport 1023:65535 -j ACCEPT # Voice
 
       iptables -A OUTPUT  -d 216.82.0.0/18 -p udp --sport 1023:65535 -j ACCEPT # Secondelife
       iptables -A OUTPUT  -d 64.94.252.0/23 -p udp --sport 1023:65535 -j ACCEPT # Voice
       iptables -A OUTPUT  -d 70.42.62.0/24 -p udp --sport 1023:65535 -j ACCEPT # Voice
       iptables -A OUTPUT  -d 74.201.98.0/23  -p udp --sport 1023:65535 -j ACCEPT # Voice
    fi
    if [  $Wesnothclient -eq $on ];then
       #14998 pour version stable.
       #14999 pour version stable précédente.
       #15000 pour version de dévelopement. 
       #15001 télécharger addons
       iptables -A OUTPUT  -d 65.18.193.12 -p tcp --sport 1023:65535 --dport 14998:15001 -j ACCEPT
    fi
    if [  $Wesnothserver -eq $on ];then
       iptables -A INPUT   -p tcp --sport 1023:65535 --dport 15000 -j ACCEPT
    fi
    if [  $CS16 -eq $on ];then
	    # Steam: CS 1.6
            iptables -A INPUT -p tcp --sport 27030 -j ACCEPT
            iptables -A OUTPUT -p udp --dport 27015:27020 -j ACCEPT
	    iptables -A INPUT -p udp --sport 27015:27020 -j ACCEPT
   	    iptables -A OUTPUT -p tcp --dport 27030 -j ACCEPT
    fi
 ###Ryzom
if [ $Ryzom -eq $on ]
then
  srvupdateRtzom=178.33.44.72
  srvRyzom1=176.31.229.93
  iptables -A OUTPUT  -d $srvupdateRtzom -p tcp --dport 873 -j ACCEPT
  iptables -A OUTPUT  -d $srvRyzom1 -p tcp --dport 43434 -j ACCEPT
  iptables -A OUTPUT  -d $srvRyzom1 -p tcp --dport 50000 -j ACCEPT
  iptables -A OUTPUT  -d $srvRyzom1 -p tcp --dport 40916 -j ACCEPT
  iptables -A OUTPUT  -d $srvRyzom1 -p udp --dport 47851:47860 -j ACCEPT
  iptables -A OUTPUT  -d $srvRyzom1 -p tcp --dport 47851:47860 -j ACCEPT
fi
 
    ### LOG ### Log tout ce qui qui n'est pas accepté par une règles précédente                   
    iptables -A OUTPUT -j LOG  --log-prefix "iptables: "
    iptables -A INPUT -j LOG   --log-prefix "iptables: "
    iptables -A FORWARD -j LOG  --log-prefix "iptables: "
    echo "############ <START> ##############"
    iptables -L -n
    echo "############ </START> ##############"
}
stop() {
### OUVRE TOUS !! ###
    iptables -F
    iptables -X
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    echo "############ <STOP> ##############"
    iptables -L -n
    echo "############ </STOP> ##############"
}
 
case "$1" in
  start)
   start
    ;;
  stop)
      stop
    ;;
  restart)
   stop
   start
    ;;
  *)
    N=/etc/init.d/${0##*/}
    echo "Usage: $N {start|stop|restart}" >&2
    exit 1
    ;;
esac
 
exit 0

Pour la séparation des log avec rsyslog :

# apt-get install rsyslog

créer le fichier /etc/rsyslog.d/iptables.conf et y copier le code suivant

:msg,contains,"iptables" /var/log/iptables.log
& ~