reseaux_iptables
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
reseaux_iptables [2007/04/08 21:10] – thierry | reseaux_iptables [2010/07/17 11:15] – thierry | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Iptables et ferm ====== | ||
+ | Liens: | ||
+ | *http:// | ||
+ | *http:// | ||
+ | |||
+ | |||
+ | ===== Bases ===== | ||
+ | |||
+ | :!: ne pas oublier de charger , au préalable, le module **'' | ||
+ | |||
+ | |||
+ | ==== commande ==== | ||
+ | |||
+ | On va creer un fichier en composant des regles relativement lisible. | ||
+ | |||
+ | En passant ce fichier a la moulinette de " | ||
+ | |||
+ | Exemple: | ||
+ | # ferm vite_1.conf | ||
+ | |||
+ | Et hop, le firewall est en service ! | ||
+ | |||
+ | On peut ajouter " | ||
+ | |||
+ | Et aussi " | ||
+ | # ferm -n -l vite_1.conf | ||
+ | # Generated by ferm 2.0.3 on Sat Jul 17 13:10:48 2003 | ||
+ | *filter | ||
+ | :FORWARD ACCEPT [0:0] | ||
+ | :INPUT DROP [0:0] | ||
+ | :OUTPUT ACCEPT [0:0] | ||
+ | -A INPUT --match state --state RELATED, | ||
+ | -A INPUT --protocol tcp --dport http --jump ACCEPT | ||
+ | -A INPUT --protocol tcp --dport ftp --jump ACCEPT | ||
+ | -A INPUT --protocol tcp --dport ssh --jump ACCEPT | ||
+ | COMMIT | ||
+ | |||
+ | Et encore, en règles " | ||
+ | # ferm -n -l --slow vite_1.conf | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | Et enfin, l' | ||
+ | # ferm -i vite_1.conf | ||
+ | | ||
+ | ferm has applied the new firewall rules. | ||
+ | Please type ' | ||
+ | |||
+ | Si on ne tape " | ||
+ | |||
+ | ==== simples ==== | ||
+ | |||
+ | === vite_1.conf === | ||
+ | |||
+ | chain INPUT { | ||
+ | policy DROP; | ||
+ | mod state state (RELATED ESTABLISHED) ACCEPT; | ||
+ | proto tcp dport (http ftp ssh) ACCEPT; | ||
+ | } | ||
+ | |||
+ | === vite_1b.conf === | ||
+ | Ajouter simplement: | ||
+ | chain INPUT if lo ACCEPT; | ||
+ | |||
+ | Cela permet d' | ||
+ | |||
+ | === vite_2.conf === | ||
+ | |||
+ | # interface a autoriser | ||
+ | @def $LAN_IF = eth0; | ||
+ | | ||
+ | # Politique par defaut: tout fermer | ||
+ | chain ( INPUT OUTPUT FORWARD ) policy DROP; | ||
+ | | ||
+ | # autoriser l' | ||
+ | chain INPUT if lo ACCEPT; | ||
+ | chain OUTPUT of lo ACCEPT; | ||
+ | | ||
+ | # autoriser quelques entrées | ||
+ | chain INPUT if $LAN_IF { | ||
+ | mod state state NEW { | ||
+ | proto tcp dport ( http ftp ssh ) ACCEPT; | ||
+ | proto udp dport ( openvpn domain ) ACCEPT; | ||
+ | proto icmp icmp-type echo-request ACCEPT; | ||
+ | } | ||
+ | mod state state ( ESTABLISHED RELATED ) ACCEPT; | ||
+ | } | ||
+ | | ||
+ | # autoriser toutes les sorties | ||
+ | chain OUTPUT of $LAN_IF mod state state ( NEW ESTABLISHED RELATED ) ACCEPT; | ||
+ | |||
+ | La partie **"mod state state ( NEW ESTABLISHED RELATED )"** va demander a iptables de faire un suivit (tracking) de toutes les connexions : cela peut poser des problèmes si certains modules ne sont pas chargés. | ||
+ | |||
+ | ==== modules ==== | ||
+ | |||
+ | Lien: http:// | ||
+ | |||
+ | Si vous avez un message comme ça (au boot par exemple): | ||
+ | iptables-save v1.4.2: Unable to open / | ||
+ | |||
+ | C'est parce que le module " | ||
+ | # modprobe ip_tables | ||
+ | |||
+ | Et pour le prochain boot, ajouter dans **''/ | ||
+ | ip_tables | ||
+ | |||
====== iptables ====== | ====== iptables ====== | ||
Ligne 15: | Ligne 129: | ||
[[http:// | [[http:// | ||
+ | |||
+ | |||
===== NetFilter / Iptables ===== | ===== NetFilter / Iptables ===== | ||
Ligne 21: | Ligne 137: | ||
Iptables est la commande permettant de paramétrer le filtre Netfilter du noyau et donc de configurer son firewall. | Iptables est la commande permettant de paramétrer le filtre Netfilter du noyau et donc de configurer son firewall. | ||
+ | |||
===== iptables - Activer le FORWARD : ===== | ===== iptables - Activer le FORWARD : ===== | ||
Ligne 29: | Ligne 146: | ||
# cat / | # cat / | ||
1 | 1 | ||
+ | |||
+ | Voir aussi: ''/ | ||
+ | |||
===== iptables - Sauver / restaurer / Observer ===== | ===== iptables - Sauver / restaurer / Observer ===== | ||
Ligne 61: | Ligne 181: | ||
# tcpdump -Ai eth0 host ! **mon_ip** and port 80 and tcp | # tcpdump -Ai eth0 host ! **mon_ip** and port 80 and tcp | ||
+ | |||
+ | Voir le contenu des paquets: | ||
+ | # tcpdump -X -i eth0 net <ip> | ||
===== sniffer ===== | ===== sniffer ===== | ||
Ligne 199: | Ligne 322: | ||
A partir d'ici, toutes connexions peut être initié vers Internet (WAN), et les communications fonctionnent. Mais d' | A partir d'ici, toutes connexions peut être initié vers Internet (WAN), et les communications fonctionnent. Mais d' | ||
- | ==== Autoriser la connexion à **sshd** : ==== | + | |
+ | ==== Autoriser la connexion à sshd : ==== | ||
# Autoriser a se connecter a sshd depuis l' | # Autoriser a se connecter a sshd depuis l' | ||
Ligne 213: | Ligne 337: | ||
Et ca suffit. | Et ca suffit. | ||
+ | |||
+ | ==== Autoriser SSH, mais pas trop ==== | ||
+ | |||
+ | Une machine exposé sur Internet attire des vilains pirates... Voici comment les décourager d' | ||
+ | |||
+ | Le but, est d' | ||
+ | # -------------------------- | ||
+ | # PRE-LIMIT | ||
+ | # -------------------------- | ||
+ | $IPTABLES -N PRE_LIMIT | ||
+ | $IPTABLES -N PRE_LIMIT_DROP | ||
+ | | ||
+ | # Limiter aux ports SSH | ||
+ | $IPTABLES -A INPUT -p tcp --dport 22 -j PRE_LIMIT | ||
+ | | ||
+ | # ------------------------------------------------------------------------------- | ||
+ | # ---- PRE_LIMIT | ||
+ | # a ne pas appliquer en local | ||
+ | $IPTABLES -A PRE_LIMIT -i $LAN_IF -s 192.168.0.0/ | ||
+ | $IPTABLES -A PRE_LIMIT -i $LAN_IF -s 192.168.1.0/ | ||
+ | # ou au IP de " | ||
+ | $IPTABLES -A PRE_LIMIT -i $WAN_IF -s 222.222.222.0/ | ||
+ | # sinon, pour les autres | ||
+ | $IPTABLES -A PRE_LIMIT -m state --state NEW -m recent --name " | ||
+ | $IPTABLES -A PRE_LIMIT -m state --state NEW -m recent --name " | ||
+ | | ||
+ | # ---- PRE_LIMIT_DROP | ||
+ | $IPTABLES -A PRE_LIMIT_DROP -m limit --limit 3/s -j LOG --log-prefix=' | ||
+ | $IPTABLES -A PRE_LIMIT_DROP -j DROP | ||
+ | # ------------------------------------------------------------------------------- | ||
+ | Attention: *toutes* les interfaces sont filtrées, y compris **'' | ||
+ | $IPTABLES -A INPUT -i lo -j ACCEPT | ||
+ | $IPTABLES -A OUTPUT -o lo -j ACCEPT | ||
+ | Sinon, vous serez privé de **'' | ||
+ | |||
+ | Le module **'' | ||
==== Autoriser le **ping**, mais 1 ping par seconde maximum ! ==== | ==== Autoriser le **ping**, mais 1 ping par seconde maximum ! ==== | ||
Ligne 570: | Ligne 730: | ||
Donc j'ai de la marge... | Donc j'ai de la marge... | ||
+ | |||
==== Statistique ==== | ==== Statistique ==== | ||
Ligne 577: | Ligne 738: | ||
Et voila des stats. | Et voila des stats. | ||
+ | ==== ports dynamiques ==== | ||
+ | Lien: http:// | ||
+ | Pour connaitre les ports utilisés dynamiquement par Linux, il faut faire ca: | ||
+ | cat / | ||
+ | 32768 61000 | ||
+ | Dans un scripte " | ||
+ | LOCALPR=$( cat / | ||
+ | Ce qui donne: '' | ||
+ | Y a surement plus simple ! |
reseaux_iptables.txt · Dernière modification : 2010/07/17 11:16 de thierry