Pbs de règles iptables ?

Bonjour à tous,

Je suis en train de programmer quelques règles iptables pour ma workstation (wks01) et j’aurais besoin de quelques explications svp car je ne comprends pas pourquoi avec ces deux là :[code]# On autorise les connexions déjà établies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

On autorise les connexions sortantes pop3 sécurisées (port 995)

iptables -A OUTPUT -p tcp --dport 995 -j ACCEPT[/code]et celle-ci, en toute fin du script :# On logue tout ce qui n'a pas matché les règles précédentes, avec l'étiquette "iptables: " et au niveau "Info" iptables -A INPUT -j LOG --log-prefix "iptables: " --log-level 1j’obtiens ces msg :~# tail /var/log/iptables.log ... Jun 24 12:01:20 wks01 kernel: [ 353.722093] iptables: IN=eth0 OUT= MAC=la_MAC_address_de_mon_routeur SRC=188.125.69.234 DST=l'IP_de_wks01 LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=0 DF PROTO=TCP SPT=995 DPT=57621 WINDOW=0 RES=0x00 RST URGP=0 Jun 24 12:01:20 wks01 kernel: [ 353.722093] iptables: IN=eth0 OUT= MAC=la_MAC_address_de_mon_routeur SRC=188.125.69.234 DST=l'IP_de_wks01 LEN=40 TOS=0x00 REC=0x00 TTL=54 ID=0 DF PROTO=TCP SPT=995 DPT=57621 WINDOW=0 RES=0x00 RST URGP=0 Jun 24 12:01:20 wks01 kernel: [ 353.955135] iptables: IN=eth0 OUT= MAC=la_MAC_address_de_mon_routeur SRC=188.125.69.234 DST=l'IP_de_wks01 LEN=40 TOS=0x00 REC=0x00 TTL=54 ID=0 DF PROTO=TCP SPT=995 DPT=57618 WINDOW=0 RES=0x00 RST URGP=0 Jun 24 12:01:20 wks01 kernel: [ 353.955135] iptables: IN=eth0 OUT= MAC=la_MAC_address_de_mon_routeur SRC=188.125.69.234 DST=l'IP_de_wks01 LEN=40 TOS=0x00 REC=0x00 TTL=54 ID=0 DF PROTO=TCP SPT=995 DPT=57618 WINDOW=0 RES=0x00 RST URGP=0 ~#
:question:

Pour info :~$ host 188.125.69.234 234.69.125.188.in-addr.arpa domain name pointer vcs-p-myc.mail.vip.ir2.yahoo.com. ~$et[code]~# iptables -nvL --line-numbers
Chain INPUT (policy DROP 12 packets, 816 bytes)
num pkts bytes target prot opt in out source destination
1 4 200 ACCEPT all – lo * 0.0.0.0/0 0.0.0.0/0
2 8603 4483K ACCEPT all – * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

