Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Iptables] script-rc
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Tue May 08, 2007 7:22 pm    Post subject: [Iptables] script-rc Reply with quote

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 :lol:

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

Code:


#!/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
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php


Last edited by bouleetbil on Sun Sep 02, 2007 8:17 am; edited 4 times in total
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Mon May 14, 2007 8:38 pm    Post subject: Reply with quote

P'tite mise à jour
Ajout en sortie vers serveur rsync (pratique pour emerge --sync :lol: ) Ajout du ping en sortie et paramétrage du ping en entrée
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Tue Jun 19, 2007 5:31 pm    Post subject: Reply with quote

Correction pour connexion réseau edonkey ajout serveur openvpn
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Thu Aug 23, 2007 8:14 am    Post subject: Reply with quote

Bonjour,
Ajout de samba,svn, wengophone
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
bouleetbil
Guru
Guru


Joined: 06 Jul 2004
Posts: 456
Location: Montpellier

PostPosted: Sun Sep 02, 2007 8:17 am    Post subject: Reply with quote

Correction pour samba (mauvais copié/collé) oups
_________________
L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum