Mise en place d'un environnement sécurisé personnalisé

Bonjour,

J’ai déjà un firewall qui tourne mais j’aimerais avoir plus d’infos et modifier ce que j’ai déjà en place. Actuellement la politique est de tout laisser sortir et de n’accepter en entrée que ce que je souhaite et les connexions déjà établies.

[code]iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F

Règles par défault

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

Autorisation de loopback (logique)

iptables -t filter -A INPUT -i lo -j ACCEPT

Autorisation des connections déjà établies

iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT[/code]

La nouvelle politique que je souhaite mettre en place est beaucoup plus restrictive. D’ailleurs un environnement de test sera mis en place afin de valider tout cela :wink: (vm avec test extérieur :wink:)

Donc pour exposer le problème je souhaite configurer le firewall d’un portable qui me sert tous les jours ce n’est donc pas un usage professionnel mais pas loin. Sur cet ordi je ne fais pas grands choses consultation web, consultation et envois de mail, ssh.
La politique que je souhaite mettre en place est je pense assez précise :

  • Drop de tous les paquets en entrée.
  • Drop de tous les paquets en sortie.
  • Autorisation de sortie pour les services que j’utilise ssh, http, imap, smtp

Pour le imap et smtp j’ai encore quelques informations à aller rechercher.
Sinon toutes les partitions du disque dur seront cryptées.

Avez-vous des remarques concernant une mise en place d’une telle architecture ? Que dois-je rajouter ou supprimer afin d’avoir un poste le plus sécurisé possible dont aucune information ne puisse s’échapper non cryptée. Ceci peut paraître de la paranoïa et cela en est mais juste pour quelques tests :wink: Quels formats de partition est conseillé dans ce cas là ? Une fois que j’aurais mes réponses j’ouvrirais différents posts concernant la mise en place de cette architecture là je ne fais que recueillir des informations sur la faisabilité.

Merci

Je répondrai juste pour la politique d’iptables, oui c’est faisable puisque je l’utilise comme ça.

[code]#

tout droper par defaut

/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP

accepter en entree les communications avec l’interface boucle (lo), le ping (icmp) et les

connections deja etablies

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p icmp -j ACCEPT
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

accepter en sortie :

-les connections deja etablies

-le TCP 80 : HTTP

-le TCP 443 : HTTPS

-le UDP 53 : DNS

-le TCP 21 : FTP

-le UDP 123 : NTP

-le TCP 6667 : IRC

/sbin/iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 6667 -j ACCEPT[/code]

Bon il y a aussi des infos ici sur le cryptage des différentes partitions :

viewtopic.php?f=8&t=5281

Merci pour ta réaction seb-ksl :wink:

Attention, mur de texte (et non pas de feu…) droit devant. Accrochez vos ceintures, moi-même j’ai du mal à me suivre.

C’est assez chaud de configurer correctement un firewall. Malheureusement il ne suffit pas de tout fermer puis de rouvrir les vannes une par une.

Rien que la bête règle -A INPUT -m state --state ESTABLISHED (sans RELATED) a besoin de filtrage en amont pour éliminer les paquets TCP impossibles (cf. mon sujet sur les --tcp-flags pour la liste, à priori complète, des règles).

Il faut éliminer la plupart des paquets ICMP en entrée (vecteurs d’attaque), notamment le fameux Ping of Death qu’il faut traiter avant tous les autres (-A INPUT -j DROP -p icmp --fragment). Ensuite, n’autoriser que :
-A INPUT -j ACCEPT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED
-A INPUT -j ACCEPT -p icmp --icmp-type time-exceeded
-A INPUT -j ACCEPT -p icmp --icmp-type fragmentation-needed

Tous les autres ICMP sont au mieux inutiles, au pire très dangereux pour la santé de tes connexions.

Les accès DNS en entrée et sortie devraient être bridés aux seules IPs statiques que tu auras renseignées dans /etc/resolv.conf. Surtout pas de DHCP, c’est un nid à emm… niveau sécurité.

