Mise en place IPTABLES plus de connexions !

Salut,
suite mise en place iptables je ne peux plus me connecter au net,( en le desactivant, je retrouve ma connexion… ! ) si une bonne âme pouvait m’orienter :wink: :smiley:

le sript pour iptables est :

[code]#!/bin/bash

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT[/code]

Mon serveur sur lequel est ce script à pour ip : 192.168.1.2 sur eth0.
Le 2° carte reseau installée sur le serveur,eth1 est configuré avec une ip 192.168.10.10

2° question, ce script est-il assez sécuritaire pensez-vous

Merci !

iptables -t filter -P OUTPUT ACCEPT

chris38 :
C’est bien de fournir le script, mais ce serait encore mieux si expliquais :

  • ce que tu entends exactement par “je ne peux plus me connecter au net”, avec de préférence des commandes, des messages d’erreurs, des traces réseau, des logs…
  • à quoi correspondent les interfaces réseau (eth0=internet, eth1=LAN ?),
  • ce que tu attends de ce jeu de règles en terme de flux réseau, par exemple autoriser les connexions reçues et émises sur eth1, émises sur eth0, forwardées de eth1 vers eth0…

Pour l’instant tout ce que je remarque c’est que les connexions depuis ou vers la machine par eth0 ne sont pas acceptées.

ricardo :
Sans une règle complémentaire dans INPUT, ça risque de ne pas être suffisant.

[quote=“PascalHambourg”]
ricardo :
Sans une règle complémentaire dans INPUT, ça risque de ne pas être suffisant.[/quote]oui, tu as raison, il me semble que 80 est indispensable pour le web, non ?

Qui a parlé de web ?
Je faisais plutôt allusion au fait que laisser sortir les paquets c’est bien, mais laisser rentrer les réponses aussi c’est mieux sinon ça n’avance pas à grand chose.

[quote=“PascalHambourg”]Qui a parlé de web ?
[/quote]ben le demandeur ! :laughing:

bien sûr, le ‘net’, ce n’est pas que le web mais … :smt002

[quote=“ricardo”][quote=“PascalHambourg”]
ricardo :
Sans une règle complémentaire dans INPUT, ça risque de ne pas être suffisant.[/quote]oui, tu as raison, il me semble que 80 est indispensable pour le web, non ?[/quote]
non ! pour un pc desktop …a moins de vouloir ouvrir un service http pour un server

Merci de vos réponses j’ai finalement appliqué le script de “ricardo”, toutefois la commande nmap suivante sur eth0 qui est la carte direct a internet,me renoie ceci :

