[iptables] conseils et améliorations

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Bonjour,
Je fuis depuis longtemps les iptables, et j'ai décidé de m'y mettre un peu.

J'ai une installation avec 2 réseaux :

livebox[gw,dhcp](192.168.1.254) <-> (192.168.1.1)routeur[gw,dhcp](10.0.0.254) <-> mon réseau domestique

J'ai opté pour cette configuration car je change souvent de FAI (ça m'évite de devoir reconfigurer tout mon matériel à chaque changement.

Dans mon matos, j'ai un serveur avec 2 cartes ethernet. Je n'utilisais jusque là qu'une seule interface, eth0 sur le réseau domestique.
J'ai une méga connexion fibre, et mon routeur actuel me limite à 10Mo/s. J'aimerai cependant que mon serveur puisse dépasser cette limite afin d'avoir mes 110Mo/s.
J'ai donc décidé de connecter eth1 sur la livebox (J'ai en projet futur de me débarrasser de la livebox, et de transformer ce serveur en routeur mais ce n'est pas le sujet)
J'aimerai donc prévoir des iptables pour que tout ne soit pas ouvert, et de bien maîtriser les entrées et sorties de celui-ci.

Voici les politiques d'accès que je voudrais installer sur ce serveur :
* eth0 :
- total accès sur tous les ports. Ce serveur n'est accessible que depuis mon réseau local de toute façon.
* eth1 :
- sortie uniquement pour http, NTP, SMTP, DNS
- entrée et sortie pour SSH et 5001
*aucun passage entre eth0 et eth1 quelque soit le sens

la passerelle par défaut est bien sur eth1 :

Code : Tout sélectionner

#route
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    0      0        0 eth1
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth1
Voici les iptables que j'ai écrites et qui me posent problème :

Code : Tout sélectionner

#!/bin/bash
clear

# Supprimer les règles écrites
iptables -F
iptables -X

iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP

#autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

#autoriser le ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

#pas de forward entre les interfaces
iptables -A FORWARD -i eth0 -j DROP
iptables -A FORWARD -o eth0 -j DROP
iptables -A FORWARD -i eth1 -j DROP
iptables -A FORWARD -o eth1 -j DROP

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

### ETH0
#tout autoriser sur eth0
iptables -I INPUT -i eth0 -j ACCEPT

### ETH1
#autoriser les entrées et sorties
iptables -A OUTPUT -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 5001 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --dport 5001 -j ACCEPT
#refuser tout le reste
iptables -t filter -i eth1 -A INPUT -j DROP
iptables -A OUTPUT -i eth1 -p tcp --dport 80 -j ACCEPT
Le premier problème que je rencontre et qu'il semble impossible d'utiliser OUTPUT avec -i donc comment autoriser la sortie pour http sans autoriser l'entrée ?


Merci d'avance pour votre aide
Avatar de l’utilisateur
filoha
Membre
Membre
Messages : 148
Inscription : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors-ligne

Puisque tu dis ne pas avoir de sortie externe pour la machine sur eth0, je ne vois pas l'intérêt de lui mettre un pare-feu. Surtout que tu précises qu'il n'y a pas de communication entre elle et eth1, lequel est lui relié au Net par une box, non ?
Malgré tout, il semblerait que tout ça se passe sur une seule machine. Si la partie qui communique avec l'extérieur est en fonction (sur le web, par exemple) et qu'en même temps la partie "interne" échange des données, avec une autre machine, je ne suis pas sûr qu'il ne peut pas y avoir de "fuite".
* eth0 :
- total accès sur tous les ports. Ce serveur n'est accessible que depuis mon réseau local de toute façon.
...
*aucun passage entre eth0 et eth1 quelque soit le sens
Il est besoin de ne discuter que de la config Iptables de eth1.
Es-tu sous IPv4 ou IPv6 ?
L'oubli est chose facile, mais la mémoire reste.
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

