Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
firewall [2012/11/22 11:55] nicolas created |
firewall [2012/11/24 14:07] nicolas [Filtrage des logs] Correction |
||
---|---|---|---|
Ligne 34: | Ligne 34: | ||
### END INIT INFO | ### END INIT INFO | ||
+ | |||
+ | ##### START USER CONFIG | ||
+ | # Do you want to log dropped packets in /var/log/messages ? | ||
+ | LOG_DROPPED=1 | ||
+ | # | ||
# List of ports to open | # List of ports to open | ||
TCP_INPUT_PORTS="22 53 25 465 143 993" | TCP_INPUT_PORTS="22 53 25 465 143 993" | ||
Ligne 39: | Ligne 44: | ||
UDP_INPUT_PORTS="53" | UDP_INPUT_PORTS="53" | ||
UDP_OUTPUT_PORTS="53 123" | UDP_OUTPUT_PORTS="53 123" | ||
+ | # | ||
+ | # List of IP to allow | ||
+ | IPV4_ALLOWED="x.x.x.251" | ||
+ | # | ||
+ | ##### END USER CONFIG | ||
# Delete tables | # Delete tables | ||
Ligne 78: | Ligne 88: | ||
ip6tables -A INPUT -p icmpv6 --icmpv6-type $type -j ACCEPT | ip6tables -A INPUT -p icmpv6 --icmpv6-type $type -j ACCEPT | ||
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type $type -j ACCEPT | ip6tables -A OUTPUT -p icmpv6 --icmpv6-type $type -j ACCEPT | ||
+ | done | ||
+ | |||
+ | # Allow selected IP | ||
+ | for ip in $IPV4_ALLOWED | ||
+ | do | ||
+ | iptables -t filter -A INPUT --source $ip -j ACCEPT | ||
+ | iptables -t filter -A OUTPUT --destination $ip -j ACCEPT | ||
done | done | ||
Ligne 104: | Ligne 121: | ||
ip6tables -t filter -A OUTPUT -p udp --dport $port -j ACCEPT | ip6tables -t filter -A OUTPUT -p udp --dport $port -j ACCEPT | ||
done | done | ||
+ | |||
+ | # Logging | ||
+ | if test $LOG_DROPPED -eq 1 | ||
+ | then | ||
+ | # IPv4 | ||
+ | iptables -N LOGGING | ||
+ | iptables -A INPUT -j LOGGING | ||
+ | iptables -A OUTPUT -j LOGGING | ||
+ | iptables -A LOGGING -p udp --sport 67 --dport 68 -j DROP # Do not log DHCP requests from bad admins | ||
+ | iptables -A LOGGING -m limit --limit 4/hour --limit-burst 2 -j LOG --log-prefix "iptables dropped: " --log-level 4 | ||
+ | iptables -A LOGGING -j DROP | ||
+ | |||
+ | # IPv6 | ||
+ | ip6tables -N LOGGING | ||
+ | ip6tables -A INPUT -j LOGGING | ||
+ | ip6tables -A OUTPUT -j LOGGING | ||
+ | ip6tables -A LOGGING -p icmpv6 -j DROP # Do not log dropped icmpv6 paquets | ||
+ | ip6tables -A LOGGING -m limit --limit 4/hour --limit-burst 2 -j LOG --log-prefix "ip6tables dropped: " --log-level 4 | ||
+ | ip6tables -A LOGGING -j DROP | ||
+ | fi | ||
</code> | </code> | ||
- | Après avoir créé ce fichier il faut adapter à vos besoin la liste des ports (n'oubliez pas d'autoriser l'accès SSH en entrée sinon votre serveur ne sera plus accessible). Ensuite il faut lui attribuer les bonnes permissions : | + | Après avoir créé ce fichier il faut l'adapter à vos besoin en configurant : |
+ | * Si vous voulez logger les paquets droppés dans ''/var/log/messages'' (0=Non et 1=Oui) | ||
+ | * La liste des ports autorisés (n'oubliez pas d'autoriser l'accès SSH en entrée sinon votre serveur ne sera plus accessible) | ||
+ | * Les adresses IP qui seront automatiquement autorisés (dans cet exemple il s'agit d'autoriser le serveur de monitoring MRTG d'OVH) | ||
+ | |||
+ | Ensuite il faut lui attribuer les bonnes permissions : | ||
''chown root:root /etc/init.d/firewall && chmod 755 /etc/init.d/firewall'' | ''chown root:root /etc/init.d/firewall && chmod 755 /etc/init.d/firewall'' | ||
Ligne 117: | Ligne 159: | ||
==== Exécution au démarrage du système ==== | ==== Exécution au démarrage du système ==== | ||
- | |||
En l'état actuel le firewall filtre bien vos connexions aussi bien en IPv4 qu'en IPv6. Cependant si vous redémarrez le serveur les règles iptables seront remises à zéro. Pour éviter cela il faut enregistrer le script en tant que script de démarrage avec la commande : | En l'état actuel le firewall filtre bien vos connexions aussi bien en IPv4 qu'en IPv6. Cependant si vous redémarrez le serveur les règles iptables seront remises à zéro. Pour éviter cela il faut enregistrer le script en tant que script de démarrage avec la commande : | ||
''insserv firewall'' | ''insserv firewall'' | ||
Ligne 125: | Ligne 166: | ||
''insserv -r firewall'' | ''insserv -r firewall'' | ||
+ | ==== Filtrage des logs ==== | ||
+ | Même si iptables est configuré pour ne mettre que quatre enregistrements par heure dans le fichier de log pour une même requête, le journal peut grossir considérablement à cause de requêtes inoffensives qu'il n'est pas utile de garder. C'est le cas des broadcasts DHCP que certains serveurs font à tort. Pour éviter d'enregistrer ces requêtes une règle supplémentaire est disponible dans la partie logging du script. | ||
+ | Vous pouvez consulter les logs à l'aide de : | ||
+ | ''grep "iptables dropped:" /var/log/messages | tail -n 20'' ou ''grep "ip6tables dropped:" /var/log/messages | tail -n 20'' |