[code]server:/etc/init.d# nmap -v -O -sS -F 192.168.1.2

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-04-13 20:09 CEST
Initiating SYN Stealth Scan against server.srv_debian.org (192.168.1.2) [1239 ports] at 20:09
Discovered open port 113/tcp on 192.168.1.2
Discovered open port 2049/tcp on 192.168.1.2
Discovered open port 111/tcp on 192.168.1.2
Discovered open port 730/tcp on 192.168.1.2
The SYN Stealth Scan took 0.14s to scan 1239 total ports.
For OSScan assuming port 111 is open, 1 is closed, and neither are firewalled
For OSScan assuming port 111 is open, 1 is closed, and neither are firewalled
For OSScan assuming port 111 is open, 1 is closed, and neither are firewalled
Host server.srv_debian.org (192.168.1.2) appears to be up … good.
Interesting ports on server.srv_debian.org (192.168.1.2):
Not shown: 1235 closed ports
PORT STATE SERVICE
111/tcp open rpcbind
113/tcp open auth
730/tcp open netviewdm2
2049/tcp open nfs
No exact OS matches for host (If you know what OS is running on it, see http://www.insecure.org/cgi-bin/nmap-sub mit.cgi).
TCP/IP fingerprint:
SInfo(V=4.11%P=i686-pc-linux-gnu%D=4/13%Tm=48024C55%O=111%C=1)
TSeq(Class=RI%gcd=1%SI=23A842%IPID=Z)
TSeq(Class=RI%gcd=1%SI=23A83D%IPID=Z)
TSeq(Class=RI%gcd=1%SI=23A848%IPID=Z)
T1(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T2(Resp=N)
T3(Resp=Y%DF=Y%W=8000%ACK=S++%Flags=AS%Ops=MNNTNW)
T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
TCP Sequence Prediction: Class=random positive increments
Difficulty=2336840 (Good luck!)
IPID Sequence Generation: All zeros
Nmap finished: 1 IP address (1 host up) scanned in 10.235 seconds
Raw packets sent: 1284 (58.020KB) | Rcvd: 2584 (110.600KB)
[/code]

- Est-ce un bon résultat ?

  • Je remarque que le port NFS est ouvert ( les autres je sais pas ce que c’est…) comment le fermer pour ne pas y avoir accès depuis internet,(eth0) et seulement sur mon reseau local (eth1).Le partage ne se fait qu’entre mes 2 pc sur le serveur.

C’st deux regles sont elles intéressantes ? :

iptables -A OUTPUT -o eth0 -s 192.168.1.2 -d 0.0.0.0/0 -p all -m state --state ! INVALID -j ACCEPT iptables -A INPUT -i eth0 -s 0.0.0.0/0 -d 192.168.1.2 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT

un petit up !

Si nmap est exécuté sur la machine elle-même, alors le trafic réseau engendré est local à la machine et donc passe par l’interface de loopback lo. “Sur eth0” est impropre, il serait plus juste d’écrire “sur l’adresse d’eth0”, ce qui n’est pas vraiment la même chose :

  • sur eth0 = paquets qui entrent par eth0 avec n’importe quelle adresse destination ;
  • sur l’adresse d’eth0 = paquets avec l’adresse destination de eth0 qui entrent par n’importe quelle interface.

Comme les règles iptables laissent passer le trafic sur lo, tous les ports en écoute sur l’adresse de eth0 son visibles. Pour tester l’efficacité des règles iptables sur eth0, il faut que les paquets soient reçus par eth0, donc envoyés depuis une autre machine connectée à eth0 ou au delà.

Concernant les deux règles que tu cites, leur intérêt dépend du reste du jeu de règles et de tes besoins que sauf erreur tu n’as toujours pas exprimés.

[quote=“PascalHambourg”]…
Concernant les deux règles que tu cites, leur intérêt dépend du reste du jeu de règles et de tes besoins que sauf erreur tu n’as toujours pas exprimés.[/quote]

Merci de cette réponse, dans un premier temps je souhaite que le serveur est accès à internet, que mes 2 autres pc du réseau local puissent accéder au serveur sans restrictions puis ce que, utilisant vnc depuis le serveur pour des connexions sur ceux-ci.
Ensuite mon serveur aura un site web, et un FTP accéssible depuis internet.
Voilà pour mes éventualités d’utilisation.

Merci

Donc autoriser toutes les connexions sortantes du serveur sur l’interface internet.

Donc autoriser toutes les connexions entrantes vers le serveur sur l’interface LAN.

Donc autoriser les connexions VNC sortantes du serveur sur l’interface LAN.

“puis ce que” = puisque ? Je ne vois pas bien le lien de causalité entre accès total au serveur depuis le LAN et connexion VNC depuis le serveur vers le LAN.

Donc autoriser les connexions HTTP (TCP/80) et FTP (TCP/21+data) entrantes vers le serveur sur l’interface internet.
Et pas de communication routée depuis le LAN vers internet à travers le routeur. Ai-je bien tout compris ?

[quote=“PascalHambourg”]
Donc autoriser les connexions HTTP (TCP/80) et FTP (TCP/21+data) entrantes vers le serveur sur l’interface internet.
Et pas de communication routée depuis le LAN vers internet à travers le routeur. Ai-je bien tout compris ?[/quote]

Si, par la suite les 2 pc seront routés par le serveur, mais j’ai pas insisté sur ce point, ca fait déjà pas mal.Mais vous avez très bien compris :wink:

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# autoriser le trafic local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# suivi de connexion
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# autoriser les connexions sortantes vers internet
iptables -A OUTPUT -o eth0 -j ACCEPT

# autoriser les connexions entrantes depuis le LAN
iptables -A INPUT -i eth1 -m state --state NEW -j ACCEPT

# autoriser les connexions VNC sortantes vers le LAN
iptables -A OUTPUT -o eth1 -m state --state NEW -p tcp --dport ${port_vnc} -j ACCEPT

# autoriser les connexions entrantes HTTP et FTP depuis internet
# FTP requiert le module de suivi de connexion ip_conntrack_ftp ou nf_conntrack_ftp
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 21 -j ACCEPT

# autoriser les connexions routees du LAN vers internet
iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# masquage source necessaire si le routeur amont n'a pas de route de retour vers le LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Je vous remercies pour ce sript que j’essairai d’installer dans la journée, merci pour ça ! .

A l’install du srcipt, j’ai cette erreur :

iptables v1.3.6: invalid port/service `-j' specified Try `iptables -h' or 'iptables --help' for more information.

Un petit “UP” !

On vient, on vient…
Je suppose que l’erreur vient de la ligne qui autorise les connexions VNC depuis le serveur. Il faut remplacer la variable $port_vnc (que j’avais par erreur écrite $port_vlc, c’est corrigé) par la valeur du port utilisé par VNC, que je ne connais pas.

Je remplace donc comme ceci ? :

${5900}

Le port est le 5900 !
[Edit] Je me pose une question, n’est ce pas un peux dangereux d’utiliser vnc de cette façon, n’est il pas mieux de l’utiliser avec un tunel SSH , ce qui veux dire que je dois aussi paramétrer SSH dans iptables ?

[quote=“chris38”]Je remplace donc comme ceci ? :

${5900} [/quote]
Non, ${5900} représenterait la valeur du 5900e argument passé au script dans la ligne de commande. Il faut remplacer tout ${port_vnc} par 5900, pour faire comme dans les autres règles avec --dport. Ou bien affecter la valeur à la variable en début de script :

Si le LAN n’est pas sûr (risque de sniffing, d’ARP poisoning…), alors il vaut mieux.