# [Iptables] script-rc

## bouleetbil

Bonjour,

Je me suis fais un p'tit script pour iptables avec des morceaux du script iptables gentoo et des recherches internet 

Voici le résultat   :Laughing: 

Attention, la gestion de iptables à partir du noyau 2.6.20 à changer il faut chercher dans netfilter, personnellement j'ai mis les options en dur

```

#!/sbin/runscript

# firewall using netfilter v0.12 19/06/2007  written by : bouleetbil <bouleetbil@frogdev.info> 

# this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html) 

# Start/stop/restart/status firewall:

opts="status reject "

#Déclaration des variables

IPTABLES="/sbin/iptables"

IPTABLES_PROC="/proc/net/ip_tables_names"

#POUR LA MISE EN PLACE

#1=oui 0=non

#permet de tout logger 

DEBUG=1

TEXTE_LOG="FIREWALL_refus"

#pour activer les logs

#1=oui

#2=non

ACTIVE_LOG=1

#carte ou modem : ppp0 ou eth0 ... pour le masquerading

IF_CARTE="ath0" 

#IP du reseau local de 192.168.0.0 à 192.168.0.24

RESEAU_LOCAL="192.168.0.0/24"

#cette machine fait office de passerelle 1=oui 0=non

PASSERELLE=0

#gestion du ping de la machine (exterieur vers intérieur)

#NOTPING=0 ping actif, NOTPING=1 ping interdit

NOTPING=0

#SERVICE A OUVRIR 1=Oui 0=Non

SERV_TORRENT=0

SERV_SSH=0

SERV_SMTP=0

SERV_HTTP=0

SERV_HTTPS=0

SERV_DNS=0

SERV_IRC=0

SERV_CVS=0

SERV_FTP=0

SERV_MSN=1

SERV_DONKEY=0

SERV_VIDEOLAN=0

SERV_SAP=0

SERV_GNOMEMETING=0

SERV_OPENVPN=0

SERV_WENGOPHONE=1

SERV_SAMBA=0

depend() {

   before net

   use logger

}

checkkernel() {

   if [ ! -e ${IPTABLES_PROC} ] ; then

      eerror "Votre noyau ne supporte pas iptable"

      eerror "chargez les modules et recommencez."

      return 1

   fi

   return 0

}

start() {

   

   checkkernel || return 1

   einfo "[Démarrage du firewall]"

   ############################### REGLES PAR DEFAUT ###########################

   einfo "[Initialisation de la table filter]"

   ${IPTABLES} -F

   ${IPTABLES} -X

   einfo "[Politique par défaut de la table filter]"

   # On ignore tout ce qui entre ou transite 

   #refus de tout

   $IPTABLES -P INPUT DROP

   $IPTABLES -P OUTPUT DROP

   $IPTABLES -P FORWARD DROP

   einfo "Refus de toutes les connexions"

   

   

   #regles reseau local on accepte tous

   # "On accepte le traffic sur 'lo'"

   $IPTABLES -A INPUT -i lo -j ACCEPT

   $IPTABLES -A OUTPUT -o lo -j ACCEPT

   $IPTABLES -A FORWARD -i lo -j ACCEPT

   $IPTABLES -A FORWARD -o lo -j ACCEPT

   einfo "Toutes les connexions internes sont actives" 

   ############################### INTERNET ###########################

   einfo "[On autorise les clients à accéder au reseau local ]"

   # Autorise les connexions avec le réseau 192.168.0.0/24 connecté à l'interface eth0

   ${IPTABLES} -t filter -A OUTPUT -o $IF_CARTE -s $RESEAU_LOCAL -d $RESEAU_LOCAL -j ACCEPT

   ${IPTABLES} -t filter -A INPUT  -i $IF_CARTE -s $RESEAU_LOCAL -d $RESEAU_LOCAL -j ACCEPT

   # Refus des paquets invalides

      # Drop any packet that is not in the state table.

      $IPTABLES -A INPUT -m state --state INVALID -j DROP

   einfo "[Rejet des paquets associés avec aucune connexion connue. ]"   

      # On accepte les paquets que l'on a initialisé.

   $IPTABLES -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT

   $IPTABLES -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

   $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

   #On autorise les sorties icmp (pour pinger l'exterieur)

   $IPTABLES -A OUTPUT -p icmp -j ACCEPT

   # Autorise les paquets à sortir comme ping dans ce cas plus besoin d'ouvir des services en sortie (http, https...)

   #$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT

      

   #1ere version 

   #$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT 

   ################################# PREPARATION DES LOGS #########################

   if [ ${DEBUG} == "1" ]

   then

      einfo "Prépare les log pour mise en place du firewall "

      #Logguer les packets DROPés

      #Logguer les packets au début afin de vérifier que tous fonctionne

      $IPTABLES -N LOG_DROP

      $IPTABLES -A LOG_DROP -j LOG --log-prefix "$TEXTE_LOG"

      $IPTABLES -A LOG_DROP -j DROP

      einfo "Toutes les entrées sont prefixées de :"

      einfo "[FIREWALL refus] "

      ewarn "Cela prend beaucoup de place "

      ewarn "Une fois les règles mises en place, désactivé cette option"

   fi

   ############################### LES TABLES NAT ET MANGLE #############################

   einfo "[Initialisation des tables nat et mangle]"

   $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

   #################################### LE MASQUERADING ########################################

   # Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)

   einfo "[Mise en place du masquerading]"

   $IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -o ${IF_CARTE} -j MASQUERADE

   ############################## Les acces clients vers internet #####################

   einfo "[On autorise les clients à accéder à internet ]"

   einfo "[Autorise la résolution des noms de domaines ]"

   #accepte la résolution de domaine en sortie

   $IPTABLES -A OUTPUT -p tcp --dport 53 -j ACCEPT

   $IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT

   einfo "[Autorise l'acces NTP ]"

   #Protocole de temps réseau (NTP)

   $IPTABLES -A OUTPUT -p udp --dport 123 -j ACCEPT

   einfo "[Autorise la navigation sur internet ]"

   #Acces (http)

   $IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT

   einfo "[Autorise le https ]"

   #Acces (https)

   $IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT

   einfo "[Autorise SSH ]"

   #Acces (ssh)

   $IPTABLES -A OUTPUT -p tcp --dport 22 -j ACCEPT

   einfo "[Autorise l'envoi de mail ]"

   $IPTABLES -A OUTPUT -p tcp --dport 25 -j ACCEPT

   einfo "[Autorise la reception de mail ]"

   $IPTABLES -A OUTPUT -p tcp --dport 110 -j ACCEPT

   einfo "[Autorise la connexion vers serveur FTP ]"

   $IPTABLES -A OUTPUT -p tcp --dport 21 -j ACCEPT

   $IPTABLES -A OUTPUT -p tcp --dport 20 -j ACCEPT

   einfo "[Autorise les listes de diffusion ]"

   $IPTABLES -A OUTPUT -p tcp --dport nntp -j ACCEPT

   einfo "[Autorise Jabber]"

   $IPTABLES -A OUTPUT -p tcp --dport 5222 -j ACCEPT

   einfo "[Autorise l'attribution d'adresse IP via DHCP]"

   $IPTABLES  -A OUTPUT -p udp --sport 68 --dport 67 -j ACCEPT   

        einfo "[Autorise rsync]"

        $IPTABLES  -A OUTPUT -p tcp --dport 873 -j ACCEPT

        einfo "[CVS 2401]"

        $IPTABLES  -A OUTPUT -p tcp --dport 2401 -j ACCEPT

        #einfo "[Autorise lyrics]"

        #$IPTABLES  -A OUTPUT -p tcp --dport 8880 -j ACCEPT

   einfo "[Autorise torrent]"

        $IPTABLES  -A OUTPUT -p tcp --dport 6881:6889 -j ACCEPT

   

   einfo "[Autorise chat]"

        $IPTABLES  -A OUTPUT -p tcp --dport 6667 -j ACCEPT

   einfo "[Autorise GIT]"

        $IPTABLES  -A OUTPUT -p tcp --dport 9418 -j ACCEPT

   einfo "[Autorise SVN]"

        $IPTABLES  -A OUTPUT -p tcp --dport 3690 -j ACCEPT

        $IPTABLES  -A OUTPUT -p udp --dport 3690 -j ACCEPT

 

   #Une liste de ports est disponible : http://www.frogdev.info/reseaux.php

   #ajouter ici les protocoles autorisé en sortie

   #Il suffit de lancer le script avec "reject" afin de consulter les connexions rejete

   #einfo "[Autorise la sortie de XXX ]"

   #$IPTABLES -A OUTPUT -p tcp --dport N° du port -j ACCEPT

   ################################################################################

   ###############openvpn10.8.0.0

   

   ################################# ACTIVATION DE LA PASSERELLE ##################

   if [ ${PASSERELLE} == "1" ]

   then

      einfo "[Activation de la passerelle]"

      echo 1 > /proc/sys/net/ipv4/ip_forward

   else

      einfo "[Désactivation de la passerelle]"

      echo 0 > /proc/sys/net/ipv4/ip_forward

   fi

   ################################# PAS DE SPOOFING ############################

   einfo "[Pas de spoofing]"

   if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then

   for filtre in /proc/sys/net/ipv4/conf/*/rp_filter

   do

   echo 1 > $filtre

   done

   fi 

   ########################## PAS DE SYNFLOOD ####################

   einfo "[Pas de synflood]"

   if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then

      echo 1 > /proc/sys/net/ipv4/tcp_syncookies

   fi

   ################################## PAS DE PING ###############################

   if [ ${NOTPING} == "1" ]

   then

      einfo "[Pas ping]"

      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

      if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then

         echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

      fi

   else

      einfo "[Ping actif]"

      echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

      echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

      if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then

         echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

      fi

   fi

   ############################ Fonctionnalités serveurs #####################################

   einfo "[Fonctionalités serveurs, visibles depuis internet ]"

   # A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,

   # vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne

   # depuis internet ne peux accéder à l'un des serveurs que vous hébergés.

   # Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,

   # en décommentant les 2 ou 3 lignes correspondantes.

   

   if [ ${SERV_SSH} == "1" ]

   then

      einfo "[autorisation du serveur ssh(22) ...]"

      $IPTABLES -A INPUT -p tcp --dport ssh -j ACCEPT

   fi

   if [ ${SERV_SMTP} == "1" ]

   then

      einfo "[autorisation du serveur smtp(25) ...]"

      $IPTABLES -A INPUT -p tcp --dport smtp -j ACCEPT

   fi

   if [ ${SERV_HTTP} == "1" ]

   then

      einfo "[autorisation du serveur http(80) ...]"

      $IPTABLES -A INPUT -p tcp --dport www -j ACCEPT

   fi

   if [ ${SERV_HTTPS} == "1" ]

   then

      einfo "[autorisation du serveur https(443) ...]"

      $IPTABLES -A INPUT -p tcp --dport https -j ACCEPT

   fi

   if [ ${SERV_SAMBA} == "1" ]

   then

        # EPMAP

          $IPTABLES -A INPUT -m state --state NEW -p TCP --dport 135 -j ACCEPT

      $IPTABLES -A INPUT -m state --state NEW -p UDP --dport 135 -j ACCEPT

            # NetBios-NS

       $IPTABLES -A INPUT -m state --state NEW -p TCP --dport 137 -j ACCEPT

       $IPTABLES -A INPUT -m state --state NEW -p UDP --dport 137 -j ACCEPT

       # NetBios-DGM => exploration du réseau (basé sur SMB browser service)

      $IPTABLES -A INPUT -m state --state NEW -p UDP --dport 138 -j ACCEPT

       # NetBios-SSN => partage fichiers, imprimantes par Microsoft

       $IPTABLES -A INPUT -m state --state NEW -p TCP --dport 139 -j ACCEPT

       # SMB/IP => partage fichiers, imprimantes par SaMBa

         $IPTABLES -A INPUT -m state --state NEW -p TCP --dport 445 -j ACCEPT

      $IPTABLES -A INPUT -m state --state NEW -p UDP --dport 445 -j ACCEPT

   fi   

   if [ ${SERV_DNS} == "1" ]

   then

      einfo "[autorisation du serveur DNS(53) ...]"

      $IPTABLES -A INPUT -p udp --dport domain -j ACCEPT

      $IPTABLES -A INPUT -p tcp --dport domain -j ACCEPT

   fi

   if [ ${SERV_IRC} == "1" ]

   then

      einfo "[autorisation du serveur irc(6667) ...]"

      iptables -A INPUT -p tcp --dport ircd -j ACCEPT

   fi

   if [ ${SERV_CVS} == "1" ]

   then

      einfo "[autorisation du serveur cvs (2401) ...]"

      $IPTABLES -A INPUT -p tcp --dport cvspserver -j ACCEPT

   fi

   if [ ${SERV_FTP} == "1" ]

   then

      einfo "[autorisation du serveur FTP(21 et 20) ...]"

      $IPTABLES -A INPUT -p tcp --dport 20 -j ACCEPT

      $IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT

   fi

   

   if [ ${SERV_MSN} == "1" ]

   then

      #msn transfert de fichier

      $IPTABLES -A INPUT -p TCP --sport 6891:6900 -j ACCEPT

      $IPTABLES -A OUTPUT -p tcp --dport 6891:6900 -j ACCEPT

      #msn communication

      $IPTABLES -A INPUT  --protocol tcp --sport 1863 -m state --state ESTABLISHED,RELATED -j ACCEPT

      $IPTABLES -A OUTPUT  --protocol tcp --dport 1863 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

      #webcam

      $IPTABLES -A INPUT -p TCP --sport 6800:7000 -j ACCEPT

      $IPTABLES -A OUTPUT -p tcp --dport 6800:7000 -j ACCEPT

      $IPTABLES -A INPUT -p udp --sport 6800:7000 -j ACCEPT

      $IPTABLES -A OUTPUT -p udp --dport 6800:7000 -j ACCEPT

      einfo "[autorisation MSN(6891:6900 et 1863 ) ...]"

   fi

   if [ ${SERV_DONKEY} == "1" ]

   then

      #on accept sur les port entrants par défault d'eMULE

      $IPTABLES -A INPUT -p tcp --dport 34037 -j ACCEPT

      $IPTABLES -A INPUT -p tcp --dport 34038 -j ACCEPT

      $IPTABLES -A INPUT -p udp --sport 4242 -j ACCEPT

      $IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT

      $IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT

      $IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT

      $IPTABLES -A INPUT -p udp --dport 4661 -j ACCEPT

      einfo "[Réseau emule actif]"

      #accepte toutes les sorties

      einfo "ATTENTION  pour emule que toute les connexions sortante que l'on établi!!!"

      $IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT

   

   fi

   if [ ${SERV_VIDEOLAN} == "1" ]

   then

      $IPTABLES -A INPUT -p udp --dport 1234 -j ACCEPT

      einfo "[Ouverture flux VideaoLAN (1234) ]"

   fi

   if [ ${SERV_SAP} == "1" ]

   then

      $IPTABLES -A INPUT -p udp -d 224.2.127.254 --dport 9875 -j ACCEPT

      einfo "[Ouverture des annonces SAP ]"

   fi

   if [ ${SERV_GNOMEMETING} == "1" ]

   then

      $IPTABLES -A INPUT -p tcp --dport 30000:33000 -j ACCEPT

      $IPTABLES -A INPUT -p tcp --dport 1720 -j ACCEPT

      $IPTABLES -A INPUT -p udp --dport 5000:5006 -j ACCEPT

      einfo "[Ouverture de GnomeMeeting ]"

   fi

   

   if [ ${SERV_TORRENT} == "1" ]

   then

      $IPTABLES -A INPUT -p tcp --dport 6881:6889 -j ACCEPT

      einfo "[Ouverture Bittorrent (6881:6889) ]"

   fi

   

   if [ ${SERV_WENGOPHONE} == "1" ]

   then

      $IPTABLES -A INPUT -p udp --dport 5060 -j ACCEPT

      $IPTABLES -A INPUT -p udp --dport 10600:10601 -j ACCEPT

      einfo "[Ouverture de wengophone ]"

   fi

   if [ ${SERV_OPENVPN} == "1" ]

   then

      $IPTABLES -A OUTPUT -p udp --dport 1194 -j ACCEPT   

      $IPTABLES -A INPUT -p udp --dport 1194 -j ACCEPT

      #82.236.233.XX adresse visible depuis internet   

      $IPTABLES -t nat -A POSTROUTING -o $IF_CARTE  -j SNAT --to 82.236.233.XX

      $IPTABLES -A FORWARD  -j ACCEPT

      $IPTABLES -A INPUT -i tap+ -j ACCEPT

      $IPTABLES -A FORWARD -i tap+ -j ACCEPT

      IPTABLES -t nat -A POSTROUTING -s  10.8.0.0/24 -o $IF_CARTE -j MASQUERADE

   fi

   # Ne pas décommenter les 3 lignes qui suivent.

   # Plus généralement :

   #echo "[autorisation du serveur Mon_truc(10584) ...]"

   #$IPTABLES -A INPUT -p tcp --dport 10584 -j ACCEPT

   #redirection d'une interface vers une autre

   #$IPTABLES -A FORWARD -i $IF_PRV -o $IF_PUB -j ACCEPT

   if [ ${ACTIVE_LOG} == "1" ]

   then

      #on log tout

      einfo "[Activation des logs]"

      $IPTABLES -A FORWARD -j LOG_DROP

      $IPTABLES -A INPUT -j LOG_DROP

      $IPTABLES -A OUTPUT -j LOG_DROP

   fi

   einfo "[firewall activé !]"

   

}

stop() {

   einfo "[Désactivation de la passerelle]"

   echo 0 > /proc/sys/net/ipv4/ip_forward

   einfo "[Initialisation de la table filter]"

   ${IPTABLES} -F

   ${IPTABLES} -X

   einfo "[Politique par défaut de la table filter]"

   ${IPTABLES}  -P FORWARD ACCEPT

   ${IPTABLES}  -P INPUT 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

   einfo "[firewall desactivé! ]"

}

reject() {

   grep $TEXTE_LOG /var/log/messages

}

status() {

   ${IPTABLES} -L

}

restart() {

   svc_stop

   sleep 2

   svc_start

}

```

Si vous voyez des choses à changer je suis preneur

----------

## bouleetbil

P'tite mise à jour

Ajout en sortie vers serveur rsync (pratique pour emerge --sync   :Laughing:  ) Ajout du ping en sortie et paramétrage du ping en entrée

----------

## bouleetbil

Correction pour connexion réseau edonkey ajout serveur openvpn

----------

## bouleetbil

Bonjour,

Ajout de samba,svn, wengophone

----------

## bouleetbil

Correction pour samba (mauvais copié/collé) oups

----------

