par MoiCVincent » 10 Jan 2004 00:39
Heloooooooo !
<BR>
<BR>Bon cette fois j'ai pas vraiment de probleme , je viens d'installer une Mandrake 9.2 qui me partage mon acces Internet
<BR>
<BR>Et pour la config du firewall j'ai tous fais a la main et ca fonctionne assez bien je doit dire maintenant c'est la premiere fois que je fait ca et je sais pas si c'est bien fait
<BR>
<BR>Si les habitués de la sécurité et des firewall pouvait m'indiquer les erreurs comises et le moyen d'ameliorer mon script
<BR>
<BR>
<BR>Tous le commentaires sont les bienvennus ( Meme les grosse CRITIQUES )
<BR>
<BR>Je sais , mes commentaires sont parfois bizzares mais c'est pour que je m'i retrouve <IMG SRC="images/smiles/icon_biggrin.gif">
<BR>
<BR>Merci d'avance !
<BR>
<BR>
<BR>#!/bin/bash
<BR>
<BR># Chemin de l'executable IPTABLES
<BR> IPT=/sbin/iptables
<BR># Adresse de mon reseau Local
<BR> MY_NET=192.168.20/24
<BR># Nom de mon interface pour aller sur le net
<BR> NET_IFACE=ppp0
<BR>
<BR># Liste des ports TCP a accepter en provenance du net
<BR>NET_TCP="13 80"
<BR># Liste des ports TCP a accepter en provenance du LAN
<BR>LAN_TCP="13 22 80 137:139 901"
<BR># Liste des ports UDP a accepter en provenance du net
<BR>NET_UDP="13 80"
<BR># Liste des ports UDP a accepter en provenance du LAN
<BR>LAN_UDP="13 22 80 137:139 901"
<BR># Liste des ports TCP a accepter en provenance du net vers le LAN ( FORWARD )
<BR>NET_LAN_TCP="80"
<BR># Liste des ports UDP a accepter en provenance du net vers le LAN ( FORWARD )
<BR>NET_LAN_UDP="80"
<BR>
<BR>
<BR>
<BR># Activation du forwarding et Adresse IP dynamique
<BR>echo "1" > /proc/sys/net/ipv4/ip_forward
<BR>echo "1" > /proc/sys/net/ipv4/ip_dynaddr
<BR>
<BR># On vide toutes les chaines
<BR>$IPT -F
<BR>
<BR># On efface toutes les chaines
<BR>$IPT -X
<BR>
<BR># Gestion des paquets a loguer et a refuser
<BR># on ajoute une nouvelle chaine LOG_DROP
<BR>$IPT -N LOG_DROP
<BR># on active le logging pour cette chaine avec le prefixe [IPTABLES DROP] :
<BR>$IPT -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
<BR># enfin on rejette le paquet
<BR>$IPT -A LOG_DROP -j DROP
<BR>
<BR># Gestion des paquets a loguer et a refuser non traite a la fin du script
<BR># on ajoute une nouvelle chaine LOG_DROP_END
<BR>$IPT -N LOG_DROP_END
<BR># on active le logging pour cette chaine avec le prefixe [IPTABLES DROP] :
<BR>$IPT -A LOG_DROP_END -j LOG --log-prefix '[IPTABLES DROP_END] : '
<BR># enfin on rejette le paquet
<BR>$IPT -A LOG_DROP_END -j DROP
<BR>
<BR># Gestion des paquets a loguer et a accepter
<BR># on ajoute une nouvelle chaine LOG_ACCEPT
<BR>$IPT -N LOG_ACCEPT
<BR># on active le logging pour cette chaine avec le prefixe [IPTABLES ACCEPT] :
<BR>$IPT -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : '
<BR># enfin on accepte le paquet
<BR>$IPT -A LOG_ACCEPT -j ACCEPT
<BR>
<BR># Gestion des paquets ssh a loguer et a accepter
<BR># on ajoute une nouvelle chaine LOG_ACCEPT_SSH
<BR>$IPT -N LOG_ACCEPT_SSH
<BR># on active le logging pour cette chaine avec le prefixe [IPTABLES ACCEPT SSH] :
<BR>$IPT -A LOG_ACCEPT_SSH -j LOG --log-prefix '[IPTABLES ACCEPT SSH] : '
<BR># enfin on accepte le paquet
<BR>$IPT -A LOG_ACCEPT_SSH -j ACCEPT
<BR>
<BR># Gestion des paquets ICMP a loguer et a accepter
<BR># on ajoute une nouvelle chaine LOG_ACCEPT_PING
<BR>$IPT -N LOG_ACCEPT_PING
<BR># on active le logging pour cette chaine avec le prefixe [IPTABLES ACCEPT PING] :
<BR>$IPT -A LOG_ACCEPT_PING -j LOG --log-prefix '[IPTABLES ACCEPT PING] : '
<BR># enfin on accepte le paquet
<BR>$IPT -A LOG_ACCEPT_PING -j ACCEPT
<BR>
<BR># politique par defaut : on rejette tout
<BR>$IPT -P INPUT DROP
<BR>$IPT -P OUTPUT DROP
<BR>$IPT -P FORWARD DROP
<BR>
<BR># On accepte tout sur l'interface locale ( lo )
<BR>$IPT -A INPUT -i lo -j ACCEPT
<BR>$IPT -A OUTPUT -o lo -j ACCEPT
<BR>
<BR># on va s'occuper du net
<BR># on ne veux pas de filtrage sur le conexions sortantes
<BR># Serveur -> NET
<BR># On accepte toute les connexions tcp sortantes
<BR>$IPT -A OUTPUT -o $NET_IFACE -p tcp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>$IPT -A INPUT -i $NET_IFACE -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
<BR># On accepte toute les connexions udp sortantes
<BR>$IPT -A OUTPUT -o $NET_IFACE -p udp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>$IPT -A INPUT -i $NET_IFACE -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
<BR>
<BR># On accepte et on logue les connexions SSH venant de l'exterieur
<BR>$IPT -A INPUT -i $NET_IFACE -m state --state NEW,RELATED,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT_SSH
<BR>$IPT -A OUTPUT -o $NET_IFACE -m state --state RELATED,ESTABLISHED -p tcp --sport 22 -j LOG_ACCEPT_SSH
<BR>
<BR># on authorise ICMP sur le NET avec limitation
<BR># ( max 40 ping /min ) seul le ping est authorise "icmp-type 8 et 0"
<BR>$IPT -A OUTPUT -o $NET_IFACE -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>$IPT -A INPUT -i $NET_IFACE -p icmp --icmp-type 8 -m state --state NEW -m limit --limit 40/min -j LOG_ACCEPT_PING
<BR>$IPT -A INPUT -i $NET_IFACE -p icmp --icmp-type 0 -m state --state NEW -m limit --limit 40/min -j LOG_ACCEPT_PING
<BR>$IPT -A INPUT -i $NET_IFACE -p icmp -m state --state RELATED,ESTABLISHED -j LOG_ACCEPT_PING
<BR>
<BR>for port in $NET_TCP ; do
<BR> $IPT -A INPUT -i $NET_IFACE -p tcp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR>for port in $NET_UDP ; do
<BR> $IPT -A INPUT -i $NET_IFACE -p udp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR>
<BR>
<BR># maintenant on passe au LAN
<BR># On accepte toute les connexions sortantes
<BR>$IPT -A OUTPUT -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>$IPT -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
<BR>
<BR># On accepte et on logue les connexions SSH venant du LAN
<BR>#$IPT -A INPUT -i eth0 -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j LOG_ACCEPT_SSH
<BR>#$IPT -A OUTPUT -o eth0 -m state --state ESTABLISHED -p tcp --sport 22 -j LOG_ACCEPT_SSH
<BR>
<BR># on authorise ICMP sur le LAN
<BR>$IPT -A OUTPUT -o eth0 -p icmp -j ACCEPT
<BR>$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
<BR>
<BR># filtrage des connexions au serveur
<BR>for port in $LAN_TCP ; do
<BR> $IPT -A INPUT -i eth0 -p tcp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR>for port in $LAN_UDP ; do
<BR> $IPT -A INPUT -i eth0 -p udp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR>
<BR># maintenant les connexions qui traversent
<BR># Le LAN a un acces complet au net
<BR>$IPT -A FORWARD -i eth0 -o $NET_IFACE -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>$IPT -A FORWARD -o eth0 -i $NET_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
<BR>
<BR># Le ping NET vers LAN est limite
<BR>$IPT -A FORWARD -i eth0 -o $NET_IFACE -p icmp -m state --state NEW,RELATED,ESTABLISHED -j LOG_ACCEPT_PING
<BR>$IPT -A FORWARD -i $NET_IFACE -o eth0 -p icmp -m state --state RELATED,ESTABLISHED -j LOG_ACCEPT_PING
<BR>$IPT -A FORWARD -i $NET_IFACE -o eth0 -p icmp -m state --state NEW -m limit --limit 40/min -j LOG_ACCEPT_PING
<BR>
<BR>
<BR># on accepte quelques ports dans le sens NET -> LAN
<BR>for port in $NET_LAN_TCP ; do
<BR> $IPT -A FORWARD -i $NET_IFACE -o eth0 -p tcp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR>for port in $NET_LAN_UDP ; do
<BR> $IPT -A FORWARD -i $NET_IFACE -o eth0 -p udp --dport $port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
<BR>done
<BR>
<BR># Le lan dialogue sur le net avec l'IP publique du serveur
<BR>$IPT -t nat -A POSTROUTING -s $MY_NET -j MASQUERADE
<BR>
<BR>
<BR># On va faire un peu de gestion du debit
<BR># Priorisation des connexions ftp et ssh
<BR>$IPT -A PREROUTING -t mangle -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
<BR>$IPT -A PREROUTING -t mangle -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
<BR># On donne un maximum de débit aux transferts ftp, peu importe la latence
<BR>$IPT -A PREROUTING -t mangle -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput
<BR>
<BR>
<BR># tout ce qui n'a pas ete traite est rejete et logue
<BR>$IPT -A FORWARD -j LOG_DROP_END
<BR>$IPT -A INPUT -j LOG_DROP_END
<BR>$IPT -A OUTPUT -j LOG_DROP_END
<BR>
Noubliez pas , On est sur terre pour vivre !