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/11/14 21:27] 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 32: Ligne 149:
  
 Voir aussi: ''/etc/sysctl.conf'' Voir aussi: ''/etc/sysctl.conf''
 +
  
 ===== iptables - Sauver / restaurer / Observer ===== ===== iptables - Sauver / restaurer / Observer =====
Ligne 64: 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 202: 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 216: 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 573: Ligne 731:
  
 Donc j'ai de la marge... Donc j'ai de la marge...
 +
  
 ==== Statistique ==== ==== Statistique ====
Ligne 580: 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.1195075660.txt.gz · Dernière modification : 2007/11/14 21:27 de thierry