Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Iptables, ssh, web et lucane
Envoyé par: TNorth

Hello !

Est-ce que cette config iptables est correcte pour un serveur qui :
- laisse passer le port 22 pour tous
- laisse le port 80 de la même manière, ainsi que le 9115 (lucane.org)
- laisse le traffic du réseau local 192.168.0.x (la passerelle vers le web est en 192.168.0.1)

Citation

#on vire tout
iptables -X
iptables -F
#on remet tout en place
iptables -A INPUT -s 127.0.0.0/255.0.0.0 -d 127.0.0.0/255.0.0.0 -i lo -j ACCEPT
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -d 192.168.0.0/255.255.255.0 -i eth0 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 9115 -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
iptables -A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
iptables -A OUTPUT -s 127.0.0.0/255.0.0.0 -d 127.0.0.0/255.0.0.0 -o lo -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/255.255.255.0 -d 192.168.0.0/255.255.255.0 -o eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT

Ou y a-t-il des trous ?
Merci !!

Poste le Wednesday 5 January 2005 14:16:50
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Ahh il doit manquer :
Citation

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 9115 -j ACCEPT

Poste le Wednesday 5 January 2005 14:17:45
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: Perramus

Salut,

Où sont tes politiques par défaut ? si tu les as laissées sur ACCEPT, alors oui, il y a des trous... il y a même un peu de mur dans un trou ( dsl ce soir je suis facécieux yawning smiley) )...

Poste le Wednesday 5 January 2005 19:42:09
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: deb


Bonsoir Tnorth,

je te donne mon firewall en vrac :

# flush all rules and delete any optional rules
$IPTABLE -t filter -F
$IPTABLE -t filter -X
$IPTABLE -t nat -F
$IPTABLE -t nat -X
$IPTABLE -t mangle -F
$IPTABLE -t mangle -X

# filter default policy
$IPTABLE -t filter -P INPUT DROP
$IPTABLE -t filter -P OUTPUT DROP
$IPTABLE -t filter -P FORWARD DROP

# nat default policy
$IPTABLE -t nat -P PREROUTING ACCEPT
$IPTABLE -t nat -P OUTPUT ACCEPT
$IPTABLE -t nat -P POSTROUTING ACCEPT

# mangle default policy
$IPTABLE -t mangle -P INPUT ACCEPT
$IPTABLE -t mangle -P OUTPUT ACCEPT
$IPTABLE -t mangle -P FORWARD ACCEPT
$IPTABLE -t mangle -P PREROUTING ACCEPT
$IPTABLE -t mangle -P POSTROUTING ACCEPT

# quelques règles de log
$IPTABLE -t filter -A INPUT -i eth0 -p tcp -m state \
--state INVALID -j ULOG --ulog-prefix "INVALID_TCP : "
$IPTABLE -t filter -A INPUT -i eth0 -p icmp -m state --state
NEW,INVALID -j ULOG --ulog-prefix "PING_REQUEST : "
$IPTABLE -t filter -A INPUT -i eth0 -p tcp --syn --dport 22 \
-j ULOG --ulog-prefix "SSH_REQUEST : "

# accepte tout sur l'interface locale (loopback)
$IPTABLE -t filter -A INPUT -i lo -s $WEB -d $WEB -j ACCEPT
$IPTABLE -t filter -A OUTPUT -o lo -s $WEB -d $WEB -j ACCEPT

# accepte tout sur réseau local (eth1)
$IPTABLE -t filter -A INPUT -i eth1 -s $NETADDR1/$NETMASK1 \
-d $NETADDR1/$NETMASK1 -j ACCEPT
$IPTABLE -t filter -A OUTPUT -o eth1 -s $NETADDR1/$NETMASK1 \
-d $NETADDR1/$NETMASK1 -j ACCEPT

# accepte les entrées sur certains ports
for port in $PORT_LIST
do
$IPTABLE -t filter -A INPUT -i eth0 -d $NETADDR0/$NETMASK0
-p tcp --dport $port -m state --state ! INVALID -j ACCEPT
done

