159
modifications
Aucun résumé des modifications |
|||
Ligne 237 : | Ligne 237 : | ||
En remplaçant ethx qui correspond à l'interface du LAN et ethy qui correspond à l'interface reliée à la truc-box | En remplaçant ethx qui correspond à l'interface du LAN et ethy qui correspond à l'interface reliée à la truc-box | ||
== Le script (avec support ipv6)== | |||
Attention, la version de ce script est encore en travaux, tant qu'elle n'est pas validée par personne compétente. | |||
#!/bin/sh | |||
### BEGIN INIT INFO | |||
# Provides: mon_parefeu | |||
# Required-Start: $local_fs | |||
# Should-Start: | |||
# Required-Stop: $local_fs | |||
# Should-Stop: | |||
# X-Start-Before: $network | |||
# X-Stop-After: $network | |||
# Default-Start: S | |||
# Default-Stop: 0 6 | |||
# Short-description: Configure le parefeu | |||
# Description: Met en place les règles iptables. | |||
### END INIT INFO | |||
#------------------------Explications----------------------------------# | |||
# | |||
# Défauts : | |||
# - Cette configuration s'applique à toutes les interfaces réseau. | |||
# Si vous voulez restreindre cela à une interface donnée, | |||
# utilisez '-i INTERFACE' dans la variables $IPTABLES. | |||
# | |||
# - Par défaut, le script autorise tout en sortie. | |||
# Pour changer ce comportement veuillez indiquer les numéros | |||
# de port en question dans les variables | |||
# $REMOTE_TCP_SERVICES | |||
# et/ou $REMOTE_UDP_SERVICES | |||
# | |||
# - Pour configurer une machine routeur, | |||
# changez la valeur de la variable | |||
# ISROUTERNAT à true, ainsi que | |||
# les interfaces ethx et ethy selon votre configuration | |||
# ethx correspond à l'interface du LAN | |||
# ethy correspond à l'interface reliée à la truc-box | |||
# | |||
# description: Active/Désactive le pare-feu au démarrage | |||
# | |||
#----------------------------------------------------------------------# | |||
. /lib/lsb/init-functions | |||
#------------------------VARIABLES-------------------------------------# | |||
# Mettre à 1 si vous utilisez IPV6 : | |||
IPV6=0 | |||
# Services que le système offrira au réseau, à séparer avec des espaces | |||
# ftp : 21, ssh : 22, serveur web : 80, cups : 631, jabber : 5222 | |||
TCP_SERVICES="" | |||
UDP_SERVICES="" | |||
# Services que le système utilisera du réseau | |||
# (défaut : autorise tout en sortie) | |||
REMOTE_TCP_SERVICES="" | |||
REMOTE_UDP_SERVICES="" | |||
# Pour une machine faisant office de routeur avec NAT, | |||
# changer la valeur de la variable ISROUTERNAT à 1. | |||
ISROUTERNAT=false | |||
# ethx correspond à l'interface du LAN | |||
# ethy correspond à l'interface reliée à la truc-box | |||
ethx="eth1" | |||
ethy="eth0" | |||
# Chemins vers iptables | |||
readonly IPTABLES=/sbin/iptables | |||
readonly IP6TABLES=/sbin/ip6tables | |||
#----------------------------------------------------------------------# | |||
if ! [ -x $IPTABLES ]; then | |||
exit 0 | |||
fi | |||
if [ $IPV6 -eq 1 ]; then | |||
if ! [ -x $IP6TABLES ]; then | |||
exit 0 | |||
fi | |||
fi | |||
#----------------------------FONCTIONS---------------------------------# | |||
fw_start () { | |||
# Vidage | |||
fw_clear | |||
# Parefeu - Suppression des règles | |||
# Interdictions | |||
$IPTABLES -t filter -P INPUT DROP | |||
$IPTABLES -t filter -P FORWARD DROP | |||
$IPTABLES -t filter -P OUTPUT DROP | |||
# Parefeu - interdictions générales établies | |||
# Loopback | |||
$IPTABLES -t filter -A INPUT -i lo -j ACCEPT | |||
# Trafic d'entrée : | |||
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# Refus du ping pour éviter de répondre aux scans des éventuels vilains | |||
$IPTABLES -t filter -A INPUT -p icmp -j LOG | |||
$IPTABLES -t filter -A INPUT -p icmp -j DROP | |||
# Sortie autorisée, si aucun port autorisé en sortie n'est défini | |||
if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | |||
$IPTABLES -t filter -P OUTPUT ACCEPT | |||
fi | |||
# Services à autoriser en entrée | |||
for PORT in $TCP_SERVICES; do | |||
$IPTABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | |||
done | |||
for PORT in $UDP_SERVICES; do | |||
$IPTABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | |||
done | |||
# Services à autoriser en sortie | |||
for PORT in $REMOTE_TCP_SERVICES; do | |||
$IPTABLES -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT | |||
done | |||
for PORT in $REMOTE_UDP_SERVICES; do | |||
$IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT | |||
done | |||
# Parefeu - Mise en place des règles | |||
if $ISROUTERNAT ; then | |||
$IPTABLES -A INPUT -i $ethx -j ACCEPT | |||
$IPTABLES -A INPUT -p icmp -j ACCEPT | |||
$IPTABLES -A FORWARD -i $ethy -o $ethx -m state --state RELATED,ESTABLISHED -j ACCEPT | |||
$IPTABLES -A FORWARD -o $ethy -j ACCEPT | |||
$IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE | |||
# Parefeu - Routeur avec NAT | |||
fi | |||
# Toutes les autres connexions sont enregistrées dans syslog | |||
$IPTABLES -t filter -A INPUT -j LOG --log-level=4 | |||
# Configuration IPV6 | |||
if [ $IPV6 -eq 1 ]; then | |||
# Interdictions | |||
$IP6TABLES -t filter -P INPUT DROP | |||
$IP6TABLES -t filter -P FORWARD DROP | |||
$IP6TABLES -t filter -P OUTPUT DROP | |||
# Loopback | |||
$IP6TABLES -t filter -A INPUT -i lo -j ACCEPT | |||
# Trafic d'entrée : | |||
$IP6TABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# Refus du ping pour éviter de répondre aux scans des éventuels vilains | |||
$IP6TABLES -t filter -A INPUT -p icmp -j LOG | |||
$IP6TABLES -t filter -A INPUT -p icmp -j DROP | |||
# Sortie autorisée, si aucun port autorisé en sortie n'est défini | |||
if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | |||
$IP6TABLES -t filter -P OUTPUT ACCEPT | |||
fi | |||
# Services à autoriser en entrée | |||
for PORT in $TCP_SERVICES; do | |||
$IP6TABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | |||
done | |||
for PORT in $UDP_SERVICES; do | |||
$IP6TABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | |||
done | |||
# Services à autoriser en sortie | |||
for PORT in $REMOTE_TCP_SERVICES; do | |||
$IP6TABLES -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT | |||
done | |||
for PORT in $REMOTE_UDP_SERVICES; do | |||
$IP6TABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT | |||
done | |||
# Parefeu - Mise en place des règles | |||
if $ISROUTERNAT ; then | |||
$IP6TABLES -A INPUT -i $ethx -j ACCEPT | |||
$IP6TABLES -A INPUT -p icmp -j ACCEPT | |||
$IP6TABLES -A FORWARD -i $ethy -o $ethx -m state --state RELATED,ESTABLISHED -j ACCEPT | |||
$IP6TABLES -A FORWARD -o $ethy -j ACCEPT | |||
$IP6TABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE | |||
$IP6TABLES -A INPUT -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT | |||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT | |||
fi | |||
# Pour toute interface de type broadcast | |||
$IP6TABLES -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT | |||
$IP6TABLES -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT | |||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT | |||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT | |||
# Toutes les autres connexions sont enregistrées dans syslog | |||
$IP6TABLES -t filter -A INPUT -j LOG --log-level=4 | |||
fi | |||
} | |||
fw_stop () { | |||
#$IPTABLES -F | |||
#$IPTABLES -t nat -F | |||
#$IPTABLES -t mangle -F | |||
#$IPTABLES -P INPUT DROP | |||
#$IPTABLES -P FORWARD DROP | |||
#$IPTABLES -P OUTPUT ACCEPT | |||
iptables-save > /etc/firewall | |||
} | |||
fw_clear () { | |||
$IPTABLES -t filter -F | |||
$IPTABLES -t nat -F | |||
$IPTABLES -t mangle -F | |||
$IPTABLES -t raw -F | |||
$IPTABLES -t filter -P INPUT ACCEPT | |||
$IPTABLES -t filter -P OUTPUT ACCEPT | |||
$IPTABLES -t filter -P FORWARD ACCEPT | |||
$IPTABLES -t nat -P PREROUTING ACCEPT | |||
$IPTABLES -t nat -P POSTROUTING ACCEPT | |||
$IPTABLES -t nat -P OUTPUT ACCEPT | |||
$IPTABLES -t mangle -P PREROUTING ACCEPT | |||
$IPTABLES -t mangle -P OUTPUT ACCEPT | |||
$IPTABLES -t mangle -P POSTROUTING ACCEPT | |||
$IPTABLES -t mangle -P FORWARD ACCEPT | |||
$IPTABLES -t mangle -P INPUT ACCEPT | |||
$IPTABLES -t raw -P OUTPUT ACCEPT | |||
$IPTABLES -t raw -P PREROUTING ACCEPT | |||
$IPTABLES -F | |||
if [ $IPV6 -eq 1 ]; then | |||
$IP6TABLES -t filter -F | |||
$IP6TABLES -t nat -F | |||
$IP6TABLES -t mangle -F | |||
$IP6TABLES -t raw -F | |||
$IP6TABLES -t filter -P INPUT ACCEPT | |||
$IP6TABLES -t filter -P OUTPUT ACCEPT | |||
$IP6TABLES -t filter -P FORWARD ACCEPT | |||
$IP6TABLES -t nat -P PREROUTING ACCEPT | |||
$IP6TABLES -t nat -P POSTROUTING ACCEPT | |||
$IP6TABLES -t nat -P OUTPUT ACCEPT | |||
$IP6TABLES -t mangle -P PREROUTING ACCEPT | |||
$IP6TABLES -t mangle -P OUTPUT ACCEPT | |||
$IP6TABLES -t mangle -P POSTROUTING ACCEPT | |||
$IP6TABLES -t mangle -P FORWARD ACCEPT | |||
$IP6TABLES -t mangle -P INPUT ACCEPT | |||
$IP6TABLES -t raw -P OUTPUT ACCEPT | |||
$IP6TABLES -t raw -P PREROUTING ACCEPT | |||
$IP6TABLES -F | |||
fi | |||
} | |||
fw_status () { | |||
$IPTABLES -L --line-numbers | |||
if [ $IPV6 -eq 1 ]; then | |||
$IP6TABLES -L --line-numbers | |||
fi | |||
} | |||
#----------------------------------------------------------------------# | |||
case "$1" in | |||
start|restart) | |||
log_daemon_msg "Starting firewall.." | |||
fw_start | |||
log_end_msg $? | |||
;; | |||
stop) | |||
log_daemon_msg "Stopping firewall.." | |||
fw_stop | |||
log_end_msg $? | |||
;; | |||
clean) | |||
log_daemon_msg "Clearing firewall rules.." | |||
fw_clear | |||
log_end_msg $? | |||
;; | |||
status) | |||
log_daemon_msg "Firewall status" | |||
fw_status | |||
;; | |||
*) | |||
log_action_msg "Usage $0 {start|stop|restart|clean|status}" | |||
exit 1 | |||
;; | |||
esac | |||
exit 0 | |||
== Ressources == | == Ressources == |
modifications