Vous n'êtes pas identifié.
A mes début sous GNU/Linux, il j'ai très tôt ressenti le besoin d'implémenter un firewall en mettant en oeuvre le fabuleux outil qu'est IPTABLES. Mais au début, son utilisation peu parâitre complexe. C'est pourquoi je vous propose de vous inspirer du script que j'utilise comme firewall. Je sais certain diront qu'il n'est pas parfait, mais il n'est là que comme introduction à iptables et comme base de travail. Alors amusez-vous :
KIKOX=192.168.0.10 # La Passerelle LINDOWS=192.168.0.20 # PC du réseau sous LinuX WINDOWS=192.168.0.30 # PC du réseau sous Windows AZGAARD=192.168.0.10/24 FIREWALL=$KIKOX WEB=$KIKOX # mettre "" si aucun serveur web PORT=80 # le port du serveur web FTP=$KIKOX FTPPORT=21 DONKEY=$KIKOX INTERNE="eth0" # : interface vers le réseau éthernet à protéger EXTERNE="ppp0" # : interface vers internet (ADSL) IPTABLES=/sbin/iptables mode=$1 case "$mode" in 'start') echo "SmileBoB Firewall: " # on efface toutes les règles existantes for table in filter nat mangle; do $IPTABLES -t $table -F $IPTABLES -t $table -X done # avant tout, on accepte tout ce qui vient du réseau interne $IPTABLES -A INPUT -s $AZGAARD -j ACCEPT # on accepte toute les reponses associées au trafic sortant $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT # on accepte les recherches DNS à partir des serveurs de nom connus (/etc/resolv.conf) for DNS in $(grep ^n /etc/resolv.conf | awk '{print $2}'); do $IPTABLES -t filter -A INPUT -s $DNS -j ACCEPT done # on accepte les demandes de connexion ssh $IPTABLES -A INPUT -p tcp --destination-port ssh -j ACCEPT # si un serveur web est défini, on s'occupe de lui :) if [ -n "$WEB" ] then echo "" echo "Section WEB :" # on accepte les requêtes HTTP entrantes $IPTABLES -t filter -A INPUT -p tcp --source-port www -j ACCEPT $IPTABLES -t filter -A INPUT -p tcp --destination-port www -j ACCEPT echo " Port WWW $PORT ouvert : [OK]" if [ $FIREWALL != $WEB ] # si le serveur web n'est pas sur la passerelle then # on pense a activer le port forwarding du firewall vers notre serveur web $IPTABLES -t nat -A PREROUTING -p tcp -d $FIREWALL --dport http -j DNAT --to $WEB:$PORT echo " Forwarding WWW sur $WEB port $PORT: [OK]" fi fi if [ -n "$FTP" ] then echo "" echo "Section FTP :" #on accepte les requete ftp entrantes $IPTABLES -t filter -A INPUT -p tcp --source-port ftp -j ACCEPT $IPTABLES -t filter -A INPUT -p tcp --destination-port ftp -j ACCEPT echo " Port FTP $FTPPORT ouvert : [OK]" echo "interface web ouverte" if [ $FIREWALL != $FTP ] #si le serveur n'est pas sur la passerelle then # on forward $IPTABLES -t nat -A PREROUTING -p tcp -d $FIREWALL --dport ftp -j DNAT --to $FTP:$FTPPORT echo " Forwarding FTP sur $FTP port $FTPPORT : [OK]" fi fi if [ -n "$DONKEY" ] then echo "" echo "Section Emule :" #on accept sur les port entrants par défault d'eMULE $IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 34037 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 34038 -j ACCEPT echo " Emule ouverture du port entrant 4662 : [OK]" $IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT echo " Emule ouverture du port entrant 4672 : [OK]" # on accepte les sorties pour emule $IPTABLES -A INPUT -p tcp --sport 4662 -j ACCEPT echo " Emule ouverture du port sortant 4662 : [OK]" $IPTABLES -A INPUT -p udp --sport 4672 -j ACCEPT echo " Emule ouverture du port sortant 4672 : [OK]" if [ $FIREWALL != $DONKEY ] then # Redirection car emule n'est pas sur la passerelle $IPTABLES -t nat -I PREROUTING -p tcp -s ! $AZGAARD --dport 4662 -j DNAT --to $WINDOWS echo " Forwarding du port 4662 : [OK]" echo " Forwarding du port 4672 : [OK]" $IPTABLES -t nat -I PREROUTING -p udp -s ! $AZGAARD --dport 4672 -j DNAT --to $WINDOWS fi fi # on refuse et on entre dans le journal tout ce qui est entrant et qui n'est pas sur loopback $IPTABLES -N logdeny $IPTABLES -t filter -A logdeny -j LOG --log-prefix "Pfirewall : " $IPTABLES -t filter -A logdeny -j DROP $IPTABLES -t filter -A INPUT -i ! lo -m state --state NEW,INVALID -j logdeny # on active la conversion d'adresse réseau (IP forwarding) if [ -n "$INTERNE" ] then echo 1 > /proc/sys/net/ipv4/ip_forward # on accepte les paquets entre internet et le réseau interne si : # - connexion existente # inititation d'une nouvelle conexion par un membre du réseau interne $IPTABLES -A FORWARD -i $EXTERNE -o $INTERNE -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $INTERNE -o $EXTERNE -j ACCEPT if [ $EXTERNE = ppp0 ] then # on convertit toute adresse IP sortante en l'IP externe du firewall (dynamique ici) $IPTABLES -t nat -A POSTROUTING -s $AZGAARD -o $EXTERNE -j MASQUERADE else # on convertit toute adresse IP sortante en l'IP externe du firewall (fixe ici) $IPTABLES -t nat -A POSTROUTING -o $EXTERNE -j SNAT --to $FIREWALL fi fi echo "[ OK ]" ;; 'stop') echo 0 > /proc/sys/net/ipv4/ip_forward # on efface toutes les règles existantes for table in filter nat mangle; do $IPTABLES -t $table -F $IPTABLES -t $table -X done ;; *) echo "usage $0 start|stop" ;; esac
Hors ligne
En voila un autre :
/etc/rc.d/firewall free, ouvre toutes les portes
/etc/rc.d/firewall start, active le firewall
/etc/rc.d/firewall restart, relance le firewall
Attention :
- Ce firewall est concu pour laisser passer les connexions vers un serveurs ftp situé sur une autre machine du réseau.
#!/bin/sh # # hacked by asteroid #src : http://olivieraj.free.fr fw_start() { EXTIP="`ifconfig ppp0 | awk /ppp0/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`" echo "ACTIVATION DU FIREWALL" echo "-L'ip courante est $EXTIP" echo "-Chargement des modules necessaire à iptables" modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_irc modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_irc #Activation du forwarding echo "-Activation du forwading dans ip_forward" echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_dynaddr DATA=1024:65535 ###################### # PURGE # ###################### echo "-Mise à zero des règles et tables prédéfinies" # Suppression de toutes les chaînes pré-définies de la table FILTER iptables -t filter -F # Suppression de toutes les chaînes utilisateur de la table FILTER iptables -t filter -X # Suppression de toutes les chaînes pré-définies de la table FILTER iptables -t nat -F # Suppression de toutes les chaînes utilisateur de la table FILTER iptables -t nat -X # Par defaut, toute les paquets sont détruits iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP iptables -t filter -P FORWARD DROP # Police par default sur la table nat iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT echo "-Mise en place des règles de filtrage" ######################################## # Autorise l'interface loopback à dialoguer avec elle-même # ######################################## iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT iptables -t filter -A INPUT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT ########################################## # Autorise les connexions avec le réseau connecté à l'interface eth0 # ########################################## iptables -t filter -A OUTPUT -o eth0 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT ########################################### # Autorise les connexions avec le réseau connecté à l'interface eth1 # ########################################### iptables -t filter -A OUTPUT -o eth1 -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT iptables -t filter -A INPUT -i eth1 -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT ########################################### # WELCOME IN RELITY ASTER !! # ########################################### # autorise tout ce qui sort et n'est pas INVALID (requetes initiales) iptables -t filter -A OUTPUT -o ppp0 -p all -m state --state ! INVALID -j ACCEPT # autorise tout ce qui rentre qui est deja etablie iptables -t filter -A INPUT -i ppp0 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT # autorise le traffic à transiter par eth0 pour conneceté local au net (client) iptables -t filter -A FORWARD -i eth0 -o ppp0 -s 192.168.0.0/24 -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i ppp0 -o eth0 -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT # autorise le traffic à transiter par eth1 pour conneceté local au net (client) iptables -t filter -A FORWARD -i eth1 -o ppp0 -s 192.168.1.0/24 -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i ppp0 -o eth1 -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT # Autorise le masquage d'ip pour que local communique avec le net iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE # autorise le ping sur le reseau iptables -t filter -A INPUT -i ppp0 -p icmp -m state --state ! INVALID -j ACCEPT iptables -t filter -A OUTPUT -o ppp0 -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT # autorise l'acces ssh depuis net sur fw iptables -A INPUT -p tcp --dport ssh -j ACCEPT #translation de port pour le ftp iptables -A OUTPUT -p tcp --dport ftp -o eth0 -j ACCEPT iptables -A OUTPUT -p tcp --dport ftp-data -o eth0 -j ACCEPT iptables -A INPUT -p tcp --sport ftp -i eth0 -j ACCEPT iptables -A INPUT -p tcp --sport ftp-data -i eth0 -j ACCEPT iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport ftp -j DNAT --to 192.168.0.2 iptables -A FORWARD -p tcp --dport ftp -j ACCEPT iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 20 -j DNAT --to 192.168.0.2 iptables -A FORWARD -p tcp --dport 20 -j ACCEPT iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport $DATA -j DNAT --to 192.168.0.2 iptables -A FORWARD -p tcp --dport $DATA -j ACCEPT iptables -A FORWARD -p tcp --dport ftp -i eth0 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p tcp --sport ftp -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p tcp --sport 20 -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p tcp --dport 20 -i eth0 -o ppp0 -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -p tcp --sport $DATA -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p tcp --dport $DATA -i eth0 -o ppp0 -m state --state ESTABLISHED -j ACCEPT #avertissement coloré JAUNE durant l'init echo -e 'E[1;33mLE FIREWALL SEMBLE OPERATIONNEL'; tput sgr0 } fw_free() { echo "Suppression de toutes protection" echo "********************ATTENTION**************" echo "*****ceci va autoriser tout le traffic*****" echo "* Votre machine est vulnerable et l'acces *" echo "*des machines de votre réseaux est bloqué *" echo "*******************************************" # Suppression de toutes les chaînes pré-définies de la table FILTER iptables -t filter -F # Suppression de toutes les chaînes utilisateur de la table FILTER iptables -t filter -X # Par defaut, toute les paquets de la table FILTER sont acceptés iptables -t filter -P INPUT ACCEPT iptables -t filter -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT # Suppression de toutes les chaînes pré-définies de la table NAT iptables -t nat -F # Suppression de toutes les chaînes utilisateur de la table NAT iptables -t nat -X # Par defaut, toute les paquets de la table NAT sont acceptés iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P POSTROUTING ACCEPT # Suppression de toutes les chaînes pré-définies de la table MANGLE iptables -t mangle -F # Suppression de toutes les chaînes utilisateur de la table MANGLE iptables -t mangle -X # Par defaut, toute les paquets de la table MANGLE sont acceptés iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P INPUT ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -t mangle -P FORWARD ACCEPT iptables -t mangle -P POSTROUTING ACCEPT # Supprime du NAT dans le kernel # OK pour tout accepter, mais il ne faut pas rigoler quand même ! echo 0 > /proc/sys/net/ipv4/ip_forward # Desactive les options anti-spoofing du kernel for Filter in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $Filter done # Desactive les options anti-ping du kernel echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses } fw_restart() { fw_start } case "$1" in 'start') fw_start ;; 'free') fw_free ;; 'restart') fw_restart ;; *) echo "usage $0 start|free|restart" esac exit
Hors ligne