« Parefeu Simplifié » : différence entre les versions
Ligne 58 : | Ligne 58 : | ||
#------------------------VARIABLES-------------------------------------# | #------------------------VARIABLES-------------------------------------# | ||
readonly IPTABLES=/sbin/iptables | readonly IPTABLES=/sbin/iptables | ||
. /lib/lsb/init-functions | |||
# Services que le système offrira au réseau, à séparer avec des espaces | # Services que le système offrira au réseau, à séparer avec des espaces | ||
Ligne 86 : | Ligne 88 : | ||
# Vidage | # Vidage | ||
fw_clear | fw_clear | ||
# Parefeu - Suppression des règles | |||
# Interdictions | # Interdictions | ||
Ligne 93 : | Ligne 95 : | ||
$IPTABLES -t filter -P OUTPUT DROP | $IPTABLES -t filter -P OUTPUT DROP | ||
# Parefeu - interdictions générales établies | |||
# Loopback | # Loopback | ||
Ligne 127 : | Ligne 129 : | ||
$IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT | $IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT | ||
done | done | ||
# Parefeu - Mise en place des règles | |||
if $ISROUTERNAT ; then | if $ISROUTERNAT ; then | ||
Ligne 135 : | Ligne 137 : | ||
$IPTABLES -A FORWARD -o $ethy -j ACCEPT | $IPTABLES -A FORWARD -o $ethy -j ACCEPT | ||
$IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE | $IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE | ||
# Parefeu - Routeur avec NAT | |||
fi | fi | ||
Ligne 142 : | Ligne 144 : | ||
$IPTABLES -t filter -A INPUT -j LOG --log-level=4 | $IPTABLES -t filter -A INPUT -j LOG --log-level=4 | ||
# Parefeu - Logging | |||
} | } | ||
Ligne 152 : | Ligne 154 : | ||
#$IPTABLES -P FORWARD DROP | #$IPTABLES -P FORWARD DROP | ||
#$IPTABLES -P OUTPUT ACCEPT | #$IPTABLES -P OUTPUT ACCEPT | ||
iptables-save > /etc/firewall | |||
} | } | ||
Ligne 184 : | Ligne 186 : | ||
case "$1" in | case "$1" in | ||
start|restart) | start|restart) | ||
log_daemon_msg "Starting firewall.." | |||
fw_start | fw_start | ||
log_end_msg $? | |||
;; | ;; | ||
stop) | stop) | ||
log_daemon_msg "Stopping firewall.." | |||
fw_stop | fw_stop | ||
log_end_msg $? | |||
;; | ;; | ||
clean) | clean) | ||
log_daemon_msg "Clearing firewall rules.." | |||
fw_clear | fw_clear | ||
log_end_msg $? | |||
;; | ;; | ||
status) | status) | ||
log_daemon_msg "Firewall status" | |||
fw_status | fw_status | ||
;; | ;; | ||
*) | *) | ||
log_action_msg "Usage $0 {start|stop|restart|clean|status}" | |||
exit 1 | exit 1 | ||
;; | ;; |
Version du 9 mai 2012 à 06:20
Introduction
La méthode proposée ici pose parfois souci lors d'un changement de version du noyau, qui ne comprend pas les règles enregistrées avec iptables-save comme il faut.
Dans la suite, vous trouverez un script permettant d'établir les règles à chaque démarrage. De plus, ce script ajoute par défaut un enregistrement des erreurs dans les logs, ce qui facilite la surveillance avec logwatch par exemple. Si à l'avenir vous souhaitez ajoutez ou supprimer certaines règles, vous verrez que le script est construit de façon à faciliter ce genre d'opération.
Installation du Pare-feu
Attention, les commandes suivantes sont à exécuter avec les droits superutilisateur Copiez-collez le script suivant dans /etc/init.d/mon_parefeu. Ensuite, rendez ce script éxécutable :
chmod +x /etc/init.d/mon_parefeu
Puis activer le chargement du script au démarrage :
insserv mon_parefeu
Le script
#!/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
- ----------------------------------------------------------------------#
- ------------------------VARIABLES-------------------------------------#
readonly IPTABLES=/sbin/iptables
. /lib/lsb/init-functions
- 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"
- ----------------------------------------------------------------------#
if ! [ -x $IPTABLES ]; then
exit 0
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 OUTPUT -j LOG
$IPTABLES -t filter -A INPUT -j LOG --log-level=4
# Parefeu - Logging
}
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
}
fw_status () {
$IPTABLES -L --line-numbers
}
- ----------------------------------------------------------------------#
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
Ouvrir des ports
Pour cela, il vous suffit d'ajouter le numéro des ports à ouvrir, séparés par des espaces, entre les guillemets :
TCP_SERVICES=""
S'il s'agit de ports tcp, et dans
UDP_SERVICES=""
Si ce sont des ports UDP Pour trouver le numéro des ports, la commande suivante peut vous être utile :
less /etc/services
Autoriser au cas par cas en sortie
Complétez entre les guillemets les ports à ouvrir en sortie :
REMOTE_TCP_SERVICES="" REMOTE_UDP_SERVICES=""
Cas d'une machine routeur avec NAT
Il va falloir décommenter ces lignes : (OBSOLETE voir ISROUTERNAT)
#/sbin/iptables -A INPUT -i ethx -j ACCEPT #/sbin/iptables -A INPUT -p icmp -j ACCEPT #/sbin/iptables -A FORWARD -i ethy -o ethx -m state --state RELATED,ESTABLISHED -j ACCEPT #/sbin/iptables -A FORWARD -o ethy -j ACCEPT #/sbin/iptables -t nat -A POSTROUTING -o ethy -j MASQUERADE #echo "Parefeu - Routeur avec NAT : [OK]"
En remplaçant ethx qui correspond à l'interface du LAN et ethy qui correspond à l'interface reliée à la truc-box