# suivi de connexion sur internet (eth0)
$IPTABLE -t filter -A INPUT -i eth0 -s $WEB -d $NETADDR0 \
-p all -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLE -t filter -A OUTPUT -o eth0 -s $NETADDR0 -d $WEB \
-p all -m state --state ! INVALID -j ACCEPT

# masquerading
$IPTABLE -t filter -A FORWARD -i eth0 -o eth1 -s $WEB \
-d $NETADDR1/$NETMASK1 -m state --state
RELATED,ESTABLISHED -j ACCEPT
$IPTABLE -t filter -A FORWARD -i eth1 -o eth0 -s
$NETADDR1/$NETMASK1 -d $WEB -m state --state !
INVALID -j ACCEPT
$IPTABLE -t nat -A POSTROUTING -o eth0 -s
$NETADDR1/$NETMASK1 -j MASQUERADE

# enable tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#############
#############

$IPTABLE c'est iptables
$NETADDR0 l'adresse internet de ta carte ethernet connectée au web
$NETMASK0 le masque de sous réseau de ta carte ethernet connectée au web

$NETADDR1 l'adresse de ta carte ethernet connectée à un réseau privé
$NETMASK1 le masque de ta carte ethernet connectée à un réseau privé
si tu n'as pas de sous-réseau, tu peux laisser tomber toutes les
règles où ces deux variables interviennent

$PORT_LIST la liste des ports où tu autorises des connections nouvelles , donc pour toi 22 et 9115

remettre à zéro les règles est important, la politique
par défaut est capitale (pour un firewall digne de ce nom)
les règles de log sont optionnelles

en espérant que cela t'aide
amicalement
deb

Q : à quoi ca sert le "-m limit --limit 1/sec" dasn tes règles ??

Poste le Wednesday 5 January 2005 20:50:17
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: Perramus

J'avais pas vu, TNorth mais tu n'as aucun suivi de connexion en fait... techniquement tu as un firewall qui ne filtre rien et laisse passé le reste... Ce script est-il complet ?

Poste le Thursday 6 January 2005 11:39:35
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Hello,
Merci de vos reponses, en effet, il manque des bouts.

Par contre j aimerai savoir quelle est la maniere la plus simple d avoir des regles iptables qui bloquent tout le traffic exterieur, a l exception de celui passant par ssh et 2/3 autres ports.

Si qqn pouvait confirmer ou infirmer les infos ci dessous, ce serait super sympa.

Citation
deb
# filter default policy
$IPTABLE -t filter -P INPUT DROP
$IPTABLE -t filter -P OUTPUT DROP
$IPTABLE -t filter -P FORWARD DROP
Ceci rejette tout le traffic
Citation
auteur
# accepte les entrées sur certains ports
for port in $PORT_LIST
do
$IPTABLE -t filter -A INPUT -i eth0 -d $NETADDR0/$NETMASK0
-p tcp --dport $port -m state --state ! INVALID -j ACCEPT
done
ceci n autorise que les connexions entrantes sur les ports contenus dans $PORT_LIST (syntaxe ? 22 80 9115 ou separation par virgules ?)
Les connexions sortantes sont rejetees ?

Citation
deb
# quelques règles de log
$IPTABLE -t filter -A INPUT -i eth0 -p tcp -m state \
--state INVALID -j ULOG --ulog-prefix "INVALID_TCP : "
$IPTABLE -t filter -A INPUT -i eth0 -p icmp -m state --state
NEW,INVALID -j ULOG --ulog-prefix "PING_REQUEST : "
$IPTABLE -t filter -A INPUT -i eth0 -p tcp --syn --dport 22 \
-j ULOG --ulog-prefix "SSH_REQUEST : "
Ceci autorise les entrees sur le 22 (seconde ligne). A quoi sert la premiere ?

Ce qu il faut encore m expliquer : a quoi servent les options de masquerading ?c est pour lorsque la machine sert a partager la connexion ?
Je n ai qu une carte reseau, eth0, je peux donc oublier les regles concernant eth1?

Que signifie `mangle` et enfin que vaut $WEB ?
Citation
deb
Q : à quoi ca sert le "-m limit --limit 1/sec" dasn tes règles ??
J ai trouve ca sur le web, cela concernait la defense contre DoS, malheureusement je ne connait plus la source...



