logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Réseaux filaires et sans-fil : administration, etc... >> iptables, --or-mark et tun0 sont dans un bateau Newtopic | Reply
poster txt
casskroot
Inscrit le 01-11-2003
Posté le 18-04-2014 07:23

Salut,

je suis assez peu expérimenté avec iptables et vu que je bloque, je viens vous demander conseil.

Chez moi, j'ai :
- un pc de bureau -> 192.168.0.10
- un petit serveur qui me sert de seedbox -> 192.168.0.11
- sur la seedbox, un client openvpn tourne et utilise l'interface tun0
La mise en réseau se fait par une box.

Ce que je souhaiterais :
utiliser iptables pour empêcher toute communication de la seedbox en dehors du VPN, sauf avec mon PC de bureau.

Pour ce faire, je pensais pouvoir marquer les paquets en fonction de leur provenance/destination et en fonction du périphérique par lequel ils passent pour pouvoir ensuite les accepter ou les refuser.

Ce que j'ai fait :
(les lignes qui suivent servent uniquement à gérer le trafic entrant, le même principe sera appliqué au trafic sortant si j'arrive à faire fonctionner ces quelques lignes)
Code:
iptables -t mangle -A PREROUTING -s 192.168.0.10 -j MARK --or-mark 0x1
iptables -t mangle -A PREROUTING -i tun0 -j MARK --or-mark 0x2
iptables -t mangle -A PREROUTING -i eth0 -j MARK --or-mark 0x4
iptables -t mangle -A INPUT -m mark --mark 0x4 -j DROP



Si j'ai bien compris la documentation d'iptables :
- la première ligne me permet de mettre à 1 le bit 0 du marqueur de chaque paquet qui provient de 192.168.0.1
- la deuxième ligne me permet de mettre à 1 le bit 1 du marqueur de chaque paquet qui est passé par tun0
- la troisième ligne me permet de mettre à 1 le bit 2 du marqueur de chaque paquet qui est passé par eth0
- la quatrième ligne me permet de rejeter tous les paquets dont le marqueur a pour valeur 4.
Si le marqueur a pour valeur 4, c'est que le bit 2 et uniquement le bit 2 à été mis à 1. Donc que mon paquet est passé par eth0 MAIS ne provient pas de 192.168.0.10 ET n'est pas passé par tun0.

Lorsque je met en application ces règles de filtrages, la communication entre la seedbox et le pc de bureau fonctionnent encore à merveille mais la seedbox refuse tout contact avec l'extérieur, même si ça passe par le VPN.

Mes questions :
- Est-ce que vous pourriez me confirmer que j'ai bien compris la doc d'iptables (notamment pour le --or-mark) ?
- Est-ce que vous pourriez me confirmer que tun0 étant un périphérique virtuel, tout ce qui passe par tun0 passe nécessairement par eth0 et que iptables devrait voir des paquets qui passent par eth0 puis par tun0 lorsqu'ils entrent et par tun0 puis par eth0 lorsqu'il sortent ?



J'espère qu'il y aura des gens plus éclairés que moins par ici.
Merci d'avance pour l'aide que vous pourrez m'apporter et à la prochaine.

[ Ce Message a été édité par: casskroot le 2014-04-18 07:24 ]
profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 18-04-2014 22:30

bon, à coups d'activation de logs dans iptables et de dmesg | grep MARK=[le masque que je veux], je suis en train de me rendre compte que mon marquage fonctionne bien mais que je ne sais pas comment fonctionne un VPN.

Mes données transitent bien par tun0 mais j'ai des échanges faits avec mon serveur VPN qui transitent par eth0 (serveur VPN sur UDP). Donc quand je bloque tout ce qui transite par eth0, je coupe tout simplement la communication avec mon serveur VPN.

Je continue mes recherches pour arriver à mes fins mais si vous pouvez m'aider, n'hésitez pas .

_________________________


[ Ce Message a été édité par: casskroot le 2014-04-18 22:30 ]
profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 19-04-2014 12:41

Bon, je me suis enfin décidé à digérer une partie de la doc d'iptables (ce que j'avais déjà repoussé plusieurs fois vu le pavé) et je me suis amusé à observer mon trafic pour comprendre ce que je devais ou non laisser passer et je crois que je suis enfin arrivé à mon but.

Je doute fortement que ma méthode soit conventionnelle mais elle me semble la plus restrictive possible et pour l'instant je crois que ça marche donc c'est le principal pour moi.

Pour ceux que ça intéresse, voilà ce que j'ai fait :
Sur la table filter, j'ai défini un comportement par défaut qui consiste, dès le démarrage du PC, à rejeter absolument tout le trafic. Un script est ensuite appelé à différents niveaux d'exécution du service openvpn pour ne laisser passer que le strict nécessaire en fonction de l'état du VPN :
- le VPN veut se lancer -> on autorise uniquement deux choses. Les requêtes DNS pour la résolution du nom du serveur VPN et les transactions entre mon PC et le serveur de VPN (filtrage par port sur eth0)
- le VPN est lancé -> on autorise uniquement deux choses. Tout le trafic entrant/sortant sur tun0 et les transactions entre mon serveur et le serveur de VPN (filtrage par port sur eth0).
- le VPN est arrêté -> on interdit tout trafic.
Dans tous les cas, en plus de ces règles, j'ai autorisé tout trafic en provenance et à destination de mon PC de bureau pour pouvoir garder la main quoi qu'il arrive.

Le script en question (que j'ai placé dans /etc/openvpn/iptables-rules.sh et que j'ai rendu exécutable) :
Code:
#!/bin/sh
#On purge les règles de filtrages
iptables -t filter -F
#On autorise la comminucation avec le PC de bureau
iptables -t filter -A INPUT -s 192.168.0.10 -j ACCEPT
iptables -t filter -A OUTPUT -d 192.168.0.10 -j ACCEPT

if [ $1 = "starting" ]
then
#On autorise les requêtes DNS pour la résolution du nom de domaine du VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
#On autorise les transactions avec le VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT
elif [ $1 = "started" ]
then
#On autorise les transactions avec le VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT
#On autorise le trafic du VPN
iptables -t filter -A INPUT -i tun0 -j ACCEPT
iptables -t filter -A OUTPUT -o tun0 -j ACCEPT
elif [ $1 = "stop" ]
then
fi



ensuite, j'ai modifié /etc/init.d/openvpn de la façon suivante :
Dans la fonction start_vpn (), j'ai rajouté au tout début /etc/openvpn/iptable-rules.sh starting et à la toute fin /etc/openvpn/iptable-rules.sh started.
Dans la fonction stop_vpn(), j'ai rajouté au tout début /etc/openvpn/iptable-rules.sh stop

Une fois ces modification faites, il ne reste plus qu'à enregistrer la configuration du blocage de tout le trafic par défaut et de redémarrer le PC (attention, assurez vous que vos scripts fonctionnent bien avant de passer à cette étape, sinon, vous risquez d'avoir l'air bête...). Le paquet iptables-persistent est nécessaire. Avant d'exécuter ces lignes, veillez aussi à avoir des règles de filtrage qui autorisent la communication entre votre serveur et votre PC (par exemple en exécutant /etc/openvpn/iptables-rules.sh stop)

Code:
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -F && sudo iptables-save > /etc/iptables/rules && sudo reboot