Si ta machine est un pur client (aucun service exposé), il ne te reste plus qu’à gérer 2 types d’attaques TCP, assez vicieuses il faut dire :

[ul][li] Reset des connections TCP par prédiction du n° de séquence (paquets RST) => pas grand chose à faire mis à part limiter leur nombre artificiellement, ce qui a pour conséquence de rendre le n° de séquence plus difficile (mais pas impossible) à prédire :
-A INPUT -j ACCEPT -p tcp --tcp-flags RST RST -m limit --limit 5/second --limit-burst 5
(et encore, 5/seconde c’est énorme pour un poste client, là ça vient direct d’un serveur)[/li][/ul]

[ul][li] Des fois, ignorer certains paquets et ne pas y répondre n’est pas le meilleur moyen de se protéger. C’est le cas des paquets SYN+ACK que conntrack marque comme –state NEW, qui signifient qu’un attaquant spoofe ton IP pour attaquer sa victime. Et la victime te fera porter le chapeau, bien entendu puisqu’il s’agit de ton IP (c’est pas pour rien qu’elle te “répond”, hein). La solution c’est de lui envoyer un RST pour couper court à la connexion :
-A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

Problème, c’est la porte ouverte aux attaques de type Smurf (avec ou sans broadcast, ça reste le même principe) où l’attaquant va spoofer l’IP de sa victime et t’envoyer un flot de SYN+ACK pour qu’à ton tour tu la bombardes de RST, et retour au point de départ c’est toi le méchant. Il faut donc limiter le débit de la règle précédente (-m limit ou mieux, -m recent pour réguler en fonction de la source), et dropper les paquets (nombreux, en cas d’attaque) qui dépassent la limitation :
-A INPUT -j DROP -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -m recent --name SPOOF-SYN-ACK --rcheck --seconds 10
-A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -m recent --name SPOOF-SYN-ACK --set
-A INPUT -j REJECT --reject-with tcp-reset -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW

(encore une fois, 1 paquet par 10 secondes c’est énorme pour un poste client, surtout qu’avec -m recent ça concerne une victime donnée et non plus l’ensemble de tes connexions)[/li][/ul]

Bon, ça c’est la base si tu n’as strictement aucun port d’ouvert, je ne crois pas avoir oublié quoi que ce soit d’important. Ah si, il faut aussi dropper systématiquement les paquets en provenance de réseaux privés autres que le tien, ou de plages d’IP non allouées (les “bogons”).

Maintenant, si tu ouvres ne serait-ce qu’un seul port TCP pour exposer un service (SSH, HTTP, …) ou que tu acceptes les –state RELATED en entrée (ce qui revient au même que d’ouvrir un port), ça devient un poil plus compliqué. Il faut un minimum de boulot pour atténuer les attaques SYN flood et éviter que trop de SYN ne remontent jusqu’au kernel (et donc remplissent ton backlog). Il faut aussi gérer la fameuse bizarrerie (on me soutient que ce n’est pas un bug mais une fonctionnalité…) “NEW not SYN” de netfilter. Le tout dans le bon ordre, sinon ton firewall reste une passoire.

Et j’oublie sûrement plein de trucs étranges dont je n’ai jamais entendu parler ou que j’ai tout bonnement zappé.

Pfiou. Cela dit je suis pas mécontent, de l’expliquer par écrit ça m’a permis de faire un peu le tri dans ma tête, c’est une galère monstrueuse ces histoires.

(ça se voit tant que ça que j’ai passé une bonne partie de ma semaine à bosser justement sur ce sujet là ? :mrgreen: :mrgreen: :mrgreen:)

Edit: ah oui, et tu recommences pour l’IPv6, avec des règles différentes. Du coup, moi j’ai désactivé l’IPv6 pour le moment, on verra ça plus tard, c’est assez le bazar comme ça je trouve.

Eh beh, sans background important en informatique c’est indécryptable ton paragraphe. Je crois que je vais en rester au stade “passoire” pour le moment, sûrement jusqu’à la fin de ma vie même.
De toute façon, je suis toujours parti du principe que si quelqu’un voulait entrer dans ma machine il le pouvait, quoi que je fasse. Si je cherche vraiment la sécurité je travaille sur un PC non-connecté.

