editor, reviewer
416
modifications
Aucun résumé des modifications |
mAucun résumé des modifications |
||
(8 versions intermédiaires par 5 utilisateurs non affichées) | |||
Ligne 9 : | Ligne 9 : | ||
''' Attention, les commandes suivantes sont à exécuter avec les droits superutilisateur''' | ''' Attention, les commandes suivantes sont à exécuter avec les droits superutilisateur''' | ||
Copiez-collez le script suivant dans /etc/init.d/mon_parefeu. | Copiez-collez le script suivant dans /etc/init.d/mon_parefeu. | ||
Ensuite, rendez ce script | Ensuite, rendez ce script exécutable : | ||
chmod +x /etc/init.d/mon_parefeu | chmod +x /etc/init.d/mon_parefeu | ||
Puis activer le chargement du script au démarrage : | Puis activer le chargement du script au démarrage : | ||
Ligne 16 : | Ligne 16 : | ||
== Le script == | == Le script == | ||
< | <syntaxhighlight lang="bash">#!/bin/sh | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
Ligne 71 : | Ligne 71 : | ||
# Pour une machine faisant office de routeur avec NAT, | # Pour une machine faisant office de routeur avec NAT, | ||
# changer la valeur de la variable ISROUTERNAT à | # changer la valeur de la variable ISROUTERNAT à true. | ||
ISROUTERNAT=false | ISROUTERNAT=false | ||
# ethx correspond à l'interface du LAN | # ethx correspond à l'interface du LAN | ||
Ligne 108 : | Ligne 108 : | ||
# Sortie autorisée, si aucun port autorisé en sortie n'est défini | # Sortie autorisée, si aucun port autorisé en sortie n'est défini | ||
# Sinon, on autorise le loopback et les connexions déjà établies | |||
if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | ||
$IPTABLES -t filter -P OUTPUT ACCEPT | $IPTABLES -t filter -P OUTPUT ACCEPT | ||
else | |||
$IPTABLES -t filter -A OUTPUT -o lo -j ACCEPT | |||
$IPTABLES -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | |||
fi | fi | ||
Ligne 211 : | Ligne 215 : | ||
exit 0 | exit 0 | ||
</ | </syntaxhighlight> | ||
== Ouvrir des ports == | == Ouvrir des ports == | ||
Ligne 237 : | Ligne 241 : | ||
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)== | == Le script (avec support ipv6)== | ||
{{Warning|Text='''La version de ce script est encore en travaux, tant qu'elle n'est pas validée par personne compétente.'''}} | |||
#!/bin/sh | #!/bin/sh | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
# Provides: mon_parefeu | # Provides: mon_parefeu | ||
Ligne 257 : | Ligne 260 : | ||
# Description: Met en place les règles iptables. | # Description: Met en place les règles iptables. | ||
### END INIT INFO | ### END INIT INFO | ||
#------------------------Explications----------------------------------# | #------------------------Explications----------------------------------# | ||
# | # | ||
Ligne 281 : | Ligne 284 : | ||
# | # | ||
#----------------------------------------------------------------------# | #----------------------------------------------------------------------# | ||
. /lib/lsb/init-functions | . /lib/lsb/init-functions | ||
#------------------------VARIABLES-------------------------------------# | #------------------------VARIABLES-------------------------------------# | ||
# Mettre à 1 si vous utilisez IPV6 : | # Mettre à 1 si vous utilisez IPV6 : | ||
Ligne 295 : | Ligne 298 : | ||
REMOTE_TCP_SERVICES="" | REMOTE_TCP_SERVICES="" | ||
REMOTE_UDP_SERVICES="" | REMOTE_UDP_SERVICES="" | ||
# Pour une machine faisant office de routeur avec NAT, | # Pour une machine faisant office de routeur avec NAT, | ||
# changer la valeur de la variable ISROUTERNAT à | # changer la valeur de la variable ISROUTERNAT à true. | ||
ISROUTERNAT=false | ISROUTERNAT=false | ||
# ethx correspond à l'interface du LAN | # ethx correspond à l'interface du LAN | ||
Ligne 303 : | Ligne 306 : | ||
ethx="eth1" | ethx="eth1" | ||
ethy="eth0" | ethy="eth0" | ||
# Chemins vers iptables | # Chemins vers iptables | ||
readonly IPTABLES=/sbin/iptables | readonly IPTABLES=/sbin/iptables | ||
readonly IP6TABLES=/sbin/ip6tables | readonly IP6TABLES=/sbin/ip6tables | ||
#----------------------------------------------------------------------# | #----------------------------------------------------------------------# | ||
if ! [ -x $IPTABLES ]; then | if ! [ -x $IPTABLES ]; then | ||
exit 0 | exit 0 | ||
fi | fi | ||
if [ $IPV6 -eq 1 ]; then | if [ $IPV6 -eq 1 ]; then | ||
if ! [ -x $IP6TABLES ]; then | if ! [ -x $IP6TABLES ]; then | ||
Ligne 318 : | Ligne 321 : | ||
fi | fi | ||
fi | fi | ||
#----------------------------FONCTIONS---------------------------------# | #----------------------------FONCTIONS---------------------------------# | ||
fw_start () { | fw_start () { | ||
# Vidage | # Vidage | ||
fw_clear | fw_clear | ||
# Parefeu - Suppression des règles | # Parefeu - Suppression des règles | ||
# Interdictions | # Interdictions | ||
$IPTABLES -t filter -P INPUT DROP | $IPTABLES -t filter -P INPUT DROP | ||
$IPTABLES -t filter -P FORWARD DROP | $IPTABLES -t filter -P FORWARD DROP | ||
$IPTABLES -t filter -P OUTPUT DROP | $IPTABLES -t filter -P OUTPUT DROP | ||
# Parefeu - interdictions générales établies | # Parefeu - interdictions générales établies | ||
# Loopback | # Loopback | ||
$IPTABLES -t filter -A INPUT -i lo -j ACCEPT | $IPTABLES -t filter -A INPUT -i lo -j ACCEPT | ||
# Trafic d'entrée : | # Trafic d'entrée : | ||
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | $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 | # 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 LOG | ||
$IPTABLES -t filter -A INPUT -p icmp -j DROP | $IPTABLES -t filter -A INPUT -p icmp -j DROP | ||
# Sortie autorisée, si aucun port autorisé en sortie n'est défini | # Sortie autorisée, si aucun port autorisé en sortie n'est défini | ||
if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | ||
$IPTABLES -t filter -P OUTPUT ACCEPT | $IPTABLES -t filter -P OUTPUT ACCEPT | ||
fi | fi | ||
# Services à autoriser en entrée | # Services à autoriser en entrée | ||
for PORT in $TCP_SERVICES; do | for PORT in $TCP_SERVICES; do | ||
$IPTABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | $IPTABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | ||
done | done | ||
for PORT in $UDP_SERVICES; do | for PORT in $UDP_SERVICES; do | ||
$IPTABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | $IPTABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | ||
done | done | ||
# Services à autoriser en sortie | # Services à autoriser en sortie | ||
for PORT in $REMOTE_TCP_SERVICES; do | for PORT in $REMOTE_TCP_SERVICES; do | ||
$IPTABLES -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT | $IPTABLES -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT | ||
Ligne 367 : | Ligne 370 : | ||
done | done | ||
# Parefeu - Mise en place des règles | # Parefeu - Mise en place des règles | ||
if $ISROUTERNAT ; then | if $ISROUTERNAT ; then | ||
$IPTABLES -A INPUT -i $ethx -j ACCEPT | $IPTABLES -A INPUT -i $ethx -j ACCEPT | ||
Ligne 376 : | Ligne 379 : | ||
# Parefeu - Routeur avec NAT | # Parefeu - Routeur avec NAT | ||
fi | fi | ||
# Toutes les autres connexions sont enregistrées dans syslog | # Toutes les autres connexions sont enregistrées dans syslog | ||
$IPTABLES -t filter -A INPUT -j LOG --log-level=4 | $IPTABLES -t filter -A INPUT -j LOG --log-level=4 | ||
# Configuration IPV6 | # Configuration IPV6 | ||
if [ $IPV6 -eq 1 ]; then | if [ $IPV6 -eq 1 ]; then | ||
Ligne 386 : | Ligne 389 : | ||
$IP6TABLES -t filter -P FORWARD DROP | $IP6TABLES -t filter -P FORWARD DROP | ||
$IP6TABLES -t filter -P OUTPUT DROP | $IP6TABLES -t filter -P OUTPUT DROP | ||
# Loopback | # Loopback | ||
$IP6TABLES -t filter -A INPUT -i lo -j ACCEPT | $IP6TABLES -t filter -A INPUT -i lo -j ACCEPT | ||
# Trafic d'entrée : | # Trafic d'entrée : | ||
$IP6TABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | $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 | # 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 LOG | ||
$IP6TABLES -t filter -A INPUT -p icmp -j DROP | $IP6TABLES -t filter -A INPUT -p icmp -j DROP | ||
# Sortie autorisée, si aucun port autorisé en sortie n'est défini | # Sortie autorisée, si aucun port autorisé en sortie n'est défini | ||
if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then | ||
$IP6TABLES -t filter -P OUTPUT ACCEPT | $IP6TABLES -t filter -P OUTPUT ACCEPT | ||
fi | fi | ||
# Services à autoriser en entrée | # Services à autoriser en entrée | ||
for PORT in $TCP_SERVICES; do | for PORT in $TCP_SERVICES; do | ||
$IP6TABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | $IP6TABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT | ||
done | done | ||
for PORT in $UDP_SERVICES; do | for PORT in $UDP_SERVICES; do | ||
$IP6TABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | $IP6TABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT | ||
done | done | ||
# Services à autoriser en sortie | # Services à autoriser en sortie | ||
Ligne 430 : | Ligne 433 : | ||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT | $IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT | ||
fi | fi | ||
# Pour toute interface de type broadcast | # 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-solicitation -m hl --hl-eq 255 -j ACCEPT | ||
Ligne 436 : | Ligne 439 : | ||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT | $IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT | ||
$IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT | $IP6TABLES -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT | ||
# Toutes les autres connexions sont enregistrées dans syslog | # Toutes les autres connexions sont enregistrées dans syslog | ||
$IP6TABLES -t filter -A INPUT -j LOG --log-level=4 | $IP6TABLES -t filter -A INPUT -j LOG --log-level=4 | ||
fi | fi | ||
} | } | ||
fw_stop () { | fw_stop () { | ||
#$IPTABLES -F | #$IPTABLES -F | ||
Ligne 452 : | Ligne 455 : | ||
iptables-save > /etc/firewall | iptables-save > /etc/firewall | ||
} | } | ||
fw_clear () { | fw_clear () { | ||
$IPTABLES -t filter -F | $IPTABLES -t filter -F | ||
Ligne 493 : | Ligne 496 : | ||
fi | fi | ||
} | } | ||
fw_status () { | fw_status () { | ||
$IPTABLES -L --line-numbers | $IPTABLES -L --line-numbers | ||
Ligne 500 : | Ligne 503 : | ||
fi | fi | ||
} | } | ||
#----------------------------------------------------------------------# | #----------------------------------------------------------------------# | ||
case "$1" in | case "$1" in | ||
start|restart) | start|restart) | ||
Ligne 529 : | Ligne 532 : | ||
esac | esac | ||
exit 0 | exit 0 | ||
== Ressources == | == Ressources == |