Etape 11 : Paramètres de pare-feu
Si vous ne souhaitez pas ce niveau de sécurité, il y a également un script de pare-feu plus simple qui est essentiellement « régler et oublier ».
Vous pouvez choisir entre firewall.advanced ou firewall.simple et ensuite personnaliser. Crédits aller à Guillaume Kaddouch
A - ruleset avancé
Fondamentalement, ce script effectue les opérations suivantes :
-Blocs entrants/sortants indicateurs non valides TCP (même à partir des flux établis)
-Optimise les requêtes DNS (domaine IP TOS)
-Identifie le trafic par type de flux et puis il match contre un ruleset
-Ajoute le caractère aléatoire au processus NAT
-N’autorisent que quelques ports sortants de standards (http, https, ftp)
-Enregistre avec précision ce qui est tombé et éviter l’inondation de journal
-Drops de paquets avec durée de vie faible (pourrait signifier une attaque d’expiration ttl ou un traceroute) entrants
-Détecter et bloquer les connexions sortantes de malware
$ sudo touch /etc/firewall.advanced
$ sudo touch /etc/firewall.flows
$ sudo chmod u + x /etc/firewall.*
L’identification des flux est une liste de règles acheminant le trafic dans la chaîne personnalisée correspondante (par exemple FORWARD_OUT, FORWARD_IN, LAN_IN, etc....). Cette liste de règles, une fois déboguée et validées, ne doit pas être modifiée par la suite. Aussi, comme ils utilisent de l’espace dans le script et pourraient être ennuyeux à lire, il rend les règles de filtrage plus difficile à lire si ils sont sur le même script. C’est pourquoi j’ai les déplacer dans un fichier distinct, je viens d’appeler le script principal :
$ sudo vi /etc/firewall.flows
#! / bin/bash
# "Date d’août 2012
# "Auteur : Guillaume Kaddouch
# "Version : coule 1,0
#######################
# DÉBIT IDENTIFICATION #
##############################################################################################
# NAT_OUT
iptables -t nat-a POSTROUTING -o $LAN -p tcp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j NAT_OUT
iptables -t nat-a POSTROUTING -o $LAN -p udp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j NAT_OUT
iptables -t nat-a POSTROUTING -o $LAN -p icmp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j NAT_OUT
# FORWARD_OUT
iptables-a avant -i $LAN -p tcp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --src-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j FORWARD_OUT
iptables-a avant -i $LAN -p udp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --src-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j FORWARD_OUT
iptables-a avant -i $LAN -p icmp - ipv4 -m iprange \
--src-range $DHCP_RANGE ! --dst-range $DHCP_RANGE -m pkttype--pkt-type unicast addrtype -m ! --src-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j FORWARD_OUT
# FORWARD_IN
iptables-a avant -i $LAN -p tcp - ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-type unicast -m addrtype ! --src-type LOCAL\
-m state--state ESTABLISHED, RELATED -j FORWARD_IN
iptables-a avant -i $LAN -p udp - ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-type unicast -m addrtype ! --src-type LOCAL\
-m state--state ESTABLISHED, RELATED -j FORWARD_IN
iptables-a avant -i $LAN -p icmp - ipv4 -m iprange \
! --src-range $DHCP_RANGE--dst-range $DHCP_RANGE -m pkttype--pkt-type unicast -m addrtype ! --src-type LOCAL\
-m state--state ESTABLISHED, RELATED -j FORWARD_IN
# LAN_IN
iptables-a INPUT -i $LAN -p tcp - ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j LAN_IN
iptables-a INPUT -i $LAN -p udp - ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j LAN_IN
iptables-a INPUT -i $LAN -p icmp - ipv4 -m iprange \
--src-range $DHCP_RANGE -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state NEW, ESTABLISHED, associés -j LAN_IN
# LAN_BROADCAST
iptables-a INPUT -i $LAN -p tcp - ipv4 \
! -m -d $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
État -m ! --l’État INVALID -j LAN_BROADCAST
iptables-a INPUT -i $LAN -p udp--ipv4 \
! -m -d $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
État -m ! --l’État INVALID -j LAN_BROADCAST
iptables-a INPUT -i $LAN -p icmp--ipv4 \
! -m -d $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
État -m ! --l’État INVALID -j LAN_BROADCAST
# INTERNET_GATEWAY
iptables-a INPUT -i $LAN -p tcp - ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state ESTABLISHED, RELATED -j INTERNET_GATEWAY
iptables-a INPUT -i $LAN -p udp--ipv4 ! \
-s $LAN_SUBNET -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state ESTABLISHED, RELATED -j INTERNET_GATEWAY
iptables-a INPUT -i $LAN -p icmp--ipv4 \
! -s $LAN_SUBNET -d $RSS -m pkttype--pkt-type unicast -m addrtype--dst-type LOCAL\
-m state--state ESTABLISHED, RELATED -j INTERNET_GATEWAY
# GATEWAY_LAN
iptables - un sortie -o $LAN -p tcp - ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_LAN
iptables - un sortie -o $LAN -p udp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_LAN
iptables - une sortie -o $LAN -p icmp--ipv4 \
-s $RSS -d $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_LAN
# GATEWAY_BROADCAST
iptables - un sortie -o $LAN -p tcp - ipv4 \
-m -s $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_BROADCAST
iptables - un sortie -o $LAN -p udp--ipv4 \
-m -s $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_BROADCAST
iptables - une sortie -o $LAN -p icmp--ipv4 \
-m -s $RSS pkttype--pkt type broadcast -m addrtype--dst-type BROADCAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_BROADCAST
# GATEWAY_INTERNET
iptables - un sortie -o $LAN -p tcp - ipv4 \
-s $RSS ! d - $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_INTERNET
iptables - un sortie -o $LAN -p udp--ipv4 \
-s $RSS ! d - $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_INTERNET
iptables - une sortie -o $LAN -p icmp--ipv4 \
-s $RSS ! d - $LAN_SUBNET -m pkttype--pkt-type unicast -m addrtype--dst-type UNICAST\
-m state--state NEW, ESTABLISHED, associés -j GATEWAY_INTERNET
##############################################################################################
Maintenant, nous allons créer le script de règles filtrage a parlé précédemment :
$ sudo vi /etc/firewall.advanced
#! / bin/bash
# "Date d’août 2012
# "Auteur : Guillaume Kaddouch
# "URL : http://networkfilter.blogspot.com
# "Version : Advanced 1,0
echo « Configurer les variables »
# VARIABLES POUR ADAPTER POUR CORRESPONDRE À VOTRE RÉSEAU
LAN = « eth0 »
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = « 192.168.1.10-192.168.1.20 »
DNS_SERVER1 = « 8.8.8.8 »
DNS_SERVER2 = « 208.67.222.222 »
RSS = « 192.168.1.3 »
MODEM_ROUTER = « 192.168.1.1 »
UNPRIV_PORTS = "1024:65535"
SSH = « 15507 »
NTP_SERVER = « 65.55.21.22 »
echo « les chaînes existantes de Flushing et règles... »
# RÈGLES & FLUSHING chaînes
filtrer les iptables -t -F
filtrer les iptables -t -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
echo « Mise en place de stratégies par défaut »
# STRATÉGIES PAR DÉFAUT
iptables -P INPUT DROP
iptables -P sortie DROP
iptables -P tomber vers l’avant
# LOOPBACK
iptables-a INPUT -i lo -j accepte
iptables-a OUTPUT -o lo -j ACCEPT
echo « Chaînes de création »
# CHAÎNES
iptables -N FORWARD_OUT
iptables -N FORWARD_IN
iptables -N LAN_IN
iptables -N LAN_BROADCAST
iptables -N GATEWAY_LAN
iptables -N GATEWAY_BROADCAST
iptables -N GATEWAY_INTERNET
iptables -N INTERNET_GATEWAY
iptables-t nat-n NAT_OUT
# CHAÎNE DE VÉRIFICATION, OUVREZ UNE SESSION ET D’OPTIMISER
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -N LOGDROP_MALWARE
iptables -N LOGDROP_BADPORT
iptables -t mangle -N FAST_DNS
echo « Règles de chargement »
#################################
# CHECK & optimisation de protocole #
##############################################################################################
iptables-a avant -i $LAN -p tcp - ipv4 -j CHECK_TCP_FLAGS
iptables-a INPUT -i $LAN -p tcp - ipv4 -j CHECK_TCP_FLAGS
iptables -t mangle - un sortie -o $LAN -p tcp - ipv4, -m -s $RSS pkttype--pkt-type unicast--dport domaine -m \
State--state NEW, ESTABLISHED, RELATED -j FAST_DNS
iptables -t mangle - un sortie -o $LAN -p udp--ipv4, -m -s $RSS pkttype--pkt-type unicast--dport domaine -m \
State--state NEW, ESTABLISHED, RELATED -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, FIN FIN -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags FIN, RST FIN, RST -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, SYN FIN, FIN -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ALL ALL -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags tous NONE -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags tous FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN tous, nageoire, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN tous, RST, ACK, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - A LOGDROP_TCP_FLAGS -m limit--limit 1/s - j journal--log-tcp-options--log-prefix \
« [IPTABLES : INDICATEURS TCP MAUVAIS] »
iptables - A LOGDROP_TCP_FLAGS -j DROP
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangle - un FAST_DNS -p udp -d $DNS_SERVER1 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p udp -d $DNS_SERVER2 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS--set-tos Minimize-Delay
##############################################################################################
# DÉBIT IDENTIFICATION #
source "/ etc/firewall.flows"
############
# NAT_OUT #
##############################################################################################
iptables -t nat - A NAT_OUT -j MASQUERADE--au hasard
##############################################################################################
###############
# AVANT OUT #
##############################################################################################
# Trafic de logiciels malveillants potentiel
# Si ne pas tombé ici, ils auraient été bloqués par la stratégie par défaut
# Cependant, nous en profitons pour les enregistrer dans une table « bad_traffic »
# Ce tableau nous permet aux hôtes de bloc LAN essaie d’accéder aux trop nombreux ports de malware
# Donc être potentiellement infectés (et nécessitant une analyse antivirue)
#
# Dès qu’un hôte LAN a frappé 5 fois règles ci-dessous dans 2 mn, laisser tomber tous avant hors de cet hôte
iptables - A FORWARD_OUT -p tcp -m récente--nom bad_traffic--rcheck--rttl--hitcount 5--secondes 120 -j \
LOGDROP_MALWARE
iptables - un FORWARD_OUT -p tcp--dport 139 - m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - un FORWARD_OUT -p tcp--dport 445 - m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - un FORWARD_OUT -p tcp--dport 135 - m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - A FORWARD_OUT -p tcp--dport 6667 - m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - A FORWARD_OUT -p tcp--dport 1433:1434 -m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - A FORWARD_OUT -p udp--dport 1433:1434 -m récente--bad_traffic--le nom défini -j LOGDROP_BADPORT
iptables - A LOGDROP_BADPORT -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : mauvais PORT]"
iptables - A LOGDROP_BADPORT -j DROP
iptables - A LOGDROP_MALWARE -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : hôte infecté] »
iptables - A LOGDROP_MALWARE -j DROP
# Ports autorisés
iptables - A FORWARD_OUT -p tcp - sport $UNPRIV_PORTS -m multiport--dports ftp, http, https, 8080 -j ACCEPT
# Autorise les connexions ESTABLISHED et RELATED vers d’autres ports, requis pour le FTP par exemple
iptables - A FORWARD_OUT -p tcp - sport $UNPRIV_PORTS--dport $UNPRIV_PORTS -m state - Etat \
ÉTABLI, RELATED -j ACCEPT
# NTP requêtes (modifier la variable au début)
iptables - A FORWARD_OUT -p udp -d $NTP_SERVER--sport--dport de ntp ntp -j ACCEPT
# Echo request
iptables - A FORWARD_OUT -p icmp -m icmp--icmp de type echo-request - j ACCEPT
# Rejeter le trafic que nous ne voulons pas, beaucoup d’options ci-dessous (créer les variables correspondantes)
# iptables - A FORWARD_OUT -p tcp--dport $port_of_a_host_to_block -j rejeter--rejet-avec \
# icmp-hôte-interdit
# iptables - A FORWARD_OUT -d $subnet_to_block -j rejeter--rejet-avec icmp-net-interdit
# Bloquer & connecter tout le reste
iptables - A FORWARD_OUT -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : FORWARD_OUT] »
iptables - A FORWARD_OUT -j DROP
##############################################################################################
##############
# FORWARD_IN #
##############################################################################################
# Autoriser le transfert des flux entrants liés ou établis, avec une durée de vie > 10
iptables - A FORWARD_IN -m ttl ttl---gt 10 -j ACCEPT
# Bloquer & connecter tout le reste
iptables - A FORWARD_IN -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : FORWARD_IN] »
iptables - A FORWARD_IN -j DROP
##############################################################################################
##########
# LAN_IN #
##############################################################################################
# Autoriser DHCP diffuse de l’intérieur
iptables - A LAN_IN -i $LAN -p udp--sport--dport 67:68 67:68 -j ACCEPT
# Permettre les requêtes DNS depuis le réseau local pour le système de sécurité de framboise,
iptables - A LAN_IN -i $LAN -p udp - sport $UNPRIV_PORTS--dport 53 -j ACCEPT
iptables - A LAN_IN -i $LAN -p tcp - sport $UNPRIV_PORTS--dport 53 -j ACCEPT
NB de connexions SSH
# (vous pouvez ajouter un contrôle pour le système d’exploitation à distance)
iptables - A LAN_IN -i $LAN -p tcp - sport $UNPRIV_PORTS--dport $SSH -j ACCEPT
# ICMP LAN (Type 3 = inaccessible [destination|port|protocol])
iptables - A LAN_IN -p icmp -m icmp--icmp de type echo-request - j ACCEPT
iptables - A LAN_IN -p icmp -m icmp--icmp de type 3 -j ACCEPT
# Bloquer & connecter tout le reste
iptables - A LAN_IN -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : LAN_IN] »
iptables - A LAN_IN -j DROP
##############################################################################################
##################
# LAN_BROADCAST #
##############################################################################################
# Autoriser DHCP diffuse de l’intérieur
iptables - A LAN_BROADCAST -i $LAN -p udp--sport--dport 67:68 67:68 -j ACCEPT
# Bloquer tout le reste (ne vous embêtez pas à connecter le trafic de diffusion)
iptables - A LAN_BROADCAST -j DROP
##############################################################################################
###########################
# INTERNET_GATEWAY #
##############################################################################################
# Autoriser connexions déjà établies depuis RSS vers Internet pour revenir sur le RSS
iptables - A INTERNET_GATEWAY -p tous -j ACCEPT
##############################################################################################
########################
# CHAINE GATEWAY_LAN #
##############################################################################################
# Bloc potentiel ICMP redirection envoyés chez nous (peut être causé par un sysctl mal configuré)
iptables - A GATEWAY_LAN -p icmp -m icmp--icmp de type redirect -m limite--limite 1/s - j journal--log-prefix \
« [IPTABLES : ICMP REDIRECTION] »
iptables - A GATEWAY_LAN -p -m icmp icmp---type icmp redirection -j DROP
# Autoriser les connexions LAN établie à framboise de revenir sur le LAN
iptables - A GATEWAY_LAN -p tcp -m state--state ESTABLISHED, RELATED -j ACCEPT
iptables - A GATEWAY_LAN -p udp -m state--state ESTABLISHED, RELATED -j ACCEPT
iptables - A GATEWAY_LAN -p icmp -m state--state ESTABLISHED, RELATED -j ACCEPT
# Autoriser DHCP associés trafic
iptables - A GATEWAY_LAN -p udp--sport--dport 67:68 67:68 -j ACCEPT
# Autoriser Raspi ping sur le LAN
iptables - A GATEWAY_LAN -p icmp -m icmp--icmp de type echo-request - m state - nouvel État -j ACCEPT
# Bloquer & connecter tout le reste
iptables - A GATEWAY_LAN -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : GATEWAY_LAN] »
iptables - A GATEWAY_LAN -j DROP
##############################################################################################
#####################
# GATEWAY_BROADCAST #
##############################################################################################
# Permettre des réponses DHCP diffusion de flux RSS
iptables - A GATEWAY_BROADCAST -p udp--sport--dport 67:68 67:68 -j ACCEPT
# Bloquer & connecter tout le reste
iptables - A GATEWAY_BROADCAST -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : GATEWAY_BROADCAST] »
iptables - A GATEWAY_BROADCAST -j DROP
##############################################################################################
####################
# GATEWAY_INTERNET #
##############################################################################################
# Autoriser les connexions nouvelles de framboise (nécessaire pour les mises à jour, installer des paquets, etc....)
# Je ne cours pas mises à jour de la nuit, par conséquent il n’y a aucune nécessité de la règle d’être actif 24/24
iptables - A GATEWAY_INTERNET -p tcp -m multiport--dports ftp, http, https, temps -m--timestart 09:00--timestop \
23:00 -j ACCEPT
# Résolutions DNS
iptables - A GATEWAY_INTERNET -p udp - sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domaine -j ACCEPT
iptables - A GATEWAY_INTERNET -p udp - sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domaine -j ACCEPT
iptables - A GATEWAY_INTERNET -p tcp - sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domaine -j ACCEPT
iptables - A GATEWAY_INTERNET -p tcp - sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domaine -j ACCEPT
# Arrive lors du rechargement des règles de pare-feu
iptables - A GATEWAY_INTERNET -p icmp -m icmp--icmp de type port-inaccessible - d $DNS_SERVER1 -j DROP
iptables - A GATEWAY_INTERNET -p icmp -m icmp--icmp de type port-inaccessible - d $DNS_SERVER2 -j DROP
# Autoriser NTP
iptables - A GATEWAY_INTERNET -p udp--dport ntp -j ACCEPT
# Bloquer & connecter tout le reste
iptables - A GATEWAY_INTERNET -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : GATEWAY_INTERNET] »
iptables - A GATEWAY_INTERNET -j DROP
##############################################################################################
## FIN DE RÈGLES ##
rules_number =' /etc/firewall.advanced « \-j » egrep | WC -l "
flows_number =' /etc/firewall.flows « \-j » egrep | WC -l "
total_rules = $((rules_number + flows_number))
echo ""
echo « $total_rules règles chargés. »
echo ""
B - base ruleset
Fondamentalement, ce script effectue les opérations suivantes :
-Blocs entrants/sortants indicateurs non valides TCP (même à partir des flux établis)
-Optimise les requêtes DNS (domaine IP TOS)
-Ajoute le caractère aléatoire au processus NAT
-Drops de paquets avec durée de vie faible (pourrait signifier une attaque d’expiration ttl ou un traceroute) entrants
Cet ensemble de règles permet de tout depuis votre réseau local devant être transmises sur Internet, donc théoriquement ne nécessitant ne pas d’être modifiés par la suite. Si vous souhaitez ajouter une couche supplémentaire de sécurité réseau pour votre grand-mère ou les parents par exemple, mais que vous ne peut pas s’attendre à pouvoir modifier iptables rules(!), je pense que ce jeu de règles est plus approprié.
$ sudo vi /etc/firewall.simple
#! / bin/bash
# Date d’août 2012
# Auteur : Guillaume Kaddouch
# URL : http://networkfilter.blogspot.com
# Version : 1.0 Standard
echo « Configurer les variables »
# VARIABLES POUR ADAPTER POUR CORRESPONDRE À VOTRE RÉSEAU
LAN = « eth0 »
LAN_SUBNET="192.168.1.0/24"
DHCP_RANGE = « 192.168.1.10-192.168.1.20 »
DNS_SERVER1 = « 8.8.8.8 »
DNS_SERVER2 = « 208.67.222.222 »
RSS = « 192.168.1.3 »
MODEM_ROUTER = « 192.168.1.1 »
UNPRIV_PORTS = "1024:65535"
SSH = « 15507 »
NTP_SERVER = « 65.55.21.22 »
echo « les chaînes existantes de Flushing et règles... »
# RÈGLES & FLUSHING chaînes
filtrer les iptables -t -F
filtrer les iptables -t -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
echo « Mise en place de stratégies par défaut »
# STRATÉGIES PAR DÉFAUT
iptables -P INPUT DROP
iptables -P sortie DROP
iptables -P tomber vers l’avant
# LOOPBACK
iptables-a INPUT -i lo -j accepte
iptables-a OUTPUT -o lo -j ACCEPT
echo « Chaînes de création »
# CHAÎNE DE VÉRIFICATION, OUVREZ UNE SESSION ET D’OPTIMISER
iptables -N CHECK_TCP_FLAGS
iptables -N LOGDROP_TCP_FLAGS
iptables -t mangle -N FAST_DNS
echo « Règles de chargement »
#################################
# CHECK & optimisation de protocole #
##############################################################################################
iptables-a avant -i $LAN -p tcp - ipv4 -j CHECK_TCP_FLAGS
iptables-a INPUT -i $LAN -p tcp - ipv4 -j CHECK_TCP_FLAGS
iptables -t mangle - un sortie -o $LAN -p tcp - ipv4 -s $RSS -m pkttype--pkt-type unicast--dport domaine \
-m state--state NEW, ESTABLISHED, associés -j FAST_DNS
iptables -t mangle - un sortie -o $LAN -p udp - ipv4 -s $RSS -m pkttype--pkt-type unicast--dport domaine \
-m state--state NEW, ESTABLISHED, associés -j FAST_DNS
##############################################################################################
###################
# CHECK_TCP_FLAGS #
##############################################################################################
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, FIN FIN -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, PSH PSH -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ACK, URG URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags FIN, RST FIN, RST -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, SYN FIN, FIN -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN, RST SYN, RST -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags ALL ALL -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags tous NONE -j LOGDROP_TCP_FLAGS
iptables - un CHECK_TCP_FLAGS -p tcp--tcp-flags tous FIN, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN tous, nageoire, PSH, URG -j LOGDROP_TCP_FLAGS
iptables - A CHECK_TCP_FLAGS -p tcp--tcp-flags SYN tous, RST, ACK, FIN, URG -j LOGDROP_TCP_FLAGS
iptables - A LOGDROP_TCP_FLAGS -m limit--limit 1/s - j journal--log-tcp-options--log-prefix \
« [IPTABLES : INDICATEURS TCP MAUVAIS] »
iptables - A LOGDROP_TCP_FLAGS -j DROP
##############################################################################################
############
# FAST_DNS #
##############################################################################################
iptables -t mangle - un FAST_DNS -p udp -d $DNS_SERVER1 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p udp -d $DNS_SERVER2 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p tcp -d $DNS_SERVER1 -j TOS--set-tos Minimize-Delay
iptables -t mangle - un FAST_DNS -p tcp -d $DNS_SERVER2 -j TOS--set-tos Minimize-Delay
##############################################################################################
#######
# NAT #
##############################################################################################
iptables -t nat-a POSTROUTING -o $LAN ! État de -m -d $LAN_SUBNET--Etat nouveau, établi, RELATED -j MASQUERADE\
--au hasard
##############################################################################################
###########
# # AVANT
##############################################################################################
# Sortant avant de n’importe quelle connexion
iptables - A FORWARD -p tcp -i $LAN -s $LAN_SUBNET ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
iptables - un attaquant udp -p -i $LAN -s $LAN_SUBNET ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
iptables - un attaquant icmp -p -i $LAN -s $LAN_SUBNET ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
# Permettre entrant avant de connexions établies ou connexes avec durée de vie supérieure à 10
iptables - A FORWARD -p tcp -i $LAN ! État de -m -d $LAN_SUBNET -s $LAN_SUBNET--state ESTABLISHED, RELATED -m \
TTL ttl---gt 10 -j ACCEPT
iptables - un attaquant udp -p -i $LAN ! État de -m -d $LAN_SUBNET -s $LAN_SUBNET--state ESTABLISHED, RELATED -m \
TTL ttl---gt 10 -j ACCEPT
iptables - un attaquant icmp -p -i $LAN ! État de -m -d $LAN_SUBNET -s $LAN_SUBNET--state ESTABLISHED, RELATED -m \
TTL ttl---gt 10 -j ACCEPT
##############################################################################################
#########
# ENTRÉE #
##############################################################################################
# Autoriser DHCP diffuse de l’intérieur
iptables - A INPUT -i $LAN -p udp -s $LAN_SUBNET--sport--dport 67:68 67:68 -j ACCEPT
# Autoriser les requêtes DNS depuis le réseau local à la framboise
iptables - A INPUT -i $LAN -p udp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport 53 -j ACCEPT
iptables - A INPUT -i $LAN -p tcp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport 53 -j ACCEPT
NB de connexions SSH
iptables - A INPUT -i $LAN -p tcp -s $LAN_SUBNET--sport $UNPRIV_PORTS -d $RSS--dport $SSH -j ACCEPT
# ICMP LAN (Type 3 = inaccessible [destination|port|protocol])
iptables-a INPUT -p icmp -m icmp de type icmp--echo-request - s $LAN_SUBNET -d $RSS -j ACCEPT
iptables-a INPUT -p icmp icmp de -m--icmp de type 3 -s $LAN_SUBNET -d $RSS -j ACCEPT
# Autoriser les connexions déjà établies de framboise à Internet pour revenir à itl
iptables-a INPUT -i $LAN ! -s $LAN_SUBNET -d $RSS -p tcp -m state - state ESTABLISHED, RELATED -j ACCEPT
iptables-a INPUT -i $LAN ! -s $LAN_SUBNET -d $RSS p - udp -m state - state ESTABLISHED, RELATED -j ACCEPT
iptables-a INPUT -i $LAN ! -s $LAN_SUBNET -d $RSS -p icmp -m state--state ESTABLISHED, RELATED -j ACCEPT
##############################################################################################
###########
# SORTIE #
##############################################################################################
# Bloc potentiel ICMP redirection envoyés chez nous (peut être causé par un sysctl mal configuré)
iptables - une sortie -o $LAN -p icmp -m icmp de type icmp--redirection -m limite--limite 1/s - j journal--log-prefix \
« [IPTABLES : ICMP REDIRECTION] »
iptables-a OUTPUT -o $LAN -p -m d’icmp icmp--icmp de type redirect -j DROP
# Autoriser les connexions LAN établie à la Raspi de revenir sur le LAN
iptables - A sortie -o $LAN -p tcp -s $RSS -d $LAN_SUBNET -m state--state ESTABLISHED, RELATED -j ACCEPT
iptables - A sortie -o $LAN -p udp -s $RSS -d $LAN_SUBNET -m state--state ESTABLISHED, RELATED -j ACCEPT
iptables - A sortie -o $LAN -p icmp -s $RSS -d $LAN_SUBNET -m state--state ESTABLISHED, RELATED -j ACCEPT
# Autoriser DHCP associés trafic
iptables - une sortie -o $LAN -p udp -s $RSS -d $LAN_SUBNET--67:68--dport 67:68 -j ACCEPT de sport
# Autoriser framboise ping sur le LAN
iptables - A -o $LAN -p icmp -m icmp--icmp de type echo-request - s $RSS -d $LAN_SUBNET -m État de sortie \
--l’état de nouvelle -j ACCEPT
# Autoriser les connexions nouvelles de framboise (nécessaire pour les mises à jour, installer des paquets, etc....)
iptables-a OUTPUT -o $LAN -p tcp -s $RSS ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
iptables-a OUTPUT -o $LAN -p udp -s $RSS ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
iptables-a OUTPUT -o $LAN -p icmp -s $RSS ! -d $LAN_SUBNET -m state--state NEW, ESTABLISHED, RELATED \
-j ACCEPT
# Requêtes DNS
iptables - une sortie -o $LAN - udp -pajaud $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domaine -j ACCEPT
iptables - une sortie -o $LAN - udp -pajaud $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domaine -j ACCEPT
iptables - une sortie -o $LAN -p tcp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER1--dport domaine -j ACCEPT
iptables - une sortie -o $LAN -p tcp -s $RSS--sport $UNPRIV_PORTS -d $DNS_SERVER2--dport domaine -j ACCEPT
# Autoriser NTP
iptables-a OUTPUT -o $LAN -p udp--dport ntp -s $RSS -j ACCEPT
##############################################################################################
iptables - une entrée -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : INPUT DROP] »
iptables-a INPUT -j DROP
iptables - une sortie -m limit--limit 1/s - j journal--log-prefix "[IPTABLES : sortie DROP] »
iptables-a OUTPUT -j DROP
iptables - une limite avant -m--limite 1/s - j journal--log-prefix "[IPTABLES : DROP FORWARD] »
iptables - A -j chute en avant
## FIN DE RÈGLES ##
rules_number =' /etc/firewall.simple « \-j » egrep | WC -l "
echo ""
echo « $rules_number règles chargés. »
echo ""
Ces deux groupes de règles sont que des exemples, si vous avez un prêt à utiliser votre propre.
Pour charger au démarrage, les règles iptables, il faut faire comme suit :
$ sudo vi /etc/rc.local
echo « Règles iptables de chargement »
/ etc/pare-feu. VERSION >> / dev/nul
Remplacez VERSION par « avancé » ou « simple », sans guillemets, selon le script que vous utilisez.
Si vous souhaitez afficher les alertes en temps réel, tapez ce qui suit :
$ sudo tail -f /var/log/iptables.log