Ouais, mon pavé a réussi à déconnecter quelqu’un d’internet ! :smt005

Non, plus sérieusement… il y a une semaine une bonne partie de tout ça c’était du chinois pour moi. Mais après avoir bouffé des kilomètres de doc et quelques tonnes de pages web, maintenant c’est “seulement” du roumain.
Bref, je comprends juste la logique derrière (3 way handshake : SYN => SYN+ACK => je sais plus quoi, et autres trucs de “base” en réseaux) et surtout les failles de sécurité qui en découlent. Mais passé ça, ne compte pas sur moi pour te dire à quoi correspond tel ou tel type de paquet (si même tu le voulais).

Bon ok j’ai pas encore tout saisi mais ça me parait déjà assez clair il faut encore pas mal de boulot de filtrage et effectivement cela se voit que tu as bien bosser dessus je t’en remercie bien d’ailleurs

Bon pour me répondre aussi sur le cryptage de partition j’ai trouvé cela
drakonix.fr/?id=3&page=20

Maintenant pour en revenir aux règles iptables pourrais-tu détailler un petit plus histoire que cela soit un peu plus clair car c’est un peu confus quand même pas mal de notions dont tu parles ne me sont pas familière je comprend le principe mais bon un surplus d’infos ne serait pas de refus ne serait-ce que pour autrui :wink:

Et si tu as le temps faire un petit tutos sur le sujet ou compléter celui déjà existant serait pas mal :wink:

Qu’est-ce qui ne te paraît pas clair ? Parce que bon, je peux expliquer des points en fonction de tes questions, mais honnêtement faire un topo complet là tout de suite maintenant, c’est un peu au dessus de mes forces (j’ai déjà mis un saaacréééé moment à rédiger mon pavé, qui pourtant est très synthétique).

Je crois que je dois encore mettre de l’ordre dans tout ça avant de pouvoir en faire un tuto… :wink:

salut
hé les petit joueur :laughing:

linux-france.org/prj/inetdoc … -tutorial/

enjoy :smt002

sinon filtrer ce qui sort du coter de root empeche le contrôle de root et donc des emm. seulement certain service ne son pas identifier , le tout avec le module linux-france.org/prj/inetdoc … ownermatch

ce module ne semble plus évoluer je vai finir par faire le mien :stuck_out_tongue:

[quote=“panthere”]http://www.linux-france.org/prj/inetdoc/guides/iptables-tutorial/

enjoy :smt002[/quote]

C’est marrant que tu cites ce doc, vu que je l’ai énormément utilisé pour comprendre de quoi il retourne (et accessoirement, piocher quelques règles intéressantes dedans).
Sauf que je savais pas qu’il était traduit en français… :slightly_smiling:
frozentux.net/iptables-tutor … orial.html

Par contre ce n’est pas un tuto “firewall” mais bien “iptables”, juste un exemple : c’est là que j’ai trouvé l’info sur les NEW SYN+ACK (et sur les NEW not SYN aussi, au passage) mais l’auteur ne prend aucune mesure pour limiter le flot de RST dans le cas où l’attaquant décide de retourner cette fonctionnalité contre nous.

Autrement dit, un très bon manuel de référence pour savoir utiliser iptables, avec des exemples intéressants et utiles, mais loin d’être suffisant pour monter un firewall complet en mode “parano”. Le plus gros du boulot reste quand même de comprendre les failles du protocole IP et comment les rendre inexploitables sans casser la connectivité.

Merci pour les infos concernant iptables je vais avoir pas mal de lectures ces prochaines semaines.

Sinon mis à part cela je cherche des informations sur le cryptages des partitions j’ai déjà trouvé 2 sources en avez-vous d’autres ?

C’est loin d’être fini, mais je vous livre mes règles iptables actuelles, brutes de fonderie (désolé, pas de commentaires, faudra faire le tri vous-mêmes pour le moment). Mais ça peut quand même servir.

