Après avoir sécurisé l’accès SSH de notre serveur il convient maintenant de « l’habiller ». En effet celui ci est actuellement « à poil » sur internet, nous allons donc lui faire revêtir une « armure » en veillant à ce que notre serveur puisse tout de même « respirer » ! Bon ok, l’analogie n’est peut-être pas très bien trouvé mais l’essentiel est là… Nous allons installer un pare-feu sur notre machine Linux à l’aide de l’incontournable Iptables.
Au lieu de repartir de zéro j’ai modifié le script iptables de « Nicolargo » (http://blog.nicolargo.com/ ) et je l’ai adapté à mes besoins. Personnellement je n’utilise aucun contrôle sur le trafic sortant de mon serveur, uniquement sur l’entrant.
Commencez par créer votre script :
nano /etc/init.d/firewall.sh
Copiez coller le script ci-dessous (je vous expliquerais 2-3 choses plus bas :
#!/bin/sh # # Simple Firewall configuration. # # Author: Nicolargo # Edit : fmplaw # # chkconfig: 2345 9 91 # description: Activates/Deactivates the firewall at boot time # ### BEGIN INIT INFO # Provides: firewall.sh # Required-Start: $syslog $network # Required-Stop: $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start firewall daemon at boot time # Description: Custom Firewall script. ### END INIT INFO PATH=/bin:/sbin:/usr/bin:/usr/sbin # Services that the system will offer to the network # SSH = 22 TCP_SERVICES="22" UDP_SERVICES="" if ! [ -x /sbin/iptables ]; then exit 0 fi ########################## # Start the Firewall rules ########################## fw_start () { # Input traffic: /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Services if [ -n "$TCP_SERVICES" ] ; then for PORT in $TCP_SERVICES; do /sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT done fi if [ -n "$UDP_SERVICES" ] ; then for PORT in $UDP_SERVICES; do /sbin/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT done fi # Remote testing /sbin/iptables -A INPUT -p icmp -j ACCEPT /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -P INPUT DROP /sbin/iptables -A INPUT -j LOG # Other network protections # (some will only work with some kernel versions) echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 0 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/conf/all/log_martians echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route } ########################## # Stop the Firewall rules ########################## fw_stop () { /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT ACCEPT } ########################## # Clear the Firewall rules ########################## fw_clear () { /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -P OUTPUT ACCEPT } ########################## # Test the Firewall rules ########################## fw_save () { /sbin/iptables-save > /etc/iptables.backup } fw_restore () { if [ -e /etc/iptables.backup ]; then /sbin/iptables-restore < /etc/iptables.backup fi } fw_test () { fw_save sleep 30 && echo "Restore previous Firewall rules..." && fw_restore & fw_stop fw_start } case "$1" in start|restart) echo -n "Starting firewall.." fw_stop fw_start echo "done." ;; stop) echo -n "Stopping firewall.." fw_stop echo "done." ;; clear) echo -n "Clearing firewall rules.." fw_clear echo "done." ;; test) echo -n "Test Firewall rules..." fw_test echo -n "Previous configuration will be restore in 30 seconds" ;; *) echo "Usage: $0 {start|stop|restart|clear|test}" echo "Be aware that stop drop all incoming/outgoing traffic !!!" exit 1 ;; esac exit 0
Ensuite rendez le exécutable :
chmod +x /etc/init.d/firewall.sh
Puis on le lance au démarrage :
update-rc.d firewall.sh defaults
Cela dit il peut-être utile de comprendre comme il fonctionne… Tout d’abord il reconnait les paramètres suivants :
start : permet de lancer le script.
stop : ATTENTION réinitialise les règles iptables et empêche le trafic forward et input.
restart : redémarre le script.
clear : réinitialise les règles iptables et autorise tous les trafics.
test : permet de tester la configuration iptables 30 sec.
save : permet de sauvegarder la conf iptables.
restore : permet la restauration de la conf iptables.
L’intérêt de ce script est qu’il est très facilement éditable. En effet si vous voulez ajouter le service ftp à votre serveur il est impératif d’ouvrir les ports 20 et 21 en TCP. Rien de plus simple, éditez votre script :
nano /etc/init.d/firewall.sh
Puis rajoutez ces ports à la ligne 26 (voir script ci-dessus) de la variable TCP_SERVICES:
# Services that the system will offer to the network # SSH = 22 TCP_SERVICES="22 20 21" UDP_SERVICES=""
Sauvegardez ces changements et relancez le services :
/etc/init.d/firewall.sh restart
Et voilà ! Simple, non ?
Merci Fluffy
EXCELLENT TUTO