#!/bin/sh # Activation du forwarding # C'est pas pour faire joli, on aura des règles # de forward et il faut bien que les paquets # traversent la machine, donc on met ce fichier à 1 echo 1 > /proc/sys/net/ipv4/ip_forward # Alors la, on va appliquer quelques astuces # pour empêcher les attaques de type spoofing # et bloquer les réponses ICMP du firewall, # comme ça c'est très propre. Attention, le # fait de bloquer le trafic ICMP sur # le firewall bloque les pings. # Je veux 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 icmp echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # On va utiliser iptables. Si on l'a compilé en module # dans le kernel, il faut charger le module ip_tables. modprobe ip_tables # on va charger quelques modules supplémentaires pour # gérer la translation d'adresse, l'IRC et le FTP # Tu me fait 4 pompes. Chef oui chef ! modprobe ip_nat_ftp modprobe ip_nat_irc modprobe iptable_filter modprobe iptable_nat # Pour faire bien, on va vider toutes les règles # avant d'appliquer les nouvelles règles de firewall iptables -F iptables -X # On va rajouter 2 nouvelles chaînes. # Ceci permettra d'ajouter des nouvelles cibles qui # auront la possibilité de loguer ce qui se passe. # La on logue et on refuse le paquet, # on rajoute un préfixe pour pouvoir # s'y retrouver dans les logs iptables -N LOG_DROP iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : ' iptables -A LOG_DROP -j DROP # ici, on logue et on accepte le paquet, # on rajoute un préfixe pour pouvoir # s'y retrouver dans les logs iptables -N LOG_ACCEPT iptables -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : ' iptables -A LOG_ACCEPT -j ACCEPT # On veut faire un firewall efficace, # donc la politique a appliquer est de tout # refuser par défaut et rajouter une a une # les règles que l'on autorise. # Bien sur, on a RTFM un peu et on a vu que # l'option -P permet de définir # la cible par défaut iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Pour éviter les problèmes, on va tout accepter sur # la machine en local (interface lo). # Je déconseille de retirer cette règle car # ça pose pas mal de problèmes et ça peut # faire perdre la main sur la machine iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Bon, la partie initialisation et préparation est # terminée, passons aux choses sérieuses #Pour accepter tout ce qui se passe sur le réseau local 192.168.0.0 : iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT # Pour accepter les résolutions de nom (ie: le dns) : iptables -A INPUT -i eth1 --protocol udp --source-port 53 -j ACCEPT iptables -A OUTPUT -o eth1 --protocol udp --destination-port 53 -j ACCEPT iptables -A INPUT -i eth1 --protocol tcp --source-port 53 -j ACCEPT iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 53 -j ACCEPT # Pour accepter le traffic web : iptables -A INPUT -i eth1 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT # Pour accepter le traffic https : iptables -A INPUT -i eth1 --protocol tcp --source-port 443 -m state --state ESTABLISHED -j LOG_ACCEPT iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT # Toutes les règles qui n'ont pas passé les # règles du firewall seront refusées et loguées... # facile : iptables -A FORWARD -j LOG_DROP iptables -A INPUT -j LOG_DROP iptables -A OUTPUT -j LOG_DROP # Pour faire zoli echo " [Termine]" # # c'est enfin fini
#!/bin/bash #Un simple script permettant de spécifier des règles de filtrage #Il doit bien sûr être adapté aux besoins spécifiques. #En le lançant avec le paramètre stop, les règles sont supprimées. #Sans paramètre les règles sont crées. IF=ppp0 HIGH_PORTS="1024:65535" FTP_CONTROL_PORT=21 FTP_DATA_PORT=20 SSH_PORTS=80 POP_IN_PORT=8080 POP_OUT_PORT=110 POP_OUT_IP=62.39.122.15 SMTP_IN_PORT=8181 SMTP_OUT_PORT=25 SMTP_OUT_IP=62.39.122.19 HTTP_PORTS=119 export PATH="/bin:/sbin:/usr/sbin" #Modules necessaires modprobe ip_tables modprobe ip_conntrack modprobe ip_conntrack_ftp #Vide les regles iptables -t filter -F iptables -t filter -X iptables -t nat -F iptables -t nat -X if [ "$1" = "stop" ] then echo "Firewall arrêté" exit fi echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses for interface in /proc/sys/net/ipv4/conf/*/rp_filter do echo "1" > ${interface} done echo "1" > /proc/sys/net/ipv4/conf/all/log_martians #NAT echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o $IF -j MASQUERADE #Autorise les connexions de l'interieur iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #Chaine pour le blacklistage d'IP iptables -N blacklist #Cible pour le blacklistage iptables -N bllogdeny iptables -t filter -A bllogdeny -j LOG --log-prefix "blacklisted: " iptables -t filter -A bllogdeny -j DROP #Faire passer tout ce qui entre par cette chaine iptables -t filter -A INPUT -j blacklist #Autorise la connexion FTP iptables -A INPUT -i $IF -p tcp --dport $FTP_CONTROL_PORT -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o $IF -p tcp --sport $FTP_CONTROL_PORT -m state --state ESTABLISHED -j ACCEPT #FTP actif iptables -A INPUT -i $IF -p tcp --dport $FTP_DATA_PORT -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o $IF -p tcp --sport $FTP_DATA_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT #FTP passif iptables -A INPUT -i $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -o $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED -j ACCEPT #Autorise SSH iptables -t filter -A INPUT -p tcp --destination-port $SSH_PORTS -j ACCEPT #Autorise HTTPD iptables -t filter -A INPUT -p tcp --destination-port $HTTP_PORTS -j ACCEPT #Interdire et loger tout le reste iptables -N logdeny iptables -t filter -A logdeny -j LOG --log-prefix "iptables: " iptables -t filter -A logdeny -j DROP #Autoriser tout ce qui vient de l'interface de boucle locale iptables -t filter -A INPUT -i lo -j ACCEPT #Autoriser tout ce qui vient de l'interface vmware iptables -t filter -A INPUT -i vmnet1 -j ACCEPT #Interdire le reste iptables -t filter -A INPUT -m state --state NEW,INVALID -j logdeny echo "Firewall demarré"