Ce qu’on ne voit pas vraiment ici, c’est que c’est généré par un ensemble de scripts plus improbables les uns que les autres, et qu’une fois le firewall en place je peux (pourrai) ajouter/supprimer des services particuliers (ie. des règles iptables) avec une bête commande du genre :fw-service add tcp4 3306 @192.168.1.100
Pour le moment l’ensemble de scripts est encore hyper instable (c’est le moins qu’on puisse dire) donc je préfère bosser encore dessus avant de le publier. Le but est de rendre tout ça entièrement configurable (c’est déjà bien parti à ce niveau là), d’ajouter la gestion IPv6 (ouch), gestion d’IPs multiples couplée à ifconfig, etc etc (le tout à chaud bien sûr, hors de question de recharger l’ensemble des règles à chaque petit changement). Y’a plein d’autres goodies (mode panique qui interdit toute autre connexion que la session SSH qui en a fait la demande, etc) mais ça reste à fignoler.

Quelques remarques :

  • le bazar avec LOGDROP-LIMITER et toutes les chaînes LOGDROP-* permet d’une part de limiter globalement (par IP et toutes IPs confondues) la vitesse de remplissage des logs, et d’autre part d’avoir quand même des préfixes différents pour chaque type de problème (et, bien sûr, possibilité de désactiver les logs pour un type donné si besoin est)
  • accessoirement, j’utilise ulogd et non pas syslog, ça permet d’avoir un log propre et bien séparé sans bidouillages crado
  • le tout, comme je le disais, avec une syntaxe vachement plus attrayante (et simplifiée) que les règles iptables de base

Bref, sans plus attendre, le dump de mon usine à gaz…
Enjoy.

[code]*filter

init/flush-rules IN=DROP OUT=ACCEPT FWD=DROP

-P INPUT DROP
-P OUTPUT ACCEPT
-P FORWARD DROP
-F
-X

init/logdrop (limit 10/10 pkt/sec/source && 10/second burst 100)

-N “LOGDROP-LIMITER”
-A “LOGDROP-LIMITER” -j DROP -m recent --name “LOGDROP-LIMITER” --rcheck --seconds 10 --hitcount 10
-A “LOGDROP-LIMITER” -m recent --name “LOGDROP-LIMITER” --set
-A “LOGDROP-LIMITER” -j RETURN -m limit --limit 10/second --limit-burst 100
-A “LOGDROP-LIMITER” -j DROP

blacklist/init

-N “BLACKLIST”

custom-logdrop LOGDROP-BLACKLIST

-N “LOGDROP-BLACKLIST”
-A “LOGDROP-BLACKLIST” -j “LOGDROP-LIMITER”
-A “LOGDROP-BLACKLIST” -j ULOG --ulog-nlgroup 1 --ulog-prefix "BLACKLIST: "
-A “LOGDROP-BLACKLIST” -j DROP

custom-logdrop LOGDROP-UNMATCHED

-N “LOGDROP-UNMATCHED”
-A “LOGDROP-UNMATCHED” -j “LOGDROP-LIMITER”
-A “LOGDROP-UNMATCHED” -j ULOG --ulog-nlgroup 1 --ulog-prefix "UNMATCHED: "
-A “LOGDROP-UNMATCHED” -j DROP

loopback/accept @INPUT

-A “INPUT” -j ACCEPT -i lo

custom-logdrop LOGDROP-LOCALHOST

-N “LOGDROP-LOCALHOST”
-A “LOGDROP-LOCALHOST” -j “LOGDROP-LIMITER”
-A “LOGDROP-LOCALHOST” -j ULOG --ulog-nlgroup 1 --ulog-prefix "LOCALHOST: "
-A “LOGDROP-LOCALHOST” -j DROP

ipv4/loopback/block-spoofed @INPUT >LOGDROP-LOCALHOST

-A “INPUT” -j “LOGDROP-LOCALHOST” -s 127.0.0.0/8 ! -i lo
-A “INPUT” -j “LOGDROP-LOCALHOST” -d 127.0.0.0/8 ! -i lo

custom-logdrop LOGDROP-INVALID

