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

De Le Wiki du Forum-Debian.fr
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

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

on="1" off="0" PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin interface_WAN="eth0" fileipblackliste="/usr/local/share/ipblacklist"

          1. règles à appliquer ou non ######

ipblacklist=$off pingexterne=$off SecondeLife=$off LandesEternelles=$on transmition=$on clientNTP=$on amsn=$on Wesnothclient=$on Wesnothserver=$off

IPmaskValide() { ip=$(echo $1 | cut -d"/" -f1) mask=$(echo $1 | cut -d"/" -f2) if [ ! $(echo $ip | grep -c "^\(\(2[0-5][0-5]\|1[0-9][0-9]\|[0-9]\{1,2\}\)\.\)\{3\}\(2[0-5][0-5]\|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 i=1 octn=255 result=1 while [ $i -le 4 ] do

 	oct=$( echo $mask | cut -d "." -f$i )
 	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 return 1 else

           return 0

fi else return 1 fi } start() {

   ### 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
  # fichiers de configuration à modifier
  # pas de spoofing
  # Fichier /etc/sysctl.conf
  # net.ipv4.conf.default.rp_filter=1
  # net.ipv4.conf.all.rp_filter=1
  # pas de synflood
  # Fichier /etc/sysctl
  # net.ipv4.tcp_syncookies=1
  # Ceci active la resistance au Flood SYN
  # net.ipv4.tcp_max_syn_backlog=1280 


   ### 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
   ### 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
   ### 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
   ### pop thunderbird ... réceptions des message ####
   iptables -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
   ### smtp thunderbird ... envoi des messages ###
   iptables -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
   ### 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:65000  -j ACCEPT
      iptables -A OUTPUT -p tcp -m tcp --sport 30000:65000 --dport 1023:65000  -j ACCEPT
   fi
   ### ping ... autorise à "pinger" un ordinateur distant ###
   iptables -A OUTPUT -p icmp -j ACCEPT
   ### LandesEternelles
   if [  $LandesEternelles -eq $on ]
  then
  iptables -A OUTPUT  -d 62.93.225.45 -p tcp --sport 39943 --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:65000 -j ACCEPT # Secondelife
      iptables -A INPUT  -s 64.94.252.0/23 -p tcp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A INPUT  -s 70.42.62.0/24 -p tcp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A INPUT  -s 74.201.98.0/23 -p tcp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A INPUT  -s 216.82.0.0/18 -p udp --dport 1023:65000 -j ACCEPT # Secondelife
      iptables -A INPUT  -s 64.94.252.0/23 -p udp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A INPUT  -s 70.42.62.0/24 -p udp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A INPUT  -s 74.201.98.0/23 -p udp --dport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 216.82.0.0/18 -p tcp --sport 1023:65000 -j ACCEPT # Secondelife
      iptables -A OUTPUT  -d 64.94.252.0/23 -p tcp --sport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 70.42.62.0/24 -p tcp --sport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 74.201.98.0/23  -p tcp --sport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 216.82.0.0/18 -p udp --sport 1023:65000 -j ACCEPT # Secondelife
      iptables -A OUTPUT  -d 64.94.252.0/23 -p udp --sport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 70.42.62.0/24 -p udp --sport 1023:65000 -j ACCEPT # Voice
      iptables -A OUTPUT  -d 74.201.98.0/23  -p udp --sport 1023:65000 -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:65000 --dport 14998:15001 -j ACCEPT
   fi
   if [  $Wesnothserver -eq $on ];then
  iptables -A INPUT   -p tcp --sport 1023:65000 --dport 15000 -j ACCEPT
  fi


   ### LOG ### Log tout ce qui qui n'est pas accepté par une règles précédente
       # prérequis :       sudo apt-get install sysklogd
       # echo 'kern.warning             /var/log/iptables.log' > /etc/syslog.conf                     
   iptables -A OUTPUT -j LOG --log-level 4
   iptables -A INPUT -j LOG  --log-level 4
   iptables -A FORWARD -j LOG  --log-level 4
   echo "############ <START> ##############"
   iptables -L -n
   echo "############ </START> ##############"

} stop() {

      1. 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