Merci a vous 2, Perramus et deb, je suis desole de ne pas encore avoir tout compris, mais c est assez rebarbatif, les iptables sad smiley
++

Poste le Friday 7 January 2005 09:56:49
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: Perramus

Les chaînes masquerading servent au partage de connexion, ça permet de n'avoir qu'une seule adresse extérieure... iptables, qui fait donc aussi routeur, fait ensuite le tri des paquets via la chaîne FORWARD entre les différentes machines...

Les trois lignes ULOG loguent ( en garde trace dans un fichier ) les paquets via le démon ulgod...

Pour une bonne petite doc simple et bien faite :

[olivieraj.free.fr]

Si ton adresse mail est correcte, et bien sûe si tu veux, je peux aussi t'envoyer un script de base commenté et bricolé avec cette doc... tu lis la doc, tu essaie de comprendre tout ce qui est fait dans le script ( il est assez simple ), et c'est parti...

Poste le Friday 7 January 2005 11:40:03
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Ok.
Citation
auteur
Si ton adresse mail est correcte, et bien sûe si tu veux, je peux aussi t'envoyer un script de base commenté et bricolé avec cette doc... tu lis la doc, tu essaie de comprendre tout ce qui est fait dans le script ( il est assez simple ), et c'est parti...
Ah bah ça serait volontiers !
Merci !!

TNorth

Poste le Friday 7 January 2005 13:37:50
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Voila mon fichier de conf complet basé sur celui de deb:
Citation

# flush all rules and delete any optional rules
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# filter default policy
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# nat default policy
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# mangle default policy
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# quelques règles de log
iptables -t filter -A INPUT -i eth0 -p tcp -m state --state INVALID -j ULOG --ulog-prefix "INVALID_TCP : "
iptables -t filter -A INPUT -i eth0 -p icmp -m state --state NEW,INVALID -j ULOG --ulog-prefix "PING_REQUEST : "
iptables -t filter -A INPUT -i eth0 -p tcp --syn --dport 22 -j ULOG --ulog-prefix "SSH_REQUEST : "

# accepte tout sur l'interface locale (loopback)
iptables -t filter -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -s 0/0 -d 0/0 -j ACCEPT

# accepte tout sur réseau local (eth0)
#iptables -t filter -A INPUT -i eth1 -s 192.168.0.1/$NETMASK1 -d $NETADDR1/$NETMASK1 -j ACCEPT
#iptables -t filter -A OUTPUT -o eth1 -s $NETADDR1/$NETMASK1 -d $NETADDR1/$NETMASK1 -j ACCEPT

# accepte les entrées sur certains ports (22,80,...)
for port in 22 80 110 9115
do
iptables -t filter -A INPUT -i eth0 -d 192.168.0.100/255.255.255.0 -p tcp --dport $port -m state --state ! INVALID -j ACCEPT
done

# suivi de connexion sur internet (eth0)
iptables -t filter -A INPUT -i eth0 -s 0/0 -d 192.168.0.100 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s 192.168.0.100 -d 0/0 -p all -m state --state ! INVALID -j ACCEPT

# masquerading (On a pas)
#iptables -t filter -A FORWARD -i eth0 -o eth1 -s $WEB -d $NETADDR1/$NETMASK1 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -t filter -A FORWARD -i eth1 -o eth0 -s $NETADDR1/$NETMASK1 -d $WEB -m state --state ! INVALID -j ACCEPT
#iptables -t nat -A POSTROUTING -o eth0 -s $NETADDR1/$NETMASK1 -j MASQUERADE

# enable tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

Maintenant, le résultat de nmap executé de la machine en question :
Citation
auteur
nmap -sT -sR -sV -p- -PT 192.168.0.100