-N “LOGDROP-INVALID”
-A “LOGDROP-INVALID” -j “LOGDROP-LIMITER”
-A “LOGDROP-INVALID” -j ULOG --ulog-nlgroup 1 --ulog-prefix "INVALID: "
-A “LOGDROP-INVALID” -j DROP

state/block INVALID @INPUT >LOGDROP-INVALID

-A “INPUT” -j “LOGDROP-INVALID” -m state --state INVALID

create-jump @INPUT >TCP -p tcp

-N “TCP”
-A “INPUT” -p tcp -j “TCP”

create-jump @INPUT >UDP -p udp

-N “UDP”
-A “INPUT” -p udp -j “UDP”

create-jump @INPUT >ICMP -p icmp

-N “ICMP”
-A “INPUT” -p icmp -j “ICMP”

custom-logdrop LOGDROP-ALIENPROTOCOL

-N “LOGDROP-ALIENPROTOCOL”
-A “LOGDROP-ALIENPROTOCOL” -j “LOGDROP-LIMITER”
-A “LOGDROP-ALIENPROTOCOL” -j ULOG --ulog-nlgroup 1 --ulog-prefix "ALIEN PROTOCOL: "
-A “LOGDROP-ALIENPROTOCOL” -j DROP

block-unmatched @INPUT >LOGDROP-ALIENPROTOCOL

-A “INPUT” -j “LOGDROP-ALIENPROTOCOL”

custom-logdrop LOGDROP-MALFORMED

-N “LOGDROP-MALFORMED”
-A “LOGDROP-MALFORMED” -j “LOGDROP-LIMITER”
-A “LOGDROP-MALFORMED” -j ULOG --ulog-nlgroup 1 --ulog-prefix "MALFORMED: "
-A “LOGDROP-MALFORMED” -j DROP

ipv4/tcp/block-malformed @TCP >LOGDROP-MALFORMED

-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags ACK,FIN FIN
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags ACK,PSH PSH
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags ACK,URG URG
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags SYN,FIN SYN,FIN
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags SYN,RST SYN,RST
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags FIN,RST FIN,RST
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags ALL NONE
-A “TCP” -j “LOGDROP-MALFORMED” -p tcp --tcp-flags ALL ALL

custom-logdrop LOGDROP-RSTFLOOD

-N “LOGDROP-RSTFLOOD”
-A “LOGDROP-RSTFLOOD” -j “LOGDROP-LIMITER”
-A “LOGDROP-RSTFLOOD” -j ULOG --ulog-nlgroup 1 --ulog-prefix "RST FLOOD: "
-A “LOGDROP-RSTFLOOD” -j DROP

ipv4/tcp/throttle-rst-flood @TCP >LOGDROP-RSTFLOOD (limit 2/1 pkt/sec/source && 50/second burst 100)

-N “TCP-RSTFLOOD”
-A “TCP” -p tcp --tcp-flags RST RST -j “TCP-RSTFLOOD”
-A “TCP-RSTFLOOD” -j “LOGDROP-RSTFLOOD” -m recent --name “TCP-RSTFLOOD” --rcheck --seconds 1 --hitcount 2
-A “TCP-RSTFLOOD” -m recent --name “TCP-RSTFLOOD” --set
-A “TCP-RSTFLOOD” -j ACCEPT -m limit --limit 50/second --limit-burst 100
-A “TCP-RSTFLOOD” -j “LOGDROP-RSTFLOOD”

state/accept ESTABLISHED @TCP

-A “TCP” -j ACCEPT -m state --state ESTABLISHED

custom-logdrop LOGDROP-NOTNEW

-N “LOGDROP-NOTNEW”
-A “LOGDROP-NOTNEW” -j “LOGDROP-LIMITER”
-A “LOGDROP-NOTNEW” -j ULOG --ulog-nlgroup 1 --ulog-prefix "NOT NEW: "
-A “LOGDROP-NOTNEW” -j DROP

state/enforce NEW @TCP >LOGDROP-NOTNEW

