# [IPtables] Bloquer tout sauf 3 services

## Anthyme

bonjour ! 

Certaine le save peut etre deja, je susi en ce moment sur un projet d'une espece de gros active directory mais en linux sous gentoo, et il faudrai une fonction de firewalling sur ce serveur : en gros j'aimerai bloquer tout les port sauf le ftp, http et ssh

esque vous pourriez me donné les regles 

(en fait le pojet st a rendre dans 6 jour et il reste plein d'autre truc a faire et je n'ai pas trop le temps de chercher alors que si il y a des habitué ici ca va leur prendre 5s  :Wink:  )

merci beaucoup beaucoup !

----------

## PabOu

pour pouvoir faire ca, on a besoin de quelques renseignements supplémentaires.

Les ports, ce sont les ports en entrée (serveur http, ftp et ssh) ou en sortie (station de travail) ?

pour effacer toute config déjà existante (c'est mieux de le faire au début, et ca coute rien ;))

- F = --flush (vider les tables de règles)

- X = --delete-chain (supprimer d'éventuelles chaînes personnelles)

```

iptables -F # -t filter implicite

iptables -X # -t filter implicite

iptables -t nat -F

iptables -t nat -X

iptables -t mangle -F

iptables -t mangle -X

```

les règles par défaut, pour TOUT bloquer (quand aucune autre règle ne s'applique ce sont celles-ci qui interviennent) c'est ca :

```

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

```

on autorise tout pour la boucle locale (l'interface lo qui à l'ip 127.0.0.1) parceque sinon c'est une source à problèmes :

```

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

```

pour la suite, j'assume que eth0 est l'interface réseau sur laquelle iptables va travailler, tcp le protocole utilisé, et j'utilise le port 80 mais tu remplaces par ce que t'as besoin (sauf ftp c'est plus délicat car ca utilise plusieurs ports selon le mode que tu veux utiliser (passif/actif)).

Atention, ces règles nécessitent des supports spéciaux dans le kernel (et en règle générale si tu veux utiliser iptables tu dois l'activer dans ton kernel)

pour autoriser un port en entrée et leurs réponses en sortie :

```

iptables -A INPUT  -p tcp --dport 80 -i eth0 -m state --state ! INVALID -j ACCEPT

iptables -A OUTPUT -p tcp --sport 80 -o eth0 -m state --state RELATED, ESTABLISHED -j ACCEPT

```

pour autoriser un port en sortie et leurs réponses en entrée :

```

iptables -A OUTPUT -o eth0 -p tcp --sport 1024: --dport 80 -m state --state ! INVALID -j ACCEPT

iptables -A INPUT  -i eth0 -p tcp --dport 1024: --sport 80 -m state -- state RELATED, ESTABLISHED - j ACCEPT

```

il y a encore plein d'autres choses possibles : anti-flood, logs, QoS, forwarding, etc...

lorsqu'on fait un firewall, on oublie parfois des choses importantes, comme par exemple autoriser les requetes DNS

----------

## man in the hill

Salut,

J'ai fais un script très simple qui est mon parfeu actuel pour mon réseau :

http://www.guidelinux.org/phpBB/viewtopic.php?t=256&start=30

pseudo : invité=k.rouge alias man in the hill 

Il y a aussi des liens...

                                                          @+

----------

## Anthyme

ah la vache c pas aussi simple que ce que je croyais ^^

bon merci je vais regarder ca ^^

----------

## Anthyme

alalala je galere trop ...

en fait le PC en question servira de passerelle entre un réseau local (sur eth0) et intenet (sur eth1)

il devra s'occuper de faire un partage de connection et d'autorisé en entrée sorti uniquement http ftp et ssh (ainsi que DNS bien sur !)

voila PabOu si tu peux m'aider   :Confused: 

----------

## creuvard

Salut

As-tu lie la doc http://www.gentoo.org/doc/fr/home-router-howto.xml ?

Sinon voila quelques liens a regarder:

https://forums.gentoo.org/viewtopic-t-355178-highlight-firewall.html

https://forums.gentoo.org/viewtopic-t-439422-highlight-firewall.html

Sinon voila une ébauche de script iptables.

```

#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -X 

iptables --table filter --flush

iptables --table filter --delete-chain

iptables --table nat --flush

iptables --table nat --delete-chain

iptables --table mangle --flush

iptables --table mangle --delete-chain

 

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

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

#-Politique par default on détruit tout-#

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

iptables --table filter --policy INPUT DROP

iptables --table filter --policy OUTPUT DROP

iptables --table filter --policy FORWARD DROP

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

#-Mise en place de lo (réseau virtuel localhost)--#

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

#Autorise l'interface loopback à  dialoguer avec elle-même

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A OUTPUT -o lo -j ACCEPT

 

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

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

## Spécifiquation des services ##

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

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

#1) On autorise le LAN a faire des requette DNS

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT

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

#-Connexions a Internet (www)-#

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

#1) Aurorise le LAN à faire des requettes HTTP

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED  -j ACCEPT

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j ACCEPT

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

#-Connection FTP-#

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ESTABLISHED -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

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

#-Connection SSH-#

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

# Ouverture pour le serveur ssh 

iptables --append  FORWARD -i $WAN -o $LAN --protocol tcp -m state --state NEW --destination-port 22 -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN  --protocol tcp -m state --state ESTABLISHED --source-port 22 -j ACCEPT

```

Voila à peut près ce que cela devrait donner.

Avec ce script ta bécanne ne sert qu'a router les paquets, elle ne pex pas accéder à l'extérieur.

Si tu veux qu'elle y accéde il faut rajouter des règles en INPUT et OUTPUT

C'est a vérifier car je l'ai fait vit e faitLast edited by creuvard on Wed Apr 19, 2006 11:15 am; edited 1 time in total

----------

## yesi

je crois que c'est plus facile de comprendre si tu t'y lances un peu dans la documentation( juste l'essentiel) et puis regarder les exemples d'iptables de certains qui t'aideront à les assimiler... :Smile: 

parce que pour la passerelle, c'est juste 

```

## police par défaut

iptables -P FORWARD DROP

## on active le forward

echo 1 > /proc/sys/net/ipv4/ip_forward

## on autorise le reseau a envoyer des donnees sur internet

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

## DNS 

iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 53 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -p udp --dport 53 -j ACCEPT

##on autorise ce que l'on veut seulement:

iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --sports 21,22,80,443 -m state --state ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --dports 21,22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

```

ps: si je dis des conneries, on me corrigera, n'est-ce pas? rassurez-moi!  :Smile: 

 edit: au temps pour moi d'être lent...

----------

## man in the hill

salut,

Avant tout il faut que tu comprennes qques principes pour piocher ce que tu veux ds toutes les infos...

http://christian.caleca.free.fr/netfilter.html

http://www.netfilter.org/documentation/index.html#documentation-howto

Pour tester to parfeu:

http://scan.sygatetech.com/preicmpscan.html

                                                                           @+

----------

## Anthyme

Merci Beaucoup !!

je vais potasser tout ca quand j'aurai lus de probleme avec mon samba ^^

----------

## Anthyme

Voila j'ai fait mon truc !!! 

je vous le donne  :Wink: 

```
#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -X 

iptables --table filter --flush 

iptables --table filter --delete-chain 

iptables --table nat --flush 

iptables --table nat --delete-chain 

iptables --table mangle --flush 

iptables --table mangle --delete-chain 

  

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 

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

#-Politique par default on détruit tout-# 

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

iptables --table filter --policy INPUT DROP 

iptables --table filter --policy OUTPUT DROP 

iptables --table filter --policy FORWARD DROP 

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

#-Mise en place de lo (réseau virtuel localhost)--# 

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

#Autorise l'interface loopback à  dialoguer avec elle-même 

iptables -t filter -A INPUT -i lo -j ACCEPT 

iptables -t filter -A OUTPUT -o lo -j ACCEPT 

  

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

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

## Spécifiquation des services ## 

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

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

#1) On autorise le LAN a faire des requette DNS (+serveur DNS local)

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT 

iptables -A INPUT -i $LAN --protocol udp --source-port 53 -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --source-port 53 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --destination-port 53 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol ucp --destination-port 53 -j ACCEPT

iptables -A INPUT -i $WAN --protocol udp --source-port 53 -j ACCEPT

iptables -A INPUT -i $WAN --protocol tcp --source-port 53 -j ACCEPT

iptables -A OUTPUT -o $WAN --protocol tcp --destination-port 53 -j ACCEPT

iptables -A OUTPUT -o $WAN --protocol ucp --destination-port 53 -j ACCEPT

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

#-Connexions a Internet (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED  -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j ACCEPT 

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

#-Connexions a l'interface d'admin (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables -A INPUT -i $LAN --protocol tcp --source-port 80  -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --destination-port 80  -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --destination-port 80 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 80 -j ACCEPT

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

#-Connection FTP-# 

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT 

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

#-Connexions a ldap (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables -A INPUT -i $LAN --protocol tcp --source-port 686  -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --destination-port 686  -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --destination-port 686 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 686 -j ACCEPT

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

#-Connection SSH-# 

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

# Ouverture pour le serveur ssh 

iptables --append  FORWARD -i $WAN -o $LAN --protocol tcp -m state --state NEW --source-port 22 -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN  --protocol tcp -m state --state ESTABLISHED --destination-port 22 -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --source-port 22  -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --destination-port 22  -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --destination-port 22 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 22 -j ACCEPT
```

bon bin j'ai pas trop compris l'interet des NEW et ESTABLISHED (sham on me) mais ca marche bien comme ca  :Smile: 

merci de votre aide  :Smile: 

----------

## creuvard

Salut

J'ai pas eut le temps de regarder de prés ton script.

Mais pour les NEWS et ESTABLISHED voila en gros comment ca marche:

 ESTABLISHED =>La connection est établie et a vue les paquets ont transités dans les deux directions. (En gros c'est une réponse a une requette par exemple HTTP  tu l'as demander donc c'est normale de la laisser rentrer)

NEW =>Le paquet amorce une nouvelle connexion. 

RELATED =>Le paquet amorce une nouvelle connexion qui est apparenté à une connexion existante.

INVALID =>Le paquet ne semble appartenir a aucune des connexions suivies.

En gros lol

----------

## Anthyme

woua c'est vraiment puissant iptable ! je cherchais un truc a l'epoque ou j'etait sous windows et j'ai pas trouvé ... j'ai l'impression qu'il n'as pas d'equivalant !!

super puissant !!

encore merci a la comunauté tout entiere et a chacun des individu qui la compose  :Wink: 

----------

## babykart

un p'tit + là....

----------

## PabOu

 *Anthyme wrote:*   

> woua c'est vraiment puissant iptable ! je cherchais un truc a l'epoque ou j'etait sous windows et j'ai pas trouvé ... j'ai l'impression qu'il n'as pas d'equivalant !!

 

Et encore, ce n'est que le bout de l'iceberg :) hihi ! ;)

Pour ton script, oublie pas d'activer l'ip forwarding (avec un cat dans son entrée dans proc ou bien dans le fichier sysctl.conf), sinon le partage de la connexion risque de ne pas bien fonctionner.

J'ai pas compris pourquoi tu autorises le LAN à accéder au serveur DNS si tu l'autorise déjà à accéder aux DNS sur internet ? Est-ce que tu impléments un cache DNS sur ton lan (autre machine que le firewall avec ce script iptables) avec des règles particulières juste pour ton domaine ? et puis je pense que tu as un problème au niveau des ports.. un --source-port combiné à un INPUT.. ce serait plutôt --destination-port (-dport). et l'inverse également pour le OUTPUT+dport qui doit devenir OUTPUT+sport.

Une connexion client n'utilise (théoriquement) jamais de port inférieur à 1024, donc le port 53 ne sera jamais utilisé par un client :p par contre c'est le port de ton serveur ;)

Meme problème pour l'interface d'admin ET pour ldap, tu as mis 4 lignes, dont 2 sont inutiles car c'est le même problème. Ces lignes inutiles sont des trous potentiels de sécurité.

pour tes requetes www, tu n'utilises pas le RELATED... (pour info : ! INVALID == tout ce qui n'est pas INVALID, donc en somme, les 3 autres qui sont NEW, RELATED, ESTABLISHED)

pour les connexions FTP, les 2 dernieres lingnes correspondent à un transfert PASSIF. Ce mode n'est pas applicable derriere un routeur sauf si tu routes les ports utilisés.. mais il n'y a pas moyen de savoir de quels ports il s'agit car c'est choisi dynamiquement (à partir de 1024). Et enfin, pour ftp, il ne faut pas oublier que tu as besoin de ip_conntrack_ftp dans ton kernel (c'est un module netfilter/iptables)

Et pour terminer, le dernier point : SSH.

Là, je ne suis pas sur de ce que tu as voulu faire, mais une fois de plus, je suis certain qu'il y a encore une fois (voire 2) la même erreur (la même que pour ldap, interface admin, etc.. )

Les 2 premieres lignes pour SSH.. t'as voulu faire quoi ?

Là, tu autorises INTERNET à contacter un serveur SSH qui se trouve sur ton LAN, derriere le routeur... en te trompant de ports avec la confusion source/destination comme précédemment. Ou  bien tu ne t'es pas trompé pour ces ports, mais alors tu t'es trompé dans les --state

Je suis fort confus de ce que tu as dit : "mais ca marche bien comme ca". Tu es sur ? :s

----------

## Anthyme

en fait j'avais tester que la connexion ssh au server (c un peu soft je c mais il etait tard ^^)

sinon les 2 premiere lignes du SSH c'est creuvard qui me les a passé mais je crois qu'elle sont inversé (le but etant de donnée l'accessibilité de SSH a internet)

voila j'ai modifié et ca donne ca :

```
#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -X 

iptables --table filter --flush 

iptables --table filter --delete-chain 

iptables --table nat --flush 

iptables --table nat --delete-chain 

iptables --table mangle --flush 

iptables --table mangle --delete-chain 

  

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 

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

#-Politique par default on détruit tout-# 

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

iptables --table filter --policy INPUT DROP 

iptables --table filter --policy OUTPUT DROP 

iptables --table filter --policy FORWARD DROP 

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

#-Mise en place de lo (réseau virtuel localhost)--# 

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

#Autorise l'interface loopback à  dialoguer avec elle-même 

iptables -t filter -A INPUT -i lo -j ACCEPT 

iptables -t filter -A OUTPUT -o lo -j ACCEPT 

  

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

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

## Spécifiquation des services   ## 

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

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

#1) On autorise le LAN a faire des requette DNS (+serveur DNS local)

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interfac $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT 

iptables -A INPUT -i $LAN --protocol udp --destination-port 53 -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --destination-port 53 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 53 -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 53 -j ACCEPT

iptables -A INPUT -i $WAN --protocol udp --destination-port 53 -j ACCEPT

iptables -A INPUT -i $WAN --protocol tcp --destination-port 53 -j ACCEPT

iptables -A OUTPUT -o $WAN --protocol tcp --source-port 53 -j ACCEPT

iptables -A OUTPUT -o $WAN --protocol tcp --source-port 53 -j ACCEPT

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

#-Connexions a Internet (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state ! INVALID  -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state ! INVALID -j ACCEPT 

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

#-Connexions a l'interface d'admin (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables -A INPUT -i $LAN --protocol tcp --destination-port 80 -m state --state ! INVALID  -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 80 -m state --state ! INVALID -j  ACCEPT

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

#-Connection FTP-# 

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state N! INVALID -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ! INVALID -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ! INVALID -j ACCEPT 

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

#-Connexions a ldap -# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables -A INPUT -i $LAN --protocol tcp --destination-port 686 -m state --state ! INVALID  -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 686 -m state --state ! INVALID -j  ACCEPT

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

#-Connection SSH-#

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

# Ouverture pour le serveur ssh

iptables --append  FORWARD -i $WAN -o $LAN --protocol tcp -m state --state ! INVALID --source-port 22 -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN  --protocol tcp -m state --state ! INVALID --destination-port 22 -j ACCEPT

iptables -A INPUT -i $LAN --protocol tcp --destination-port 22 -m state --state ! INVALID -j ACCEPT

iptables -A OUTPUT -o $LAN --protocol tcp --source-port 22 -m state --state ! INVALID -j  ACCEPT
```

Je pense que c'est mieu  :Smile: 

----------

## Anthyme

ah merde samba ne passe plus evidement ... vous connaissez le port ? 

mci

----------

## lesourbe

 *Anthyme wrote:*   

> ah merde samba ne passe plus evidement ... vous connaissez le port ? 
> 
> mci

 

139 et 445 pour le discovery non ?

EDIT:

un coup de google me renvoie ça :

 *Quote:*   

> 
> 
> netbios-ns137/tcp# NETBIOS Name Service
> 
> netbios-ns137/udp
> ...

 

----------

## man in the hill

salut,

Avant de vouloir faire compliqué , essai la simplicité et l'efficacité...C'est dommage que cette adresse http://www.pcflank.com/  soit indisponible mais on peut tester chez sygate donc tous tes ports doivent être BLOCKED c-a-d  Stealthed complètement invisible pour les scanners...

sauf ceux que tu laisses volontairement ouvert...

Moi, j'ai deux machines qui m'appartiennent sur mon réseaux comme tu as pu le voir ds mon post précédent et à l'époque , je me suis vite rendu compte que ce n'est pas la peine de mettre des lignes que l'on ne comprend pas qui peuvent amener des failles de sécu comme indique PaBou...donc moi j'ai opté pour laisser passer toutes les requêtes venant du LAN avec la politique OUTPUT  ACCEPT et aussi d'accepter les réponses à ces requêtes (connexion déjà établie), par contre toute nouvelle connexion venant du WAN (du net) son droppé sans une autorisation explicite de ma part...je ne vois pas de protection contre les différent paquets qu'un pirate peut envoyé pour tester tes ports...une ligne contre les paquets ICMP  est nécessaire...

Avec ta politique de sécu, tu dois bien être conscient qu'a chaque fois que tu voudras installer un logiciel qui utilise ds ports il te faudra modifier ton script et cela peut devenir vite fait pénible si tu n'as que ton petit réseaux chez toi tranquille...

Pour la lisibilité de ton script :

--append = -A

--table = -t

[EDIT]Est-ce que tu peux donner un plan de ton réseau[/EDIT]

                                                     @+

----------

## creuvard

Je serais toi je virerais tout les ! INVALID:

Je m'explique:

INVALID =>Le paquet ne semble appartenir a aucune des connexions suivies. Donc comme le dit PabOu ! INVALID == tout ce qui n'est pas INVALID, donc en somme, les 3 autres qui sont NEW, RELATED, ESTABLISHED.

Dans cette ligne (au niveau du FTP) par exemple:

```

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ! INVALID -j ACCEPT

```

Tu acceptes les nouvelles connections venant du  WAN (monde extérieur) qui vont sur ton LAN et ce venant de tout les ports supérieur à 1024. Et ca c'est pas terrible au niveau sécurité.

Pour tester la solidité de ton pare-feu je te suggère de jouer avec nmap (C'est dans portage)

Il y a avec cet outils quelques options trés simpatique. 

Par exemple tu peux simuler le port source: -g(num du port)

```

nmap -P0 -g53 chez-toi.com

```

La politique de man in the hill est a prendre avec des pincettes je dirais. Elle est certes plus simple a écrire mais imaginons que tu te face "hacker". L'intrus peux donc te mettre un keylogger qui lui transmettra tout test fait et gestes.  Tandis que si tu limite la sortie ya moins de chance pour que les infos arrivent chez le pirate.

----------

## lesourbe

 *man in the hill wrote:*   

> [EDIT]Est-ce que tu peux donner un plan de ton réseau[/EDIT]
> 
> @+

 

Leçon 1 : resister au social engineering  :Smile: 

----------

## man in the hill

Salut,

 *Quote:*   

> creuvard a écrit :
> 
> imaginons que tu te face "hacker"

 

Ds ce cas iptables est mal codé et conntrack fait mal son boulot car j'ai bien précisé de laisser rentrer que les connexions déjà établie et ceux explicitement authorisées, donc tu peux aussi te faire "hacker" par ton ftp, etc...

Faut pas non plus être parano alors que tu fais ton premier script et les possibilités sont énormes...et rajouter des lignes que tu ne captes pas n'est pas des plus judicieux car chacun doit adapter à ses besoins, c'est cela qui est important...

Creuvart , j'aimerais bien que tu essais de me "hacker" un de ces 4   :Laughing:  avec mon script qui te parait simple mais je sais qu'il est efficace...Attention je ne suis pas contre ta politique d'ailleurs ds les semaines qui viennent, je vais me replonger ds iptables mais c'est pas sûr que je change mon script   :Wink:  ...

[EDIT]lesourbe mon réseau avec une IP dynamique et mon script iptables est ds mon premier post, tu peux essayer de me hacker   :Razz:   :Wink:  [/EDIT]

                                                                                 @+

----------

## babykart

je trouve ce script trés touffu...

et comme personne n'a jeté un oeil sur le lien que j'avais mis plus haut je poste le script que j'utilise:

/etc/netfilter-rules.conf

```
# Didier Rebeix : 14 02 2005

# Stephane Malinet : 11 04 2006

### configuration generale

# autorise-t-on le ping

ping="true"

# on autorise tout sur ces interfaces

# (laissez toujours la boucle locale)

all="lo"

# ou plus specifiquement par protocole, par interface et par port

interfaces_TCP="eth0+21+22+25+53+80+123+443+873+993+3632+4080 eth1+22+25+873+993"

interfaces_UDP="eth0+53+68+123"

# a l'exception de tout ce qui vient de ces reseaux

#exceptions="192.168.0.0/24 \

#   192.168.1.0/24"

# log t'on les packets droppés ?

logdrop="true"      

### configuration passerelle

gateway="true"

# interface externe 

extif="eth1"

# interface interne 

intif="eth0"

### dans le cas d'une passerelle: on veut que les requetes sur le port 80 soit forwardes sur 

### une machine du réseau local

#iptables -t nat -A PREROUTING -p TCP --dport 80 -i $extif -j DNAT --to-destination 192.168.129.2:80

#iptables -A FORWARD -i $extif -o $intif -p TCP --dport 80 -j ACCEPT

# multiposte free.fr

#iptables -t nat -A PREROUTING -p UDP --dport 32000:34000 -j DNAT --to-destination 192.168.0.2

#iptables -A FORWARD -i $extif -o $intif -p UDP -s 212.27.38.253 --dport 32000:34000 -j ACCEPT

### Dr : exemples interdictions specifiques par IP source (a destination du port 25)

#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x

#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x/x
```

netfilter-rules

```
#!/bin/bash

# Didier Rebeix 20050214  :  script de gestion iptables simplifiée

# Modifié par Stephane Malinet le 20060411

# necessite un fichier  /etc/netfilter-rules.

IPT="/sbin/iptables"

$IPT -P INPUT ACCEPT

$IPT -P OUTPUT ACCEPT

$IPT -P FORWARD ACCEPT

$IPT -F INPUT

$IPT -F OUTPUT

$IPT -F FORWARD

$IPT -F PREROUTING -t nat

$IPT -F PREROUTING -t mangle

$IPT -F POSTROUTING -t nat

$IPT -F POSTROUTING -t mangle

$IPT -F LOGDROP -t filter > /dev/null 2>&1

$IPT -X LOGDROP -t filter > /dev/null 2>&1

$IPT -N LOGDROP

[ ! -f /etc/netfilter-rules.conf ] && {

        echo "/etc/netfilter-rules.conf n'existe pas" 1>&2

        exit 1

}

. /etc/netfilter-rules.conf

$IPT -t filter -A LOGDROP -j LOG --log-prefix "[DROP] "

$IPT -t filter -A LOGDROP -j DROP

OLDIFS=$IFS

[[ $ping == "true" ]] && {

        $IPT -A INPUT -p ICMP -j ACCEPT

}

for except in $exceptions ; do

    $IPT -t filter -A INPUT -s $except -j ACCEPT

done

for int_all in $all ; do

    $IPT -t filter -A INPUT -i $int_all -j ACCEPT

done

for int_t in $interfaces_TCP ; do

    IFS="+"

    set -- $int_t

    int_t=$1

    shift

    nport=$#

    i=0;

    while (( $i < $nport )) ; do

       $IPT -t filter -A INPUT -i $int_t -p TCP --dport $1 -j ACCEPT

       shift

       i=$[$i+1]

    done

done

IFS=$OLDIFS

for int_u in $interfaces_UDP ; do

    IFS="+"

    set -- $int_u

    int_u=$1

    shift

    nport=$#

    i=0;

    while (( $i < $nport )) ; do

        $IPT -t filter -A INPUT -i $int_u -p UDP --dport $1 -j ACCEPT

        shift

        i=$[$i+1]

    done

done

$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[[ $gateway == "true" ]] && {

    $IPT -t nat -A POSTROUTING -o $extif -j MASQUERADE

    $IPT -A FORWARD -i $intif -o $extif -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    $IPT -A FORWARD -o $intif -i $extif -m state --state ESTABLISHED,RELATED -j ACCEPT

    echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

}

[[ $logdrop == "true" ]] && {

    $IPT -t filter -A INPUT -j LOG --log-prefix "[DROP] "

}

IFS=$OLDIFS

# on fait tout ca à la fin pour eviter de bloquer le script(et le reseau)

# en cas d'affichage (ssh)

$IPT -P INPUT DROP

$IPT -P OUTPUT ACCEPT

$IPT -P FORWARD ACCEPT
```

----------

## man in the hill

salut,

babykart , c'est une approche différente que je ne connaîssais pas mais je ne suis pas sûr que cela va être plus clair pou nôtre ami mais au moins il a le choix pour configurer à sa guise...

                                                          @+

----------

## babykart

 *man in the hill wrote:*   

> salut,
> 
> babykart , c'est une approche différente que je ne connaîssais pas mais je ne suis pas sûr que cela va être plus clair pou nôtre ami mais au moins il a le choix pour configurer à sa guise...
> 
>                                                           @+

 

là c'est pareil: toute la config' se fait dans le fichier /etc/netfilter-rules.conf dont la syntaxe me parait des plus simple... il n'y a aucune modif' à faire dans le script netfilter-rules...

----------

## lesourbe

 *man in the hill wrote:*   

> [EDIT]lesourbe mon réseau avec une IP dynamique et mon script iptables est ds mon premier post, tu peux essayer de me hacker    [/EDIT] @+

 

Pour répondre comme si je pouvais le faire :

aucun intérêt.

 :Smile: 

----------

## Anthyme

rebonjour !!

je vais prendre note de tout ce que vous m'avez dis !

mais sinon en ce qui concerne le "bien comprendre ce que tu fais" et bien j'ai pas vraiment le temps... il s'agit d'un projet pour mon ecole pour vendredi soir dernier delai et je n'ai pas que le iptable a faire (j ai egallement des difficulter a faire marcher le net logon de samba et quelques truc a faire pour faire une webmin)

sinon j'ai des besoin tres preci, donc pas a me soucier de l'evolution de ces derniers faudra juste que je rendre un projet fini...

sinon tout ceci est dans une vmware, pour faire mes test il suffit que je mette la passerrelle par defaut sur cette derniere je suppose ... en tout cas je n'arrive pas pour l'instant a me connecter en http a travers snif !

ah oui sinon mon reseau est tout simple :

   WEB

     |

   eth1

SERVEUR

   eth0

     |

   LAN

bon je vais continuer mes test avec ce que vous dites ...

----------

## man in the hill

salut,

 *Quote:*   

> anthyme a ecrit :
> 
> mais sinon en ce qui concerne le "bien comprendre ce que tu fais" et bien j'ai pas vraiment le temps...

 

Ok...je ne sais pas si le FTP fonctionne sur une machine virtuel mais tu peux tjrs essayer le mode actif 

http://christian.caleca.free.fr/ftp/

Tu peux utiliser mon script en enlevant tout ce qui se rapporte à ra0 (la passerelle wifi) et pour le FTP actif regarde du côté de  Creuvard.

Mon script laisse sortir automatiquement les apps qui en ont besoin , ils peuvent aussi recevoir la réponse à leur requête  mais j'interdis toutes nouvelles connexions...à part ceux que je decide , bien sûr...

Tu peux aussi tout écrire ds un terminal et ensuite sauver les règles avec /etc/init.d/iptables  save 

Sinon pour samba, cela fait un moment que je ne l'utilise plus mais voici qques liens :

http://www.gcolpart.com/howto

http://www.ac-creteil.fr/reseaux/systemes/linux/samba-linux.html

http://ernest.tuxicity.net/index.php?choix=Reseau&tuto=samba

                                                                              @+

----------

## Anthyme

Merci pour les liens mais la je crois que je desespere deçu ^^

l'authentification au boot de windows etait une option et je crois que ca le restera pour mon groupe ^^

en tout cas pour l'iptable j'ai fait un mix entre les 2 : l'idée d'autorisé tout l'output est vraiment une excelante idée ! et ca enleve pas mal de doublon (donc + perf ^^)sans etre moins sure, chapeau bas ! mais bon voila je ne comprend pas du tout pourquoi mais quand j'execute ce script je ne peu plus rien faire (le ssh passe plus j'ai pas essayé de diagnostiquer plus ...)

```
#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -t filter -F 

iptables -t filter -X 

iptables -t nat   -F 

iptables  -t nat  -X 

iptables -t mangle -F 

iptables -t mangle  -X 

iptables -X

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

#-Politique par default -# 

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

iptables -t filter -P INPUT  DROP 

iptables -t filter -P FORWARD DROP 

iptables -t filter -P OUTPUT ACCEPT

#########

#- NAT -#

#########

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 

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

#- Mise en place de lo (réseau virtuel localhost) -# 

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

#Autorise l'interface loopback à  dialoguer avec elle-même 

iptables -t filter -A INPUT -i lo -j ACCEPT 

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

#-Connexions du LAN au Serveur-# 

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

iptables -t filter -A INPUT -i $LAN -j ACCEPT

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

## Requetes DNS ## 

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

#1) On autorise le LAN a faire des requette DNS (+serveur DNS local)

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol tcp --source-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol udp --source-port 53 -j ACCEPT

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

#-Connexions a Internet (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED  -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j ACCEPT

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

#-Connection FTP-# 

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

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

#-Connection SSH-#

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

# Ouverture pour le serveur ssh

iptables --append  FORWARD -i $WAN -o $LAN --protocol tcp -m state --state ! INVALID --source-port 22 -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN  --protocol tcp -m state --state ! INVALID --destination-port 22 -j ACCEPT
```

pourtant le 

```
iptables -t filter -A INPUT -i $LAN -j ACCEPT
```

et le 

```
iptables -t filter -P OUTPUT ACCEPT
```

devraient suffire (non?)

J'ai du faire uen bétise quelque part ... :-/

----------

## creuvard

Pour le ssh j'avais fait une boulette en écrivant le script l'autre jour . Je l'ai éditer mais tu as du prendre la première version.

```

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

#-Connection SSH-#

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

# Ouverture pour le serveur ssh

iptables --append  FORWARD -i $WAN -o $LAN --protocol tcp -m state --state ! INVALID --destination-port 22 -j ACCEPT

iptables --append FORWARD -i $LAN -o $WAN  --protocol tcp -m state --state ! INVALID --source-port 22 -j ACCEPT

```

Tu viens de l'extèrieur pour te connecter a DESTINATION du port 22

Le server te répond avec son port SOURCE 22

[edit]

La remarque avais été fait par PabOu

 *Quote:*   

> 
> 
> Les 2 premieres lignes pour SSH.. t'as voulu faire quoi ?
> 
> Là, tu autorises INTERNET à contacter un serveur SSH qui se trouve sur ton LAN, derriere le routeur... en te trompant de ports avec la confusion source/destination 

 

----------

## man in the hill

Salut,

Avec la politique (policy) OUTPUT ACCEPT

Tu doit encore épurer ton script par ex pour le DNS ( tu l'a déjà authorisé localement) et le HTTP

Tu dois juste autoriser les requêtes depuis le LAN vers le WWW  et  les réponses pour ces connexions (les services vont se démerder avec les ports...)

```

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

# Autoriser le surf depuis le LAN

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

iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state NEW,ESTABLISHED,RELATED   -j ACCEPT 
```

```

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

# Autoriser les connexions déjà établies à rentrer vers le LAN

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

iptables -t filter -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED  -j ACCEPT 
```

Pour le ssh pourquoi tu ne te connecte pas du WWW sur ton serveur et ensuite à partir de celui-ci prendre le controle des machines du LAN... 

Pour le serveur FTP actif se trouvant sur le LAN , Crevard t'expliquera mieux que moi car le mien est sur mon serveur (faut que je cherche   :Laughing:  )...

                                                                              @+

----------

## Anthyme

Bon j'ai fait les modif mais j'ai toujours le meme probleme ... ceux du lan ne peuvent pas acceder au serveur ... et je ne comprend pas pourquoi :-/

(quand je parlais du ssh je voullais dire me connecter depuis le lan vers le serveur en lui meme, pas a travers)

voici le fichier de conf : (presque le meme en prenant en compte vos remarques)

```
#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -t filter -F 

iptables -t filter -X 

iptables -t nat   -F 

iptables  -t nat  -X 

iptables -t mangle -F 

iptables -t mangle  -X 

iptables -X

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

#-Politique par default -# 

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

iptables -t filter -P INPUT  DROP 

iptables -t filter -P FORWARD DROP 

iptables -t filter -P OUTPUT ACCEPT

#########

#- NAT -#

#########

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 

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

#- Mise en place de lo (réseau virtuel localhost) -# 

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

#Autorise l'interface loopback à  dialoguer avec elle-même 

iptables -t filter -A INPUT -i lo -j ACCEPT 

iptables -t filter -A OUTPUT -o lo -j ACCEPT 

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

#-Connexions du LAN au Serveur-# 

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

iptables -t filter -A INPUT -i $LAN -j ACCEPT

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

# Autoriser les connexions déjà établies à rentrer vers le LAN 

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

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED  -j ACCEPT

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

# Autoriser le surf depuis le LAN 

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

iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state NEW,ESTABLISHED,RELATED   -j ACCEPT

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

## Requetes DNS ## 

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

#1) On autorise le LAN a faire des requette DNS (+serveur DNS local)

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol tcp --source-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol udp --source-port 53 -j ACCEPT

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

#-Connexions a Internet (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED  -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j ACCEPT

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

#-Connection FTP-# 

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

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

#-Connection SSH-#

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

# Ouverture pour le serveur ssh

iptables --append  FORWARD -i $LAN -o $WAN --protocol tcp -m state --state ! INVALID --source-port 22 -j ACCEPT

iptables --append FORWARD -i $WAN -o $LAN  --protocol tcp -m state --state ! INVALID --destination-port 22 -j ACCEPT
```

----------

## man in the hill

Salut,

Tu n'as rien changé à part surcharger ton script, ce qui n'est pas le but...

Tu peux enlever le OUTPUT du lo  car tu as un OUTPUT ACCEPT

Commente avec # le DNS et les connexions a internet que tu spécifies avec les ports car le travail est déjà fait.

Résumons:

```

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

#-Connexions du LAN au Serveur-#

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

iptables -t filter -A INPUT -i $LAN -j ACCEPT 
```

Avec cette ligne, en ayant OUTPUT ACCEPT, tout le LAN peut communiquer (HTTP, DNS, FTP, SSH). 

```

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

# Autoriser le surf depuis le LAN

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

iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state NEW,ESTABLISHED,RELATED   -j ACCEPT
```

Avec cette ligne toutes les connexions depuis le LAN vers internet sont authorisé (requête DNS, HTTP, FTP, etc...), l'avantage de ce genre de ligne c'est que tu n'as pas  à spécifier les ports , un navigateur internet par ex fera une demande sur le port 80 d'un serveur HTTP et communiquera au serveur  son IP et son port de réception, la ligne iptables ci-dessus permet toutes les requêtes de sortir sans problème (pas seulement HTTP, aussi DNS, FTP, etc...) et celle ci-dessous permet toutes connexions établies de passer...    

```

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

# Autoriser les connexions déjà établies à rentrer vers le LAN

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

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED  -j ACCEPT
```

Avec cette ligne toutes les réponses au requête depuis le LAN  ci-dessus (DNS, HTTP, FTP, etc...) sont  authorisées car se sont des connexion déjà établie ou en relation...

J'utilise ssh tous les jours pour gérer mon serveur '"headless" et j'utilise mon script comme firewall...Tu n'as pas besoin de rajouter une ligne pour le ssh en local...

Quel sont les services sur ton serveur ?

Est-ce que tu ne peux communiqué avec aucun services ?

                                                                 @+

----------

## creuvard

 *Anthyme wrote:*   

> quand je parlais du ssh je voullais dire me connecter depuis le lan vers le serveur en lui meme, pas a travers

 

Ok Au temps pour moi j'avais pas compris.   :Embarassed:   Je pensais que le serveur SSH étais cacher dans le LAN.

```

# Ouverture pour le serveur ssh (uniquement pour le LAN)

iptables --append INPUT --in-interface $LAN --protocol tcp --destination-port 22 -j ACCEPT

iptables --append OUTPUT --out-interface $LAN --protocol tcp --source-port 22 -j ACCEPT

```

----------

## Anthyme

Bonjour !

J'ai de la chance le rendu de projet a été reponssé d'une 10ene de jour ^^

Je me suis penché un peu sur vos conf et je suis arrivé a ça : 

```
#!/bin/bash 

LAN="eth0" 

WAN="eth1" 

iptables -t filter -F 

iptables -t filter -X 

iptables -t nat   -F 

iptables  -t nat  -X 

iptables -t mangle -F 

iptables -t mangle  -X 

iptables -X 

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

#-Politique par default -# 

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

iptables -t filter -P INPUT  DROP 

iptables -t filter -P FORWARD DROP 

iptables -t filter -P OUTPUT ACCEPT 

######### 

#- NAT -# 

######### 

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 

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

#- Mise en place de lo (réseau virtuel localhost) -# 

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

#Autorise l'interface loopback à  dialoguer avec elle-même 

iptables -t filter -A INPUT -i lo -j ACCEPT 

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

#-Connexions du LAN au Serveur-# 

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

iptables -t filter -A INPUT -i $LAN -j ACCEPT 

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

# Autoriser les connexions déjà établies à rentrer vers le LAN 

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

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT 

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

# Autoriser le surf depuis le LAN 

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

iptables -t filter -A FORWARD -i $LAN -o $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED  -j ACCEPT

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

# Gestion des connexions externes déjà établies entrant sur la machine locale 

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

iptables -t filter -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED  -j ACCEPT

```

Quand j'ai vu que ma connection ssh n'avais pas sauté j'etait tres content !! ^^

mais ce n'etait pas encore ca ... en effet je ne peux pas créer de nouvelle connection SSH ! Je ne comprend vraiment de moins en moins :-/

j'ai essayer avec ces ligne en options qui ne me semblais plus util : 

```
################## 

## Requetes DNS ## 

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

#1) On autorise le LAN a faire des requette DNS (+serveur DNS local) 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol udp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol udp --destination-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $WAN -o $LAN --protocol tcp --source-port 53 -j ACCEPT 

iptables --append FORWARD --in-interface $LAN -o $WAN --protocol tcp --destination-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol tcp --source-port 53 -j ACCEPT 

iptables -A INPUT -i $WAN --protocol udp --source-port 53 -j ACCEPT eth0 192.168.0.6 et eth1 192.168.0.178

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

#-Connexions a Internet (www)-# 

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

#1) Aurorise le LAN à faire des requettes HTTP 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED  -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 443 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j ACCEPT 

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

#-Connection FTP-# 

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

#Autorisation pour le LAN de traverser le routeur 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 21 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 21 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 20 -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $WAN -o $LAN --protocol tcp --source-port 1024: -m state --state ESTABLISHED -j ACCEPT 

iptables --append FORWARD -i $LAN -o $WAN --protocol tcp --destination-port 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT 

```

peut etre que c du au fait que je fait mes test en vmware ...

la vmware a 2 interface : 

```
eth0 192.168.0.6 et eth1 192.168.0.178
```

et sur mon pc client j ai fait un 

```
route add default gw 192.168.0.6
```

et ensuite j'ai tenté des truc genre :

```
ping www.google.fr 
```

ou un :

```
lathar Group mod # wget 216.239.59.147

--13:28:06--  http://216.239.59.147/

           => `index.html'

Connexion vers 216.239.59.147:80...
```

mais rien n'y fait   :Confused: 

Si vous avez des idées en plus ...

----------

## Anthyme

Sinon man in the hill j'ai fais un copier coller de ton fichier de conf sur le lien que tu m'as donnée et c parrail ... :-/

vous pensez que cela viens de la vmware ?

----------

## PabOu

En quel mode est configuré ton réseau vmware ?

avoir deux interfaces qui sont sur le même sous-réseau (192.168.0.0) pour faire firewall.. c'est pas tres malin ! je vois pas l'intérêt dans ce cas-ci. Avec tout ca, j'ai énormément de mal à comprendre la structure de ton réseau (même si il est tout simple).

ping c'est le protocole ICMP.

----------

## man in the hill

salut,

Mon réseau a une passerelle wifi donc pas de copier/coller...

Sinon, tu as un doublon qui ne sert à rien :

```

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

# Autoriser les connexions déjà établies à rentrer vers le LAN

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

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT

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

# Autoriser le surf depuis le LAN

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

iptables -t filter -A FORWARD -i $LAN -o $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED  -j ACCEPT 

```

Tu authorises dèjà les connexions établies à rentrer vers le LAN , donc la ligne ci-dessus peut-être enlevé...

Tu as toutes les règles pour avoir  les connexions en local  avec  les règles suivantes:

```
  

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

#-Politique par default -#

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

 iptables -t filter -P OUTPUT ACCEPT

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

#-Connexions du LAN au Serveur-#

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

iptables -t filter -A INPUT -i $LAN -j ACCEPT 
```

Tu peux avoir toutes les connexions locales que tu souhaites avec ces 2 règles...donc ton problème de SSH , c'est pas normal...post tes fichiers ssh_config et sshd_config.

Combien de services as tu sur ton serveur, Il faudrait  accorder  des nouvelles connexions(NEW) , si tu veux  que l'on puisse se connecter de puis le WWW sur un serveur HTTP ou FTP.

```

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

# Gestion des connexions externes déjà établies entrant sur la machine locale

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

iptables -t filter -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED  -j ACCEPT 

```

Enfin pour vmware suis les conseilles de PaBou...La technologie wmware peut compliquer les choses , c'est sûr !

Voilà,

                                                                           @+

----------

## Anthyme

Oki merci des précision

sinon pour la conf de la vmware : les 2 sont en briged ... c'est pas forcement optimal c'est sur ... je vais essayer de mettre celle du lan en host to host ca sera peut etre mieux

----------

## man in the hill

Salut,

Les nouvelles connexions (NEW)  venant du WWW vers  ton serveur doivent être dirigés vers un service et un port bien précis sinon c'est le moulin...

                                                                        @+

----------

## Anthyme

hummm mais pour l'instant je n'ai aucun new venant du WAN ?? donc y a pas de trou normallement

En tout cas je laisse tombé la vmware pour le firewall je testerai sur un vrai pc dans quelques jours pasque c'est vraiment pas pratique ... en host to host je suis plus sur une bonne plage d'ip et en nat parrail donc j'ai des problemes pour le contacter ... :-/

a dans quelques jours peut etre ^^

----------

## man in the hill

salut,

C'est la  meilleur solution pour que les choses soient claires et limpides !

                                                          @ +

----------

## PabOu

non, le vmware n'est pas si compliqué que ca, en bridge, c'est exactement comme si tu avais chaque PC client connecté sur le même switch/hub que ton vrai ordi (ou alors si t'es directement connecté à un modem/routeur adsl/wifi, c'est l'équivalent d'ajouter un switch et d'y connecter ce modem aussi). Après, il faut quelques notions de réseau pour comprendre comment se fait le routage d'un paquet IP.

```

chemin vers internet---(switch)------ton vrai pc

                         | \\

                         |  ``=======ton "firewall" sous vmware (2 interfaces)

                         |

                         `--- éventuellement, un autre pc (vrai ou sous vmware)
```

imaginons que ton "vrai" réseau (avec le chemin vers internet) ait le range d'ip 192.168.1.0/24, et que ton réseau privé (LAN) ait le range 192.168.2.0/24

Il faut donc attribuer une ip de chacun de ces réseaux à ton firewall. Disons 192.168.1.1 et 192.168.2.1 :)

Tes ordis, doivent tous avoir une adresse dans le range 192.168.2.0 et comme passerelle, l'ip du firewall (la .2.1)

et puis le firewall doit forwarder tout vers le "chemin vers internet" qui est peut-être lui même une passerelle (avec une ip dans le range .1.0)

C'est pas si compliqué que ca en fait, mais à cause de vmware, on ne se rend pas bien compte du schéma. C'est plein de confusion d'avoir 2 ranges d'ip sur le meme switch. Mais c'est (en utilisation, pas en audit), l'équivalent de ca :

```

internet--(switch réseau .1.0)--FW vmware--(switch réseau .2.0)-- ton vrai pc

                                              \

                                               `--- autre pc (vrai ou vmware)
```

Voilà ! J'espère que c'est un réseau comme ceci que tu as concu ou alors tes problèmes sont normaux

----------

## Anthyme

bon j'ai pas voullu me casser plus la tete ..., j'ai testé sur un pc physique et ca marche beaucoup mieu !!!

je pense que je vais proposer 2 possibilité de firewalling pour "la boite" : une proche de celle de man of the hill et une autre plus répréssive avec DNS/HTTP/FTP en gros !

merci beaucoup !

----------

