Firewall iptables

iptables est l'outil linux pour gérer les règles de filtrage des paquets. Voici comment implémenter un firewall avec une activation au boot. Pour Debian Stretch (systemd).

/etc/firewall/start.sh

#!/bin/sh
#
# Activation du firewall pour w3.ouifm.fr
#

ipt="/sbin/iptables"
[ ! -x "$ipt" ] && { echo "$0: \"${ipt}\" introuvable"; exit 1; }

# Vider les tables actuelles
$ipt -F
# Vider les regles personnelles
$ipt -X

# Interdire toute connexion entrante et sortante
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT DROP

# ---

# Ne pas casser les connexions etablies
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
$ipt -A INPUT -p icmp -j ACCEPT
$ipt -A OUTPUT -p icmp -j ACCEPT

# ---

# SSH entrant de l'ip publique colt
$ipt -A INPUT -p tcp -s 84.14.105.170 --dport 22 -j ACCEPT

# SSH entrant domicile Guillaume
$ipt -A INPUT -p tcp -s 82.230.212.188 --dport 22 -j ACCEPT

# SSH out (bitbucket ...)
$ipt -A OUTPUT -p tcp --dport 22 -j ACCEPT

# NTP In et Out
# reseau adeuxi 10
$ipt -A INPUT -p udp --dport 123 -s 192.168.10.0/24  -j ACCEPT

# reseau adeuxi 20 (soon)
#$ipt -A INPUT -p udp --dport 123 -s 192.168.20.0/24  -j ACCEPT
$ipt -A OUTPUT -p udp --dport 123 -j ACCEPT

# DNS OUT
$ipt -A OUTPUT -p udp --dport 53 -j ACCEPT
$ipt -A OUTPUT -p tcp --dport 53 -j ACCEPT

# HTTP + HTTPS Out
$ipt -A OUTPUT -p tcp --dport 80 -j ACCEPT
$ipt -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP In
# ip ovh3.ouifm.fr pour titrage live
$ipt -A INPUT -p tcp -s 92.222.72.158 --dport 80 -j ACCEPT
# ip studio Bob Boulogne pour titrage live
$ipt -A INPUT -p tcp -s 193.248.32.163 --dport 80 -j ACCEPT
# ip colt
$ipt -A INPUT -p tcp -s 84.14.105.170 --dport 80 -j ACCEPT

#SMB
$ipt -A INPUT -p tcp -s 192.168.10.0/24 --dport 135:139 -j ACCEPT
$ipt -A INPUT -p udp -s 192.168.10.0/24 --dport 135:139 -j ACCEPT
$ipt -A INPUT -p tcp -s 192.168.10.0/24 --dport 445 -j ACCEPT
$ipt -A INPUT -p udp -s 192.168.10.0/24 --dport 445 -j ACCEPT

$ipt -A OUTPUT -p tcp -s 192.168.10.0/24 --dport 135:139 -j ACCEPT
$ipt -A OUTPUT -p udp -s 192.168.10.0/24 --dport 135:139 -j ACCEPT
$ipt -A OUTPUT -p tcp -s 192.168.10.0/24 --dport 445 -j ACCEPT
$ipt -A OUTPUT -p udp -s 192.168.10.0/24 --dport 445 -j ACCEPT

#LOG
$ipt -A INPUT -j LOG --log-prefix "IPTables : "

/etc/firewall/stop.sh

#!/bin/sh
#
# Désactivation du firewall
#

ipt="/sbin/iptables"
[ ! -x "$ipt" ] && { echo "$0: \"${ipt}\" introuvable"; exit 1; }

$ipt -P INPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -P OUTPUT ACCEPT
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X
$ipt -t mangle -F
$ipt -t mangle -X
$ipt iptables -t raw -F
$ipt -t raw -X

/etc/systemd/system/firewall.service

[Unit]
Description=Add Firewall Rules to iptables

[Service]
Type=oneshot
ExecStart=/etc/firewall/start.sh

[Install]
WantedBy=multi-user.target

Activer le service au boot :

systemctl enable firewall.service

lister les règles de filtrages actives :

iptables -L