-A “TCP” -j “LOGDROP-NOTNEW” -m state ! --state NEW

custom-logdrop LOGDROP-NEW-SYNACK

-N “LOGDROP-NEW-SYNACK”
-A “LOGDROP-NEW-SYNACK” -j “LOGDROP-LIMITER”
-A “LOGDROP-NEW-SYNACK” -j ULOG --ulog-nlgroup 1 --ulog-prefix "NEW SYN+ACK: "
-A “LOGDROP-NEW-SYNACK” -j DROP

ipv4/tcp/new/throttle-syn-ack-rst @TCP >LOGDROP-NEW-SYNACK (limit 1/1 pkt/sec/source)

-N “TCP-NEW-SYNACK”
-A “TCP” -p tcp --tcp-flags SYN,ACK SYN,ACK -j “TCP-NEW-SYNACK”
-A “TCP-NEW-SYNACK” -j “LOGDROP-NEW-SYNACK” -m recent --name “TCP-NEW-SYNACK” --rcheck --seconds 1 --hitcount 1
-A “TCP-NEW-SYNACK” -m recent --name “TCP-NEW-SYNACK” --set
-A “TCP-NEW-SYNACK” -j REJECT --reject-with tcp-reset -p tcp

custom-logdrop LOGDROP-NEW-NOTSYN

-N “LOGDROP-NEW-NOTSYN”
-A “LOGDROP-NEW-NOTSYN” -j “LOGDROP-LIMITER”
-A “LOGDROP-NEW-NOTSYN” -j ULOG --ulog-nlgroup 1 --ulog-prefix "NEW NOT SYN: "
-A “LOGDROP-NEW-NOTSYN” -j DROP

ipv4/tcp/new/block-not-syn @TCP >LOGDROP-NEW-NOTSYN

-A “TCP” -j “LOGDROP-NEW-NOTSYN” -p tcp ! --syn

custom-logdrop LOGDROP-SYNFLOOD

-N “LOGDROP-SYNFLOOD”
-A “LOGDROP-SYNFLOOD” -j “LOGDROP-LIMITER”
-A “LOGDROP-SYNFLOOD” -j ULOG --ulog-nlgroup 1 --ulog-prefix "SYN FLOOD: "
-A “LOGDROP-SYNFLOOD” -j DROP

ipv4/tcp/new/throttle-syn-flood @TCP >LOGDROP-SYNFLOOD (limit 20/1 pkt/sec/source)

-A “TCP” -j “LOGDROP-SYNFLOOD” -m recent --name “TCP-SYNFLOOD” --rcheck --seconds 1 --hitcount 20
-A “TCP” -m recent --name “TCP-SYNFLOOD” --set

blacklist/enforce @TCP

-A “TCP” -j “BLACKLIST”

tcp/ssh-service @TCP

-A “TCP” -j ACCEPT -p tcp --dport 22

tcp/services @TCP

-N “TCP-SERVICES”
-A “TCP” -j “TCP-SERVICES”

block-unmatched @TCP >LOGDROP-UNMATCHED

-A “TCP” -j “LOGDROP-UNMATCHED”

udp/ntp-replies @UDP

-A “UDP” -j ACCEPT -p udp --sport 123 --dport 123 -m state --state ESTABLISHED

udp/dns-replies @UDP

-A “UDP” -j ACCEPT -p udp --sport 53 -m state --state ESTABLISHED

blacklist/enforce @UDP

-A “UDP” -j “BLACKLIST”

udp/services @UDP

-N “UDP-SERVICES”
-A “UDP” -j “UDP-SERVICES”

block-unmatched @UDP >LOGDROP-UNMATCHED

-A “UDP” -j “LOGDROP-UNMATCHED”

custom-logdrop LOGDROP-ICMPFRAG

-N “LOGDROP-ICMPFRAG”
-A “LOGDROP-ICMPFRAG” -j “LOGDROP-LIMITER”
-A “LOGDROP-ICMPFRAG” -j ULOG --ulog-nlgroup 1 --ulog-prefix "ICMP FRAGMENT: "
-A “LOGDROP-ICMPFRAG” -j DROP