Starting nmap 3.75 ( [www.insecure.org] ) at 2005-01-07 17:20 CET
Interesting ports on 192.168.0.100:
(The 65530 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.8.1p1 (protocol 2.0)
80/tcp open http Apache httpd 2.0.52 ((Debian GNU/Linux) PHP/4.3.10-2)
111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000)
113/tcp open ident OpenBSD identd
907/tcp open status (status V1) 1 (rpc #100024)

Nmap run completed -- 1 IP address (1 host up) scanned in 21.495 seconds

ça me parait presque bon, reste à savoir (et bloquer) ce que sont les ports ouvert 111 113 et 907 !

Question subsidiaire : pourquoi les ports 110 et 9115 ne sont pas ouverts ?

Merci !

P.S Si je fais un iptables-save, ça ne suffit pas, hein ? il faut ajouter le script au démarrage de la machine, en le faisant commencer par #!/bin/sh

Poste le Friday 7 January 2005 17:21:26
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: deb


salut Tnorth,

comme un firewall c'est la sécu de ton ordi ou de ton réseau,
je voudrais pas te faire faire de bétises,

premièrement si tu n'a pas d'autres PC connectés à celui qui est connecté au WEB
tu peux laisser tomber tout ce qui est masquerading et forward et nat,

mais même si tu ne te sers pas de toutes les règles ( mangle et nat )
il est toujours bon de les initialiser

# d'abord on efface toutes les règles précédentes
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# puis on applique une politique par défaut : DROP
# c'est-à-dire que tout paquet pour lequel tu n'as pas fixé
# de règles particulières, ser a tué à coups de battes de baseball
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# les politiques par défauts de nat et mangle peuvent être mises à ACCEPT
# sans risque
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# accepte tout sur l'interface locale (loopback)
# c'est nécessaire de le dire puisque la politique
# par défaut c'est DROP, et l'interface locale est toujours nécessaire
iptables -t filter -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -s 0/0 -d 0/0 -j ACCEPT

# c'est là que tu spécifies les ports pour lesquels tu acceptent
# des nouvelles connexions, la syntaxe est bonne
for port in 22 80 110 9115
do
iptables -t filter -A INPUT -i eth0 -d 192.168.0.100/255.255.255.0 -p tcp --dport $port -m state --state ! INVALID -j ACCEPT
done

# suivi de connexion sur internet (eth0)
iptables -t filter -A INPUT -i eth0 -s $WEB -d $TON_IP -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $TON_IP -d $WEB -p all -m state --state ! INVALID -j ACCEPT

les deux dernières règles signifient que rien ne pourra entrer sur ton PC
à moins que ce soit la réponse à une demande de toi-même, ou que ca vient
sur les ports que tu as autorisé

# enable tcp_syncookies : ca evite je crois, l'attaque par envoi massif de paquets
# ce qui peut provoquer des Denial Of Service (DoS)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

voila, j'espère avoir été plus clair

WEB=0.0.0.0 , ce qui signifie n'importe quelle adresse , le web quoi
TON_IP= l'adresse fournie par ton FAI (ifconfig pour la connaitre)

Poste le Friday 7 January 2005 18:33:12
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Ok merci de tes précisions, c'est en effet un poste du réseau local, pas un firewall ou un routeur.

Mais alors pourquoi le port 110 est marqué comme clos ?

Poste le Friday 7 January 2005 20:38:23
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: Perramus

Il y a un service actif en écoute dessus ?

Poste le Friday 7 January 2005 23:56:23
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: TNorth

Non !
Je ne savais pas que c'était une condition nécessaire.

et ça, c'est indispensable ?
Citation
auteur
111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000)
113/tcp open ident OpenBSD identd
907/tcp open status (status V1) 1 (rpc #100024)

Poste le Saturday 8 January 2005 10:10:10
Répondre     Citer    
Re: Iptables, ssh, web et lucane
Envoyé par: Perramus

Un port ouvert sur loopback signifie qu'un service est en écoute dessus... c'est la première règle de sécurité à vérifier d'ailleurs : "Tous les services en écoute sont-ils utiles ?", la deuxième étant "Tous les services utiles sont-ils correctement configurés ?"

Le 111 ce doit être Portmap

Pour le 113, un petit tour dans /etc/services :

auth 113/tcp ident tap #Authentication Service --> c'est auth ( c'est pas toujours aussi clair que ça )

Pour le 907... là je ne sais pas, selon les sources que j'ai il n'est pas assigné... mais regarde la doc que je t'ai indiquée, toute la première partie montre comment identifier et désactiver un service inutile...


Poste le Saturday 8 January 2005 12:23:55
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Iptables, ssh, web et lucane
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons