Outils pour utilisateurs

Outils du site


reseaux_iptables

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
reseaux_iptables [2007/04/08 21:10] thierryreseaux_iptables [2010/07/17 11:09] thierry
Ligne 1: Ligne 1:
 +====== Iptables et ferm ======
 +Liens:
 +  *http://ferm.foo-projects.org/download/2.0/ferm.html
 +  *http://linux-attitude.fr/post/firewall-en-2-temps-3-mouvements
 +
 +
 +===== Bases =====
 +
 +:!: ne pas oublier de charger , au préalable, le module **''ip_tables''**.
 +
 +
 +==== commande ====
 +
 +On va creer un fichier en composant des regles relativement lisible.
 +
 +En passant ce fichier a la moulinette de "ferm", il va y avoir creation des commandes iptables.
 +
 +Exemple:
 +  # ferm vite_1.conf
 +
 +==== 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'ouvrir *tout* les services locaux... et par exemple faire:  **''firefox http://localhost:49152 &''**
 +
 +=== vite_2.conf ===
 +
 +  # interface a autoriser
 +  @def $LAN_IF = eth0;
 +  
 +  # Politique par defaut: tout fermer
 +  chain ( INPUT OUTPUT FORWARD ) policy DROP;
 +  
 +  # autoriser l'interface 'lo'
 +  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://www.docunext.com/wiki/Ferm
 +
 +Si vous avez un message comme ça (au boot par exemple):
 +  iptables-save v1.4.2: Unable to open /proc/net/ip_tables_names: No such file or directory
 +
 +C'est parce que le module "ip_tables" n'est pas chargé:
 +  # modprobe ip_tables
 +
 +Et pour le prochain boot, ajouter dans **''/etc/modules''** :
 +  ip_tables
 +
 ====== iptables ====== ====== iptables ======
  
Ligne 15: Ligne 91:
  
 [[http://www.cyberdogtech.com/firewalls/|Firewall]] [[http://www.cyberdogtech.com/firewalls/|Firewall]]
 +
 +
  
 ===== NetFilter / Iptables ===== ===== NetFilter / Iptables =====
Ligne 21: Ligne 99:
  
 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 108:
    # cat /proc/sys/net/ipv4/ip_forward    # cat /proc/sys/net/ipv4/ip_forward
    1    1
 +
 +Voir aussi: ''/etc/sysctl.conf''
 +
  
 ===== iptables - Sauver / restaurer / Observer ===== ===== iptables - Sauver / restaurer / Observer =====
Ligne 61: Ligne 143:
  
    # 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 284:
 A partir d'ici, toutes connexions peut être initié vers Internet (WAN), et les communications fonctionnent. Mais d'Internet, on ne peut pas etablir de connexion puisqu'il n'y aucune règle **NEW** qui l'autorise. A partir d'ici, toutes connexions peut être initié vers Internet (WAN), et les communications fonctionnent. Mais d'Internet, on ne peut pas etablir de connexion puisqu'il n'y aucune règle **NEW** qui l'autorise.
  
-==== Autoriser la connexion à **sshd** : ====+ 
 +==== Autoriser la connexion à sshd : ====
  
    # Autoriser a se connecter a sshd depuis l'exterieur    # Autoriser a se connecter a sshd depuis l'exterieur
Ligne 213: Ligne 299:
  
 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'essayer d'acceder a votre serveur par un port ssh (ou tout autre port ouvert).
 +
 +Le but, est d'empecher plus de 4 connexions par minutes sur le port SSH... sauf pour les IP de confiance bien sur:
 +  # --------------------------
 +  # 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/24 -j RETURN
 +  $IPTABLES -A PRE_LIMIT -i $LAN_IF -s 192.168.1.0/24 -j RETURN
 +  # ou au IP de "confiance"
 +  $IPTABLES -A PRE_LIMIT -i $WAN_IF -s 222.222.222.0/24 -j RETURN
 +  # sinon, pour les autres
 +  $IPTABLES -A PRE_LIMIT -m state --state NEW -m recent --name "pre_limit" --set
 +  $IPTABLES -A PRE_LIMIT -m state --state NEW -m recent --name "pre_limit" --update --seconds 120 --hit
 +  
 +  # ---- PRE_LIMIT_DROP
 +  $IPTABLES -A PRE_LIMIT_DROP -m limit --limit 3/s -j LOG --log-prefix='FW=pre_limit_drop ' --log-level
 +  $IPTABLES -A PRE_LIMIT_DROP -j DROP
 +  # -------------------------------------------------------------------------------
 +Attention: *toutes* les interfaces sont filtrées, y compris **''lo''**. Donc, mettre les règles ci-dessus aprés le classique:
 +  $IPTABLES -A INPUT -i lo -j ACCEPT
 +  $IPTABLES -A OUTPUT -o lo -j ACCEPT
 +Sinon, vous serez privé de **''ssh 0''** par exemple... ;-)
 +
 +Le module **''recent''** se base sur l'IP source ( et pas le module **''limit''** ).
  
 ==== Autoriser le **ping**, mais 1 ping par seconde maximum ! ==== ==== Autoriser le **ping**, mais 1 ping par seconde maximum ! ====
Ligne 570: Ligne 692:
  
 Donc j'ai de la marge... Donc j'ai de la marge...
 +
  
 ==== Statistique ==== ==== Statistique ====
Ligne 577: Ligne 700:
 Et voila des stats. Et voila des stats.
  
 +==== ports dynamiques ====
 +Lien: http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
  
 +Pour connaitre les ports utilisés dynamiquement par Linux, il faut faire ca:
 +  cat /proc/sys/net/ipv4/ip_local_port_range
 +  32768   61000
 +Dans un scripte "iptables", j'ai fait ça pour obtenir un parametre "--dport" ou "--sport" compatible:
 +  LOCALPR=$( cat /proc/sys/net/ipv4/ip_local_port_range | awk '{ print $1":"$2 }' )
 +Ce qui donne: ''LOCALPR=32768:61000'' \\
 +Y a surement plus simple !
reseaux_iptables.txt · Dernière modification : 2010/07/17 11:16 de thierry