filoha a écrit :Puisque tu dis ne pas avoir de sortie externe pour la machine sur eth0, je ne vois pas l'intérêt de lui mettre un pare-feu. Surtout que tu précises qu'il n'y a pas de communication entre elle et eth1, lequel est lui relié au Net par une box, non ?
Oui il y a une box pour le moment, mais comme je l'ai dit, le but final sera de supprimer la box et le routeur ce qui exposera ce serveur.
filoha a écrit :Malgré tout, il semblerait que tout ça se passe sur une seule machine. Si la partie qui communique avec l'extérieur est en fonction (sur le web, par exemple) et qu'en même temps la partie "interne" échange des données, avec une autre machine, je ne suis pas sûr qu'il ne peut pas y avoir de "fuite".
Le routeur (10.0.0.254) ne permet aucune entrée sur ce réseau. Les seuls services qui sont et seront ouverts sur internet se trouvent sur le serveur qu'on est en train de configurer et qui doit être connecté au 2 réseaux.
Il est besoin de ne discuter que de la config Iptables de eth1.
Es-tu sous IPv4 ou IPv6 ?
En IPv4

Un petit schémas :
Image
Avatar de l’utilisateur
filoha
Membre
Membre
Messages : 148
Inscription : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors-ligne

Donc, si je comprends bien, les autres machines sont quand même reliées à la Box, donc vers l'extérieur.
Je pense alors qu'il convient de protéger toutes les machines, au moins pour ce qui est INPUT.
Pour celles qui ont une fonction de serveur, il faut les protéger INPUT & OUTPUT.
Qu'as-tu comme serveurs, et dans quelle machine (donne-leur un numéro ou un nom court pour la discussion, c'est plus pratique) ?
Serveur SSH ; serveur de courrier ; serveur http ; autre ?
L'oubli est chose facile, mais la mémoire reste.
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Disons L pour la livebox et R pour l'autre routeur.

Tous les PC ont pour passerelle le routeur R qui lui passe par L.
Le serveur lui à pour passerelle L.
L ne redirige aucun port vers R mais redirige SSH et Iperf(5001) vers le Serveur.

Image
Avatar de l’utilisateur
filoha
Membre
Membre
Messages : 148
Inscription : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors-ligne

Lperf, connais pas, c'est quoi ,
L'oubli est chose facile, mais la mémoire reste.
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

iperf, c'est pour tester le débit.
Avatar de l’utilisateur
filoha
Membre
Membre
Messages : 148
Inscription : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors-ligne

Excuse-moi mais je dois sortir.
Si tu veux, ce soir ou avant si je suis rentré, je te passe mes règles qui je pense iraient bien dans ton cas.
Fais en sorte d'avoir un N° de port SSH différent de 22 et qui ne concorde pas avec un autre déjà attribué : liste dans /etc/services.
L'oubli est chose facile, mais la mémoire reste.
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

T'inquiète pas c'est déjà le cas,j'ai juste pas voulu publier ça sur un forum public. Je veux bien étudier tes règles, ça presse pas ;) Merci
Avatar de l’utilisateur
filoha
Membre
Membre
Messages : 148
Inscription : 04 avr. 2016, 14:48
Localisation : Moitié Sud Métropole
Contact :
Status : Hors-ligne

Voici mes règles (pas les N° employés), mais pour toi, puisque tu n'as que SSH et iperf, tu n'est intéressé que par "22" et "5001". Je ne comprends pas quand tu parles de 80 en OUTPUT, tu ne parles pas de serveur web :

Code : Tout sélectionner

# Interdire tout
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# autoriser loop
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# autoriser les  connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# autoriser le ping (icmp)
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT

# autoriser les ports en entrée
iptables -A INPUT -p tcp --dport 80 -j ACCEPT	### http-web
iptables -A INPUT -p tcp --dport 993 -j ACCEPT	### imap
iptables -A INPUT -p tcp --dport 25 -j ACCEPT	### smtp
iptables -A INPUT -p tcp --dport 22 -j ACCEPT	### SSH
iptables -A INPUT -p tcp --dport XXX -j ACCEPT


