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


#1

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.

lien vers le wiki pour toutes les bonnes volontés qui veule contribuer a ce scripte.

#! /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 | grep default | sed -e "s/dev/:/g" | cut -d":" -f2 | sed -e "s/proto//g" | sed -e "s/static//g" | sed -e "s/ //g") # 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
###################################
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 "ip sans mask"
	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
	return 0
fi
if [ $(echo $mask | grep -c "^\([1-9]\|[1-2][0-9]\|3[0-2]\)$") -eq 1 ];then
	echo "mask xx"
	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
if [ $result -eq 1 ] ;then
    echo "mask xxx.xxx.xxx.xxx"
    return 1
else
    return 0
fi
 
 
}
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`
	        IPmaskValide $ipdrop
		if [ $? -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
 
 
    ### 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

Des logs très suspect
#2

Salut,

Bien sûr tu as tenu compte de ce qui a déjà été réalisé dans Trucs et Astuces et tu es conscient que personne ne peut modifier ton oeuvre su tu ne la mets pas dans le wiki :slightly_smiling:


#3

Je ne comprends pas trop l’intêret d’avoir une règle qui refuse par defaut tout le trafic entrant
(iptables -P INPUT DROP), et une autre plus loin qui refuse les paquets dont la source est une des adresse du RIDE.

Je rajouterais une règle (enfin 2 même) pour le dhcp :

## Trafic DHCP (entrant et sortant)
		iptables -A OUTPUT -o <interface> -m state --state NEW -p udp --dport 67 -j ACCEPT  # Sortant : envoi requête sur broadcast:67 (bootps)
		iptables -A INPUT -i <interface> -m state --state NEW -p udp --dport 68 -j ACCEPT   # Entrant : réception adresse sur 68(bootpc)

#4

Ce n’est pas une règle, c’est la politique par défaut.

RIPE. Il ne s’agit des adresses du RIPE mais d’adresses que chacun peut considérer comme indésirables selon les critères qui lui sont propres, le site du RIPE étant un moyen parmi d’autres de les identifier. Le but d’une telle règle est de bloquer toute communication avec une adresse en question, même sur les ports par ailleurs autorisés par les autres règles.

Quant au script, je suis désolé de devoir dire ça, mais une faute tous les deux mots dans les commentaires, ça pique trop les yeux.


#5

Où il est questions de règles… :048

peut-être n’est-il pas francophone depuis sa jeunesse, et bien excusable.


#6

Et c’est pour quoi le wiki ? :laughing:
Alors que là on ne peut rien pour lui et son oeuvre :slightly_smiling:


#7

Qu’est-ce que ça vaut?
C’est le même principe que les listes noires antispam - contre lesquelles fran.b s’oppose avec raison; Et je déteste moi aussi le principe

Ça fini toujours pareil, il faut payer pour être enlever de la liste…
Je pense par exemple à ces fumiers de chez uceprotect.net; Ils ne s’emmerdent pas, ils bloquent carrément des plages d’IP.

Et j’ai le choix? Enfoirés!


#8

La base de données du RIPE n’a rien à voir avec une quelconque liste noire. Le RIPE est le registre qui gère l’allocation des adresses IP pour l’Europe et le Moyen-Orient, comme le fait l’ARIN pour l’Amérique du Nord, l’APNIC pour l’Asie-Pacifique… Quand on fait un whois sur une adresse IP pour connaître son “propriétaire”, c’est leurs bases de données qu’on interroge.

Visiblement Hulk se sert du moteur de recherche du site du RIPE pour identifier les adresses IP des organisations avec qui il n’a pas envie de communiquer : Hadopi et les sociétés connues pour surveiller les réseaux P2P pour le compte des majors.


#9

Salut. Ok, c’est clair.
Je me suis emballé pour rien… :wink:


#10

Salut,

Mais ce serait encore plus clair s’il annonçait la couleur dans son script. Notre forum n’a pas pour but de favoriser les téléchargements douteux :mrgreen:


#11

Tant que ce n’est pas manifestement illicite, je considère que chacun ici est assez grand et prend ses responsabilités.


#12

Pour l’orthographe , je vais faire un effort pour corriger tous sa , mais effectivement je suis plus que nul .

le Wiki j’avoue que débutent sur les forum et autres je ni avais pas pensais et le privilégierais a l’avenir .

Pour ce qui concerne les IP indésirables , c’est un choix personnel , car je trouve vraiment ces sociétés inutiles car pour eux IP égale personne physique si tel étais les cas a quoi bon d’autre société comme Verisign par exemple, Ce raccourci que je trouve dangereux et donc bon de boycotter par tous les moyens que l’on peut.
Mais bien sur c’est personnel et si c’est mal venu je supprimerais les lignes y fessant référence.


#13

Salut,
Merci d’avoir pris le temps de faire le transfert sur le Wiki.
Il reste à tester et valider.
Je n’ai pas beaucoup de temps, si quelqu’un veux bien vérifier le script (pour qu’il puisse être validé) nous lui en serions reconnaissant!

Règles_iptables_pour_vos_applications_(pc_de_bureau)

@Hulk: Je te conseille de mettre le lien vers le Wiki dans ton post initial, ça permettra à ceux qui le souhaite, après discussion ici, de faire des modification et corrections (en tout cas je sais que pour l’orthographe ce sera rapidement fait…)! :006

Pense aussi à mettre un lien sur le Wiki vers ce fil, ça permettra la discussion!


#14

Salut,

Pour l’orthographe j’ai fait ce que j’ai pu mais j’en ai sans doute laissé pour les copains :slightly_smiling:
J’insiste sur le fait qu’interdire l’intrusion de HADOPI doit être à la limite de la légalité et mériterait d’être signalé. Parmi nos lecteurs il n’y a pas que des grands garçons :smiley:


#15

c’est deux règles ne sont pas utiles a priori car le service dhcpclient utilise sockets brutes (1) qui fait que les paquets ne passe pas dans les tables filter nat et mangle seulement dans la table raw et donc je n’est pas encore réussi a filtrer le DHCP.
si j’ai dit une bêtise ne pas hésiter a me corriger.

(1)sockets brutes (raw) ne pouvant être ouvert que par un service ayant un uid 0 (root)


#16

D’autres clients DHCP que le dhclient d’ISC (dhcpcd, pump, udhcpc) peuvent fonctionner différemment, donc on ne sait jamais. La vérification de l’état de connexion n’a pas grand intérêt pour le protocole DHCP, en revanche on peut durcir les règles en incluant le port source :

iptables -A OUTPUT -o <interface> -p udp --sport 68 --dport 67 -j ACCEPT iptables -A INPUT -i <interface> -p udp --sport 67 --dport 68 -j ACCEPT
A noter qu’une requête DHCP n’est pas forcément émise en broadcast, notamment lors du renouvellement du bail.

D’autre part je doute qu’il y ait un lien entre les sockets raw et la table raw, ni qu’un paquet pourrait traverser la table raw mais pas les autres dans la mesure où toutes les tables sont attachées aux mêmes points d’ancrage (hooks) de netfilter.


#17

Salut,

Petit problème entre le titre dans le wiki et celui de la page. Les raccourcis du forum font attezrrir dans le vide :slightly_smiling: