Iptables Réseaux

Bonjour,

Je suis en train de testé iptables à partir d’une machine virtuel avec 2 carte réseaux et je souhaiterais savoir comment faire pour que les connexion réseaux passe par la carte eth0 et sorte en eth1 avec un contrôle des différents ports et site.
Le but final c’est que je transforme cette machine virtuel en machine physique.
Dans un premier temps j’ai mis en place certaine règles que voici

#! /bin/bash

echo "- Initialisation du firewall :"

# Flush /sbin/iptables
/sbin/iptables -F 2>/dev/null

# Suppression des chaînes utilisateurs
/sbin/iptables -X 2>/dev/null

echo "- Vidage des regles et des tables : [OK]"

# Interdire toutes connexions entrantes et sortantes
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP

echo "- Interdire toutes les connexions entrantes et sortantes : [OK]"

## Permettre à une connexion ouverte de recevoir du trafic en entrée.
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Permettre à une connexion ouverte de recevoir du trafic en sortie.
/sbin/iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT

echo "- Ne pas casser les connexions établies : [OK]"

########## Regles ##########

# On accepte la boucle locale en entrée.
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Autoriser le ping
/sbin/iptables -t filter -A INPUT -p icmp -j DROP
/sbin/iptables -t filter -A OUTPUT -p icmp -j DROP

# Autoriser SSH
/sbin/iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# Autoriser DNS
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# Autoriser NTP
/sbin/iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# Autoriser FTP
/sbin/modprobe ip_conntrack_ftp
/sbin/iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

# FTP Spécifique sortant
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 10020:10021 -j ACCEPT

# Autoriser HTTP et HTTPS
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT

# Autoriser SMTP
/sbin/iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Autoriser VNC
/sbin/iptables -t filter -A INPUT -p tcp --dport 5901 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 5901 -j ACCEPT

echo "- Initialisation des règles : [OK]"

# Relançons fail2ban
[ -e /etc/init.d/fail2ban ] && /etc/init.d/fail2ban restart

exit 0

auriez vous une idée pour que mes flux réseaux passe obligatoirement par eth1.

Petit info
eth0: 192.168.1.0/24
eth1: 10.10.1.0/24

tu dois activer le port forwarding dans le kernel

iptables -t nat -A POSTROUTING --out-interface eth1 -j MASQUERADE  
iptables -A FORWARD --in-interface eth0 -j ACCEPT

/etc/sysctl.conf ajoute ou uncomment net.ipv4.ip_forward = 1

sysctl -p

Salut,

Pour appliquer des règles iptables au démarrage, tu as le paquet iptables-persistent de la suite netfilter-persistent.
En plus, à l’installation et si tu as exécuté ton script automatique, la configuration du paquet te propose de créer une configuration à partir des règles iptables déjà définies. Ça te crée des fichier de conguration dans /etc/iptables/ et tu peux appliquer ou vider les règles en manipulant le service netfilter-persistent.

Bonjour

Merci beaucoup de votre aide
juste piour savoir si je veux interdire google.fr en site web la commande est correct? et peu ont faire en sorte qu’il y ai un message d’erreur qui met “site interdit”

iptables -A OUTPUT -t filter -s www.google.fr -j drop

Non, avec la destination DROP (et non drop), le paquet est tout simplement trappé. Si tu veux une erreur plus explicite, il faut que tu utilises la destination REJECT ou un proxy qui se charge d’afficher l’erreur à l’utilisateur de façon explicite dans une page web.

[quote=“Almtesh, post:5, topic:74396, full:true”]
Non, avec la destination DROP (et non drop)[/quote]
effectivement cela fonctionne beaucoup mieux avec un DROP que drop :wink:

Pourrais tu m’expliquer la différence en DROP ou REJECT stp car pour moi c’est exactement la même chose

Alors, vite fait.
DROP et REJECT trappent tous les deux le paquet.
La différence, c’est que DROP l’oublie tout de suite alors que REJECT se fend d’un message ICMP pour préciser à l’emmeteur qu’il vient de se faire envoyer bouler.

1 J'aime

Et bien merci pour pour ton explication simple et rapide.

Aucune des commandes qui suit ne fait de port forwarding.
Tu voulais peut-être parler d’IP forwarding.
Ni l’IP forwarding, ni ces règles de filtrage ni de masquerading ne peuvent forcer les flux à passer par une interface donnée.
C’est le routage qui décide par quelle interface un flux sort.

Non (je passe sur l’erreur de syntaxe drop/DROP déjà relevée).
Cette commande bloque les paquets émis par la machine en provenance des adresses IP obtenues par la résolution du nom “www.google.fr” et non “google.fr”. Autant dire que ces paquets n’existent pas, puisque les paquets émis par la machine ont comme source l’adresse IP de la machine. Il faut donc utiliser -d et pas -s.
D’autre part si tu veux filtrer les flux non pas émis par la machine mais transmis de eth0 à eth1, OUTPUT n’est pas la bonne chaîne, c’est FORWARD.
De plus les adresses IP obtenues par la résolution de nom à un moment donné peuvent varier dans le temps et dans ce cas le filtrage sera inefficace.
Sans oublier que tout autre site hébergé sur une ce ces adresses IP sera bloqué aussi.

Au lieu de DROP on peut utiliser REJECT --reject-with icmp-admin-prohibited, mais cela repose sur la supposition que le client saura correctement interpréter ce message ICMP et afficher une erreur explicite.
Sinon, on peut rediriger vers un serveur web qui renvoie une page d’erreur.
Mais le moyen le plus adapté pour filtrer le trafic HTTP et notamment les URL, c’est un proxy, pas iptables.

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-fr-4/s1-firewall-ipt-fwd.html

oui ip forwarding d’ailleurs la ligne que je dis d’ajouter c’est “ipv4.ip_forward”

effectivement ca n’a rien a voir avec le port je me suis trompé

Cà c’est impossible ^^ désoLé ;/

J’continue à lire :wink:

cooL Merci