# ping
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT

# autoriser les ports en sortie
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT	### DNS
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT	### SSH
iptables -A OUTPUT -p tcp --dport XXX -j ACCEPT
L'oubli est chose facile, mais la mémoire reste.
Avatar de l’utilisateur
vohu
Membre
Membre
Messages : 455
Inscription : 16 avr. 2016, 12:02
Localisation : Strasbourg
Status : Hors-ligne

Merci :)

Par OUTPUT je parlais bien de la navigation web. Mais tu vas te moquer de moi... Pour tester les iptables (concernant la navigation http) je faisais un apt-get update que je ne laissais pas terminer...
Mais il se trouve que la première partie de la commande ne doit que faire des ping... donc ça passait, ce qui me faisait croire que http était ouvert en sorti :069:
Voila finalement la sortie de apt-get update avec la sortie sur 80 bloquée à la dernière ligne :

Code : Tout sélectionner

apt-get update
Ign http://ftp.fr.debian.org jessie InRelease
Atteint http://ftp.fr.debian.org jessie-updates InRelease
Atteint http://ftp.fr.debian.org jessie Release.gpg
Atteint http://security.debian.org jessie/updates InRelease
Réception de : 1 http://ftp.fr.debian.org jessie-updates/main amd64 Packages/DiffIndex [2 980 B]
Réception de : 2 http://ftp.fr.debian.org jessie-updates/non-free amd64 Packages/DiffIndex [736 B]
Réception de : 3 http://ftp.fr.debian.org jessie-updates/main Translation-en/DiffIndex [1 720 B]
Réception de : 4 http://ftp.fr.debian.org jessie-updates/non-free Translation-en/DiffIndex [736 B]
Atteint http://ftp.fr.debian.org jessie Release
Atteint http://ftp.fr.debian.org jessie-updates/contrib amd64 Packages
...
Atteint http://ftp.fr.debian.org jessie/main Translation-fr
Atteint http://ftp.fr.debian.org jessie/main Translation-en
Atteint http://ftp.fr.debian.org jessie/non-free Translation-en
100% [Connexion à moblock-deb.sourceforge.net (216.34.181.96)]
Avatar de l’utilisateur
hulk
Messages : 9
Inscription : 30 avr. 2016, 16:28
Status : Hors-ligne

iptables -A OUTPUT -i eth1 -p tcp --dport 80 -j ACCEPT
Le premier problème que je rencontre et qu'il semble impossible d'utiliser OUTPUT avec -i donc comment autoriser la sortie pour http sans autoriser l'entrée ?
c'est normal que sa ne fonctionne pas faut utilisé -o eth1 a la place de -i quant tu utilise la chaîne OUTPUT.
avec

Code : Tout sélectionner

iptables -A OUTPUT -o eth1 -p tcp --dport 80 -j ACCEPT
sa devrai être mieux.
Avatar de l’utilisateur
hulk
Messages : 9
Inscription : 30 avr. 2016, 16:28
Status : Hors-ligne

c'est lignes sont inutile
#pas de forward entre les interfaces
iptables -A FORWARD -i eth0 -j DROP
iptables -A FORWARD -o eth0 -j DROP
iptables -A FORWARD -i eth1 -j DROP
iptables -A FORWARD -o eth1 -j DROP
et
#refuser tout le reste
iptables -t filter -i eth1 -A INPUT -j DROP
car elle font doublons avec ta politique par défaut qui drop le FORWARD , OUTPUT et INPUT.
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
je dirai même plus vue que tue DROP tout par défaut inutile d'ajouter des règle de DROP :), mais juste ajouter ce que tu a envie d'ouvrir en collent au plus proche des besoins.
Répondre