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