Pensez également à vérifier les niveaux d'exécution et les priorités de vos démons utilisant internet par rapport aux niveaux d'exécution et aux priorités du démon openvpn pour que ce dernier soit exécuté avant (chose que je n'arrive pas à modifier pour l'instant pour une raison qui m'échappe encore).


Si quelqu'un passe par là et à des remarques à faire, qu'il ne se gène pas.

[ Ce Message a été édité par: casskroot le 2014-04-19 13:10 ]
profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 21-04-2014 13:03

Tant que j'y pense, je vais répondre aux question que je posais dans le premier topic :

- Est-ce que vous pourriez me confirmer que j'ai bien compris la doc d'iptables (notamment pour le --or-mark) ?

Oui, j'avais bien compris et ceux qui veulent faire des tests peuvent reprendre la syntaxe utilisée dans le premier message.


- Est-ce que vous pourriez me confirmer que tun0 étant un périphérique virtuel, tout ce qui passe par tun0 passe nécessairement par eth0 et que iptables devrait voir des paquets qui passent par eth0 puis par tun0 lorsqu'ils entrent et par tun0 puis par eth0 lorsqu'il sortent ?

Quand j'ai analysé mes trames, j'ai eu l'occasion de voir que bien que les paquets envoyés à tun0 passent physiquement par eth0, c'est totalement transparent à notre niveau et qu'on a bien deux trafics séparés : celui passant par eth0 et celui passant par tun0.
_________________________

profil | mail | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 22-04-2014 01:12

Bonjour, juste quelques remarques sur la sécurité des règles de netfilter :

Quote:
iptables -t filter -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT



* Tout le trafic UDP en provenance d'internet est potentiellement accepté (et pas seulement le flux OpenVPN) dès lors que le port source utilisé est le 1194 (ce qui se fixe sans problème pour un attaquant). (On peut faire la même remarque pour la règle du DNS.)

Quote:
iptables -t filter -A INPUT -i tun0 -j ACCEPT



* Là tout ce qui rentre par le serveur OpenVPN est accepté, c'est loin d'être idéal.

* Il est possible de filtrer plus précisément le trafic de la chaine INPUT par la règle
Code:
-m state --state RELATED,ESTABLISHED


profil | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 23-04-2014 22:27

Merci pour les remarques clanger, je me pencherai sur mes règles de filtrage quand j'aurai un peu plus de temps.
_________________________

profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 30-04-2014 08:00

Je viens d'appliquer les règles de filtrage recommandées par clanger.
Ca a également été l'occasion pour moi de constater que les POLICIES mise en place à l'aide de iptables-save (voir premier post) n'étaient plus en place. Le serveur a été rebooté plusieurs fois depuis que j'ai créé ce post donc je sais pas depuis combien de temps tout passe comme il veut... Je ne connais pas la raison de cet oubli des POLICIES par mon serveur et j'ai pas envie de chercher donc j'ai rajouté les règles directement dans mon script.

Le nouveau script devient donc :
Code:
#!/bin/sh
#On purge les règles de filtrages
iptables -t filter -F
#Par défaut, on bloque tout le trafic
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#On autorise la comminucation avec le PC de bureau
iptables -t filter -A INPUT -s 192.168.0.10 -j ACCEPT
iptables -t filter -A OUTPUT -d 192.168.0.10 -j ACCEPT

if [ $1 = "starting" ]
then
#On autorise les requêtes DNS pour la résolution du nom de domaine du VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
#On autorise les transactions avec le VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT

# iptables -A INPUT -j LOG --log-level debug
# iptables -A OUTPUT -j LOG --log-level debug
elif [ $1 = "started" ]
then
#On autorise les transactions avec le VPN
iptables -t filter -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT
#On autorise le trafic du VPN
iptables -t filter -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o tun0 -j ACCEPT

# iptables -A INPUT -j LOG --log-level debug
# iptables -A OUTPUT -j LOG --log-level debug
elif [ $1 = "stop" ]
then
echo "Seule la communication avec le réseau local est opérationnelle."

# iptables -A INPUT -j LOG --log-level debug
# iptables -A OUTPUT -j LOG --log-level debug
fi



_________________________


[ Ce Message a été édité par: casskroot le 2014-04-30 08:00 ]
profil | mail | edit | quote
hyatus
Inscrit le 25-08-2001
Avatar
Posté le 30-04-2014 10:05

Quote:

Le 30-04-2014 08:00, casskroot a écrit :
___________________________________________________

Je ne connais pas la raison de cet oubli des POLICIES par mon serveur et j'ai pas envie de chercher donc j'ai rajouté les règles directement dans mon script.




nice post

iptables-restore < /etc/iptables/rules
_________________________
Car la liberte n'est pas un Droit mais un Devoir, et que le savoir apporte la Liberte,alors la TAZ est ce qu'elle est, le reflet de la societe qui nait de ce qu'elle sait... ( hyatus copyleft )
profil | mail | Website | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 30-04-2014 12:39

Quote:

Le 30-04-2014 10:05, hyatus a écrit :
___________________________________________________
nice post

Ca fait pas de mal d'essayer de relever le niveau de temps en temps hein .

Quote:

Le 30-04-2014 10:05, hyatus a écrit :
___________________________________________________
iptables-restore < /etc/iptables/rules

Ha ba ouais, effectivement, ça va marcher beaucoup mieux...

_________________________


[ Ce Message a été édité par: casskroot le 2014-04-30 12:40 ]
profil | mail | edit | quote
aryngont
Inscrit le 09-08-2015
Posté le 11-08-2015 06:23

J'utilise plus les iptables pour comprendre le principe de fonctionnement du firewall. De plus je ne connais pas le firewall shorewall est-il plus simple à configurer pour ce que j'ai l'intention de faire ?
profil | edit | quote
jrfhhhy
Inscrit le 04-11-2015
Posté le 05-11-2015 05:15

Problème similaire en effet ! il y a quelques solutions ?
profil | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 05-12-2015 22:36

Salut,


je reviens vers vous pour une petite question.
Mon serveur se trouve derrière une freebox.
Je souhaiterais autoriser un PC externe à se connecter à certains ports. Pour ce faire je pensais faire un système de liste blanche par ip/port.

Petit problème, quand j'ai une connexion sur mon serveur depuis l'extérieur, c'est l'ip de ma freebox que je récupère puisque c'est elle qui s'occupe du routage.

Y'a moyen d'obtenir l'ip d'origine ?

_________________________


[ Ce Message a été édité par: casskroot le 2015-12-05 22:37 ]
profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 08-12-2015 20:27

Ne _jamais_ tester des règles de filtrage ciblant une IP du monde extérieur depuis un appareil qui appartient au même réseau local que le serveur...



Timmy !!
Timmy Timmy !!!

[ Ce Message a été édité par: casskroot le 2015-12-08 20:28 ]
profil | mail | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 10-12-2015 22:51

Pour ceux que ça intéresse, je fais maintenant tourner plusieurs services sur mon serveur mais je ne voulais qu'il n'y ait que torrent qui passe par le VPN.
J'ai utilisé cette solution pour séparer les trafics (création d'une nouvelle boucle locale virtuelle, binding du démon torrent sur cette interface et quelques règles iptables) :
https://tech.kanka.ch/index.php/faire-transiter-uniquement-les-torrents-dans-un-tunnel-openvpn-sur-un-serveur-debian/

