Raspberry Pi pare-feu et Intrusion Detection System (11 / 14 étapes)

Etape 11 : Paramètres de pare-feu

Ci-dessous, vous trouverez un script de pare-feu très restrictif. Vous devrez peut-être modifier pour s’adapter à vos besoins car il peut bloquer les sites Web pas sur les ports standards (80/443) et n'utilise pas les ports HTTP/HTTPS/FTP des logiciels (P2P, Skype, Google Talk, etc....).

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

Articles Liés

Construire votre propre pare-feu passerelle

Construire votre propre pare-feu passerelle

apprendre à construire votre propre passerelle de pare-feu à l'aide de FreeBSD® et vieilles pièces de PC. Le pare-feu comprendra le firewall PF, IDS Snort, diverses applications de l'IPS, proxy Squid et certaines interfaces web intuitive pour l'audit
Comment : Configurer un pare-feu de Virtual Machine IPCop pour protéger votre hôte Windows (gratuit!)

Comment : Configurer un pare-feu de Virtual Machine IPCop pour protéger votre hôte Windows (gratuit!)

Summary:L'objectif de ce projet est d'utiliser IpCop (Distribution Linux gratuite) dans une Machine virtuelle pour protéger un système d'hôte Windows sur n'importe quel réseau. IpCop est un Linux très puissante fonction pare-feu avec fonctions avancé
Un microscope de Raspberry Pi par caméra à l’aide de pièces LEGO

Un microscope de Raspberry Pi par caméra à l’aide de pièces LEGO

Raspberry Pi par caméra microscope, construit seulement à partir de pièces de LEGO.Version : 11 octobre 2015Introduction et aperçu généralJen au début, j'ai juste eu l'idée de construire un microscope simple et bon marché, à l'aide d'un pi de framboi
Pare-feu de réseau DIY de pièces anciennes.

Pare-feu de réseau DIY de pièces anciennes.

Votre routeur/pare-feu est mort et tous les magasins sont fermés. Que fais-tu? Que fais-tu?  Temps d'aller à l'emplacement de pièces anciennes et ressusciter certaines parties. Une idée unique sur cette configuration, c'est qu'au lieu d'utiliser un d
Fix Adobe Captivate problème de pare-feu Windows 8

Fix Adobe Captivate problème de pare-feu Windows 8

En raison de bugs inconnus, le pare-feu windows invite l'utilisateur à une action lorsqu'Adobe Captivate 8 est ouvert. Le pare-feu pointe vers le répertoire temporaire où les projets sont stockés. Nombre comme autant de temps que l'utilisateur ouvre
Entrer dans le pare-feu Windows w/o Admin

Entrer dans le pare-feu Windows w/o Admin

Bonjour, ce tutoriel vous permet de lire autour dans le lecteur C de votre ordinateur écoles (ou n'importe quel ordinateur vous n'avez pas les privilèges Admin). Désolé pour les pas de photos, mais je vais le faire aussi simple que possible.Étape 1:
Chargeur de smartphone propulsé par feu

Chargeur de smartphone propulsé par feu

Générateur thermoélectrique d'urgence portable, Compact et ajustable.Rappel des faits :La raison de ce projet était de résoudre un problème que j'ai. Je le fais parfois plusieurs jours de randonnée pédestre/randonnée dans la nature, et j'apporte touj
Visualiser son par feu en 3D

Visualiser son par feu en 3D

Après avoir construit un tube de Ruben, j'ai été inspiré par des vidéos d'youtube « Pyroboards » et « Firetables ».  C'était ma tentative de créer le même effet que j'ai vu dans la vidéo. Cette tentative réussit seulement semi- et il connaissait les
Bonjour tout le monde à Raspberry Pi par Seeeduino (port Uart)

Bonjour tout le monde à Raspberry Pi par Seeeduino (port Uart)

Je suis un démarreur de Raspberry Pi et j'ai trouvé que Raspberry Pi n'a pas le port usb qui peut se connecter directement au pc, alors que j'ai ramasser un Seeeduino comme un Uart convertisseur Usb à mastic mon Pi. : pÉtape 1: Jetez un oeil sur la f
Contournement de pare-feu/Proxy Server

Contournement de pare-feu/Proxy Server

beaucoup d'autres étudiants est venu et m'a demandé comment obtenir par les pare-feux et proxys. Les informaticiens à l'école deviennent plus intelligents sur les élèves à l'aide de proxies. J'ai pensé à ce problème depuis un certain temps et j'ai un
Arduino alimenté par feu

Arduino alimenté par feu

prêtSTABLEGO GO GOÉtape 1: feux de circulationFeux de circulation sont très importants pour les routes qu'ils contrôlent le flux du trafic. L'un d'entre eux il est très simple et nous allons le faire!!Étape 2: Collecte de matérielMatériaux nécessaire
Raspberry Pi comme zone de diffusion audio par faible coût

Raspberry Pi comme zone de diffusion audio par faible coût

Cette instructable explique comment étendre votre système audio avec un micro-ordinateur Raspberry Pi à jouer toute la musique locale ou flux audio sur internet (y compris Spotify Premium etc..). La meilleure chose est, que vous n'avez pas besoin d'a
Feu d’artifice commandées par ordinateur

Feu d’artifice commandées par ordinateur

* attention implique explosifs *J'ai été contractés par des amis à faire un feu d'artifice pour leur mariage (l'impression que mon penchant pour pyromanie est bien connu dans ces régions). Il m'a fallu environ 6 mois (pas un manque de compétence... m
Transformer un NFS version 4 (NFSv4) de Raspberry Pi serveur

Transformer un NFS version 4 (NFSv4) de Raspberry Pi serveur

IntroductionNetwork FIle System (NFS) peut exécuter simultanément en version 2, 3, 4. NFS version 4(NFSv4) a plusieurs améliorations par rapport au NFSv2 et NFSv3. Les améliorations que j'aime le plus sont :NFSv4 simplifie la configuration de pare-fe