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 [2019/04/02 11:14] (Version actuelle) |
||
|---|---|---|---|
| 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'' | ||