5 12 816 LOG all – * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 1 prefix `iptables: ’

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 4 200 ACCEPT all – * lo 0.0.0.0/0 0.0.0.0/0

12 858 86793 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:995

~#[/code]
Est-ce que cela veut dire que ce ne sont pas des connexions déjà établies mais des connexions entrantes ?
Et dans ce cas, pourquoi le MTA de yahoo cherche à ouvrir une connexion chez moi ???

Merci d’avance pour vos éclaircissements…

Hello,

Je ne suis pas suffisamment calé pour te répondre, mais voici peut-être de quoi trouver un début de réponse : Iptables Tutorial ?

@+
Eric

Il faut dire que ce n’est pas de la programmation, donc en postant ici les chances de réponse sont réduites. Les personnes intéressées par la programmation mais ne connaissant pas iptables ne sauront te répondre, et les personnes comme moi connaissant iptables mais non intéressées par la programmation, qui ne lisent pas ce forum, ne verront pas ce sujet et ne pourront pas y répondre, sauf hasard, comme moi ici.

Si ces paquets atteignent la règle LOG, c’est que le suivi de connexion de netfilter ne les considère pas comme appartenant ou liés à une connexion existante. Plusieurs observations :

  • Ces paquets proviennent de l’adresse et du port source d’un serveur POP3S, auquel ta machine se connecte, je présume. Ils sont donc certainement la conséquence de tes communications avec ce serveur.
  • Ils contiennent le flag “RST” (reset) qui n’a pas pour fonction d’ouvrir une nouvelle connexion mais au contraire de refuser une demande de connexion ou bien de couper une connexion existante.

Ici, s’il s’agissait d’un rejet de demande de connexion, d’une part le suivi de connexion aurait classé le paquet dans l’état ESTABLISHED (même si cela peut sembler paradoxal, ne pas oublier qu’il s’agit de l’état du paquet et non de la connexion) et la première règle iptables ci-dessus l’aurait accepté ; d’autre part le symptôme visible serait que la connexion au serveur POP3S ne fonctionnerait pas.

Je pense plutôt qu’on est dans la deuxième hypothèse : ce sont des RST envoyés par le serveur bien après que la connexion ait été terminée et donc oubliée par le suivi de connexion, pour s’assurer que la connexion est bien fermée. Bref, le blocage de ces paquets n’a aucune conséquence négative autre que remplir les logs. Cette hyptohèse est renforcée par le fait que deux paquets sont émis vers un même port destination, ce qui ne serait pas le cas pour un refus de connexion.

Pour en savoir plus, il faudrait analyser une capture de tout le traffic sur le port 995.

[quote=“PascalHambourg”]
Il faut dire que ce n’est pas de la programmation[/quote] Je déplace dans SD.

Bonjour !

Si tu souhaites installer manuellement des règles iptables, il faut tout d’abord utiliser un squelette qui loggue les différents paquets. Seuls ces logs t’aideront à voir ce qui ne va pas.

Personnellement, j’utilise ceci comme base :

[code]#!/bin/bash

Si pas de parametre passe derriere l’appel au script, on considere

qu’il faut activer le firewall

PARAM=$1

if [ “x$PARAM” == “x” ]; then
PARAM="on"
fi

Niveau (syslog) pour les logs du firewall

0 Emerg (emergency) ⇒ Systeme inutilisable

1 Alert ⇒ Une intervention immediate est necessaire

2 Crit (critical) ⇒ Erreur critique pour le systeme

3 Err (error) ⇒ Erreur de fonctionnement

4 Warning ⇒ Avertissement

5 Notice ⇒ Evenement normal meritant d’etre signale

6 Info (informational) ⇒ pour information seulement

7 Debug ⇒ Message de mise au point

8 none ⇒ Ignorer ce message

LOGLEVEL=“1”

Doit-on activer le debuggage ?

#DEBUG=“yes”

Interface internet

NETIF=“eth0”

Calcul de l’adresse Ip de $NETIF

NETIP=ip addr show $NETIF | grep "inet " | awk '{print $2}' | awk -F"/" '{print $1}'
LOGIF=echo "$NETIF" | tr '[:lower:]' '[:upper:]'

function Clean() {
# Honteusement pique dans les scripts FWBuilder
echo " - Nettoyage des regles"
cat /proc/net/ip_tables_names | while read table; do
iptables -t $table -L -n | while read c chain rest; do
if test “X$c” == “XChain”; then
iptables -t $table -F $chain
fi
done
iptables -t $table -X
done
cat /proc/net/ip6_tables_names | while read table; do
ip6tables -t $table -L -n | while read c chain rest; do
if test “X$c” == “XChain”; then
ip6tables -t $table -F $chain
fi
done
ip6tables -t $table -X
done
}

function Activate() {
# Script de firewall
echo ""
echo "** Activation du firewall **"
echo “”

# Positionnement de la politique par defaut
# /!\ ON DROPPE TOUT /!\
echo "   - Politique par defaut (DROP)"
iptables  -P INPUT   DROP
iptables  -P FORWARD DROP
iptables  -P OUTPUT  DROP
ip6tables -P INPUT   DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT  DROP

# Nettoyage des regles
Clean;

# Regle pour le debuggage (Loggue tout avant toutes les autres regles)
# Ne pas activer en fonctionnement normal, cela genere beaucoup trop
# de logs.
if [ "$DEBUG" == "yes" ]; then
	echo "   - Debugging"
	iptables -N DEBUG
	iptables -A INPUT -j DEBUG
	iptables -A FORWARD -j DEBUG
	iptables -A OUTPUT -j DEBUG
	iptables -A DEBUG -j LOG --log-level $LOGLEVEL --log-prefix "[DEBUG] "

	ip6tables -N DEBUG
	ip6tables -A INPUT -j DEBUG
	ip6tables -A FORWARD -j DEBUG
	ip6tables -A OUTPUT -j DEBUG
	ip6tables -A DEBUG -j LOG --log-level $LOGLEVEL --log-prefix "[DEBUG] "
fi

# On autorise tout sur l'interface Loopback
echo "   - Loopback"
iptables -N LOOPBACK
iptables -A INPUT  -i lo -j LOOPBACK
iptables -A OUTPUT -o lo -j LOOPBACK
iptables -A LOOPBACK -j ACCEPT

ip6tables -N LOOPBACK
ip6tables -A INPUT  -i lo -j LOOPBACK
ip6tables -A OUTPUT -o lo -j LOOPBACK
ip6tables -A LOOPBACK -j ACCEPT

# Autorise les paquest etablis et relatifs a la connexion en cours
echo "   - Paquets etablis et relatifs"
iptables -N ESTREL
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A ESTREL -j ACCEPT

# loggue et droppe les paquets invalides
echo "   - Paquest invalides"
iptables -N INVALID
iptables -A OUTPUT   -m state --state INVALID  -j INVALID
iptables -A INPUT    -m state --state INVALID  -j INVALID
iptables -A FORWARD  -m state --state INVALID  -j INVALID
iptables -A INVALID -j LOG --log-level $LOGLEVEL --log-prefix "[INVALID] "
iptables -A INVALID -j DROP

#########################################
#                                       #
# Inserer ici vos regles de firewalling #
#                                       #
#########################################



#########################################
#                                       #
#     Fin des regles personnalisees     #
#                                       #
#########################################

echo "   - Dropper"

iptables -N DROPPER
iptables -A DROPPER -j DROP

ip6tables -N DROPPER
ip6tables -A DROPPER -j DROP

iptables -N DRP0.IN
iptables -A INPUT   -i $NETIF -j DRP0.IN
iptables -A DRP0.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER  IN $LOGIF] "
iptables -A DRP0.IN -j DROPPER

iptables -N DRP0.FW
iptables -A FORWARD -i $NETIF -j DRP0.FW
iptables -A DRP0.FW -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER  FW $LOGIF] "
iptables -A DRP0.FW -j DROPPER

iptables -N DRP0.OUT
iptables -A OUTPUT   -o $NETIF -j DRP0.OUT
iptables -A DRP0.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER OUT $LOGIF] "
iptables -A DRP0.OUT -j DROPPER

# Dropper global

iptables -N DRP.IN
iptables -A INPUT  -j DRP.IN
iptables -A DRP.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER    INPUT] "
iptables -A DRP.IN -j DROPPER

iptables -N DRP.FW
iptables -A FORWARD -j DRP.FW
iptables -A DRP.FW  -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER  FORWARD] "
iptables -A DRP.FW  -j DROPPER

iptables -N DRP.OUT
iptables -A OUTPUT  -j DRP.OUT
iptables -A DRP.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER   OUTPUT] "
iptables -A DRP.OUT -j DROPPER

ip6tables -N DRP.IN
ip6tables -A INPUT  -j DRP.IN
ip6tables -A DRP.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER    INPUT] "
ip6tables -A DRP.IN -j DROPPER

ip6tables -N DRP.FW
ip6tables -A FORWARD -j DRP.FW
ip6tables -A DRP.FW  -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER  FORWARD] "
ip6tables -A DRP.FW  -j DROPPER

ip6tables -N DRP.OUT
ip6tables -A OUTPUT  -j DRP.OUT
ip6tables -A DRP.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER   OUTPUT] "
ip6tables -A DRP.OUT -j DROPPER

}

function Desactivate() {
# Script de firewall
echo ""
echo "** Desactivation du firewall **"
echo “”

# Positionnement de la politique par defaut
# /!\ ON ACCEPTE TOUT /!\
echo "   - Politique par defaut (ACCEPT)"
iptables  -P INPUT   ACCEPT
iptables  -P FORWARD ACCEPT
iptables  -P OUTPUT  ACCEPT
ip6tables -P INPUT   ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT  ACCEPT

# Nettoyage des regles
Clean;

}

Gestion des differents appels au script

case $PARAM in
-a|-activate|activate|on|start)
# Activation du firewall
Activate;
;;
-d|-desactivate|desactivate|off|stop)
# Desactivation du firewall
Desactivate;
;;
*)
echo ""
echo "Utilisation : $0 [on|off]"
echo ""
echo " Activation: -a | -activate | activate | on | start"
echo " Desactivation: -d | -desactivate | desactivate | off | stop"
echo “”
;;
esac

echo “”[/code]

Avec cela, tu auras des logs parlants, qui te permettront rapidement de voir ce qui bloque, sur quelle interface et dans quel sens.