Accueil

liquette

Par mushroom.

Ce script est un petit pare-feu de base pour les machines solitaires connectées directement à internet (ou passant entièrement par le modem pour le réseau local). Il est idéal pour les débutants qui ne savent pas en écrire eux-mêmes et veulent quelque chose d'efficace sans être trop restrictif.

Sommaire

Utilisation

Liquette autorise toute les connexions sortantes depuis votre machine mais seulement les connexions entrantes initialisées par vous, ce qui est le niveau minimal du pare-feu.

Tout ce que vous avez à faire est de définir la variable I (comme Interface) selon l'interface que vous utilisez pour vouz connecter. Si vous ne savez pas laquelle c'est, c'est très simple : faites un netstat -i déconnecté puis la même chose connecté, la ligne qui apparaît la seconde fois mais pas la première est celle de votre interface.

Installation

Le plus simple est de le copier dans votre /etc/rc.d/ en tant que rc.firewall, mais vous pouvez également l'y placer en le nommant rc.liquette, puis créer un lien symbolique rc.firewall pointant sur lui. Ensuite, quelque soit votre choix rendez-le exécutable mais lisible uniquement par le super-utilisateur:

chown root:root <script>
chmod 700 <script>

Le script

Vous pouvez aussi le télécharger directement, en utilisant ce lien.

#!/bin/sh
#
# LIQUETTE - "petit firewall pour ne pas être à poil"
#            (pare-feu basique pour iptables sur monoposte).
#
# c. 2007-08-31
# r. 2007-08-31 0

# Copyright (c) 2007 mushroom.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# Interface (ppp0, ppp1, eth0, eth1, ... selon ce que vous avez).
I="eth0"

fwdown () {
    # Détruit l ensemble des règles, ouvrant toutes les tables.
    iptables -t filter -F
    iptables -t filter -X
    iptables -t filter -P INPUT ACCEPT
    iptables -t filter -P OUTPUT ACCEPT
    iptables -t filter -P FORWARD ACCEPT
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P INPUT ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT
    iptables -t mangle -P POSTROUTING ACCEPT
    iptables -t mangle -P FORWARD ACCEPT
}

fwup () {
    # Met en place le pare-feu.

    # D abord on charge les modules nécessaires
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp

    # Par défaut, on est hyper-restrictif : rien ne va nulle-part.
    iptables -t filter -P INPUT DROP
    iptables -t filter -P OUTPUT DROP
    iptables -t filter -P FORWARD DROP

    # On autorise tout (entrée/sortie) sur le réseau virtuel interne "loopback".
    iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
    iptables -t filter -A INPUT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

    # Sur notre interface, on autorise en entrée les connexions établies depuis
    # notre machine (seulement le port 53 pour l udp, nécessaire au dns... sauf si vous tenez
    # à naviguer uniquement via adresses IP)...
    iptables -A INPUT -i $I -d 0.0.0.0/0 -p tcp -m state --state ESTABLISHED -j ACCEPT
    iptables -A INPUT -i $I -d 0.0.0.0/0 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A INPUT -i $I -p icmp -m state --state ESTABLISHED -j ACCEPT

    # ... et les entrées en relatif sur le port 20, afin de pouvoir utiliser le ftp.
    iptables -A INPUT -i $I -p tcp --sport 20 -m state --state RELATED -j ACCEPT

    # En sortie, on autorise tout ce qui est protocole tcp, et encore le 53/udp pour le dns.
    iptables -A OUTPUT -o $I -s 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o $I -s 0.0.0.0/0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

}

case $1 in
    "start")
        echo "Setting rules of firewall..."
        fwdown && fwup && echo "Firewall is up !"
    ;;
    "stop")
        fwdown && echo "Firewall is down."
    ;;
    *)
        echo "Usage: $0 <start|stop>" 1>&2
        exit 1
esac

# FDF

Thèmes : #administration #mushroom #scripts

Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.