Règles iptables pour vos applications (pc de bureau)
Aller à la navigation
Aller à la recherche
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 & ~