ipv4/icmp/block-fragments @ICMP >LOGDROP-ICMPFRAG

-A “ICMP” -j “LOGDROP-ICMPFRAG” -p icmp --fragment

icmp/ping-replies @ICMP

-A “ICMP” -j ACCEPT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED

ipv4/icmp/required-replies @ICMP

-A “ICMP” -j ACCEPT -p icmp --icmp-type time-exceeded -m state --state RELATED
-A “ICMP” -j ACCEPT -p icmp --icmp-type fragmentation-needed -m state --state RELATED

ipv4/icmp/additional-replies @ICMP

-A “ICMP” -j ACCEPT -p icmp --icmp-type network-unreachable -m state --state RELATED
-A “ICMP” -j ACCEPT -p icmp --icmp-type host-unreachable -m state --state RELATED

icmp/ping-whitelist/init

-N “ICMP-PING-WHITELIST”

icmp/ping-whitelist/enforce @ICMP

-A “ICMP” -p icmp --icmp-type echo-request -j “ICMP-PING-WHITELIST”

blacklist/enforce @ICMP

-A “ICMP” -j “BLACKLIST”

custom-logdrop LOGDROP-PINGFLOOD

-N “LOGDROP-PINGFLOOD”
-A “LOGDROP-PINGFLOOD” -j “LOGDROP-LIMITER”
-A “LOGDROP-PINGFLOOD” -j ULOG --ulog-nlgroup 1 --ulog-prefix "PING FLOOD: "
-A “LOGDROP-PINGFLOOD” -j DROP

icmp/block-ping-flood @ICMP >LOGDROP-PINGFLOOD (limit 3/2 pkt/sec/source)

-A “ICMP” -j “LOGDROP-PINGFLOOD” -p icmp --icmp-type echo-request -m recent --name “ICMP-PING-FLOOD” --rcheck --seconds 2 --hitcount 3
-A “ICMP” -p icmp --icmp-type echo-request -m recent --name “ICMP-PING-FLOOD” --set

custom-logdrop LOGDROP-DPINGFLOOD

-N “LOGDROP-DPINGFLOOD”
-A “LOGDROP-DPINGFLOOD” -j “LOGDROP-LIMITER”
-A “LOGDROP-DPINGFLOOD” -j ULOG --ulog-nlgroup 1 --ulog-prefix "DISTRIBUTED PING FLOOD: "
-A “LOGDROP-DPINGFLOOD” -j DROP

icmp/throttle-ping @ICMP >LOGDROP-DPINGFLOOD (limit 100/second burst 150)

-A “ICMP” -j ACCEPT -p icmp --icmp-type echo-request -m limit --limit 100/second --limit-burst 150
-A “ICMP” -j “LOGDROP-DPINGFLOOD” -p icmp --icmp-type echo-request

block-unmatched @ICMP >LOGDROP-UNMATCHED

-A “ICMP” -j “LOGDROP-UNMATCHED”

tout le reste peut s’effectuer dynamiquement une fois le firewall en place

blacklist/reload

-F “BLACKLIST”
-A “BLACKLIST” -j “LOGDROP-BLACKLIST” -s <méchant-pas-beau>
-A “BLACKLIST” -j “LOGDROP-BLACKLIST” -s

tcp/services-reload

-F “TCP-SERVICES”
-A “TCP-SERVICES” -j ACCEPT -p tcp --dport 80
-A “TCP-SERVICES” -p tcp --dport 443

fw-service add tcp4 3306 @

-A “TCP-SERVICES” -p tcp --dport 3306 -s

udp/services-reload

-F “UDP-SERVICES”
-A “UDP-SERVICES” -j ACCEPT -p udp --dport <j’ai-pas-de-service-udp-mais-vous-avez-compris-le-principe>

icmp/ping-whitelist/reload

-F “ICMP-PING-WHITELIST”
-A “ICMP-PING-WHITELIST” -j ACCEPT -s
-A “ICMP-PING-WHITELIST” -j ACCEPT -s

COMMIT[/code]