[ Ce Message a été édité par: casskroot le 2015-12-10 22:59 ]
profil | mail | edit | quote
sylvie053
Inscrit le 07-01-2017
Posté le 07-01-2017 12:22

Quote:

Le 21-04-2014 13:03, casskroot a écrit :
___________________________________________________
Tant que j'y pense, je vais répondre aux question que je posais dans le premier topic :

- Est-ce que vous pourriez me confirmer que j'ai bien compris la doc d'iptables (notamment pour le --or-mark) ?

Oui, j'avais bien compris et ceux qui veulent faire des tests peuvent reprendre la syntaxe utilisée dans le premier message.


- Est-ce que vous pourriez me confirmer que tun0 étant un périphérique virtuel, tout ce qui passe par tun0 passe nécessairement par eth0 et que iptables devrait voir des paquets qui passent par eth0 puis par tun0 lorsqu'ils entrent et par tun0 puis par eth0 lorsqu'il sortent ?

Quand j'ai analysé mes Compositeur musique pub trames, j'ai eu l'occasion de voir que bien que les paquets envoyés à tun0 passent physiquement par eth0, c'est totalement transparent à notre niveau et qu'on a bien deux trafics séparés : celui passant par eth0 et celui passant par tun0.




bonjour!
Je ne suis pas vraiment à l'aise avec tous ces termes assez complexes!
Merci!
profil | edit | quote
Newtopic | Reply

Online : wesh et 32 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page