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
reseaux_iptables [2007/04/08 21:10] thierryreseaux_iptables [2010/07/17 11:16] (Version actuelle) 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
 +
 +Et hop, le firewall est en service !
 +
 +On peut ajouter "-n" pour ne pas appliquer les regles immediatement!
 +
 +Et aussi "-l" pour voir ce qui est fait:
 +  # 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,ESTABLISHED --jump ACCEPT
 +  -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 "iptables" plus classique, en ajoutant **''--slow''** :
 +  # ferm -n -l --slow vite_1.conf
 +  /sbin/iptables -t filter -P FORWARD ACCEPT
 +  /sbin/iptables -t filter -P INPUT ACCEPT
 +  /sbin/iptables -t filter -P OUTPUT ACCEPT
 +  /sbin/iptables -t filter -F
 +  /sbin/iptables -t filter -X
 +  /sbin/iptables -t filter -P INPUT DROP
 +  /sbin/iptables -t filter -A INPUT --match state --state RELATED,ESTABLISHED --jump ACCEPT
 +  /sbin/iptables -t filter -A INPUT --protocol tcp --dport http --jump ACCEPT
 +  /sbin/iptables -t filter -A INPUT --protocol tcp --dport ftp --jump ACCEPT
 +  /sbin/iptables -t filter -A INPUT --protocol tcp --dport ssh --jump ACCEPT
 +
 +Et enfin, l'option **''-i''** afin d'être sur de ne pas faire de betise ! 
 +  # ferm -i vite_1.conf
 +  
 +  ferm has applied the new firewall rules.
 +  Please type 'yes' to confirm:
 +
 +Si on ne tape "yes" dans les 30 secondes, ferm remet en place les règles précédentes.
 +
 +==== 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 130:
  
 [[http://www.cyberdogtech.com/firewalls/|Firewall]] [[http://www.cyberdogtech.com/firewalls/|Firewall]]
 +
 +
  
 ===== NetFilter / Iptables ===== ===== NetFilter / Iptables =====
Ligne 21: Ligne 138:
  
 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 147:
    # 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 182:
  
    # 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 323:
 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 338:
  
 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 731:
  
 Donc j'ai de la marge... Donc j'ai de la marge...
 +
  
 ==== Statistique ==== ==== Statistique ====
Ligne 577: Ligne 739:
 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.1176066613.txt.gz · Dernière modification : 2007/04/08 21:10 de thierry