Anthonix.fr – High Tech/Informatique : Tutoriels & actualité, insolite, geek ! Un blog complété par un passionné pour vous

1Jan/130

[Mémo] Filtrage de base iptables

Dans ce petit mémo, nous allons voir comment offrir une protection de base à vos serveurs dédiés grâce à iptables.

Pour ce faire, voici un script permettant d'offrir une protection avec quelques bonus :

#!/bin/bash
### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case $1 in
start)
# On vide toutes les règles existantes :
iptables -F
# On accepte tout en entrée et en sortie sur localhost (en local)
#INPUT
iptables -A INPUT -i lo -j ACCEPT
#OUPUT
iptables -A OUTPUT -o lo -j ACCEPT

# Dans le cas d'un serveur WEB et pour administrer votre serveur en ssh : On autorise de taper le serveur depuis le WAN
#INPUT
iptables -A INPUT -i venet0 -p tcp -m multiport --dports http,ssh -m state --state NEW,ESTABLISHED -j ACCEPT
#OUPUT
iptables -A OUTPUT -o venet0 -p tcp -m multiport --sports http,ssh -m state --state ESTABLISHED -j ACCEPT

# Dans mon cas, je sors de mon dédié sur IRC,SNMP,DNS,HTTP donc j'autorise tout ce traffic vers le WAN
# Pour rappel :
# 53 : DNS permettant de résoudre les noms de domaine
# 161 : SNMP
#INPUT
iptables -A INPUT -i venet0 -p tcp -m multiport --sports http,ircd -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i venet0 -p udp -m multiport --sports 53,161 -m state --state ESTABLISHED -j ACCEPT
#OUPUT
iptables -A OUTPUT -o venet0 -p tcp -m multiport --dports http,ircd -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p udp -m multiport --dports 53,161 -m state --state NEW,ESTABLISHED -j ACCEPT

# Permettre de ping une IP (utilisé dans mon cas pour du monitoring via CACTI) sur le WAN et permettre à cette dernière de ping le serveur
#INPUT
iptables -A INPUT -p icmp -s 1.1.1.1 -m state --state NEW,ESTABLISHED -j ACCEPT
#OUPUT
iptables -A OUTPUT -p icmp -d 1.1.1.1 -m state --state NEW,ESTABLISHED -j ACCEPT

# Par défaut : AUCUNE ENTREE, AUCUNE SORTIE, AUCUN FORWARD d'une if à une autre
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Liste les règles par défaut
iptables -L -v -n

#Log le trafic entrée et sortie rejeté (logs dispo dans /var/log/messages)
/sbin/iptables -A INPUT -j LOG
/sbin/iptables -A OUTPUT -j LOG
# Dans mon cas, j'utilise fail2ban pour bloquer les zombies, le redémarrer va permettre de replacer sa règle iptables précédemment supprimé
/etc/init.d/fail2ban restart
;;
esac

Le mieux est par la suite de le placer dans /etc/init.d/ et de faire un petit update-rc.d "nom du script" defaults pour permettre la maj automatique des règles iptables au démarrage de votre serveur.

Voilà tout !

Un script simple et vraiment pratique pour une conf par défaut ! Il est bien-sûr possible de pousser plus loin le filtrage via IP par exemple pour le trafic en sortie snmp(pas possible dans mon cas car dyndns pour quelques serveurs) ou http(si ce dernier n'est utilisé que pour les MAJ de la distribution).

Par la même occasion, je profite de ce post pour vous souhaiter à tous et à toutes bonne années 2013 !

D'autres questions ? N'hésitez pas à poster un commentaire !