J'ai un problème plutôt étrange. J'ai un serveur avec deux interfaces réseau eth0
et eth1
. Chacun est connecté à un réseau différent. Chaque réseau possède une passerelle Internet. Le serveur a diverses connexions sortantes : http (certains scripts sur les sites Web de serveur scrape), client nfs, client samba, client dns et un récupérateur de courrier électronique pour n'en nommer que quelques-uns.
Pour des raisons que je ne vais pas aborder, j'ai besoin de diviser ces clients sortants afin que le trafic http, nfs, samba et dns sortant soit uniquement demandé pendant eth0
que tout le reste se déroule eth1
.
J'ai lu quelques recherches sur Google et il semblerait que iptables
ce dont j'ai besoin, mais je n'en ai vraiment aucune idée. Je ne suis habitué qu'à gérer les règles de pare-feu entrantes via ufw
.
Quelqu'un pourrait-il me lancer avec quelques exemples de règles et me dire comment amener le système à adopter ces règles au démarrage? Idéalement sans me verrouiller hors de ma connexion SSH (je peux obtenir un accès physique, mais je préfère ne pas).
Modifier Je peux diviser les clients en deux utilisateurs s'il est possible de limiter tout le trafic sortant d'un compte à une interface. sur papier qui semble être plus facile.
iftop
et ils affichent chacun le bon type de trafic. Merci beaucoup.iptables-save
etiptables-restore
. Si vous utilisez NetworkManager, vous pouvez configurer des scripts de répartiteur pour automatiser le processus. Malheureusement, la page NM officielle n'a pas de documentation sur la fonctionnalité, mais la documentation Ubuntu et Arch Linux la mentionnent toutes les deux.Eh bien, la façon la plus " simple " devrait être de demander aux programmes individuels d'utiliser une interface spécifique (ou l'ip de l'interface. Par exemple:
demande à ping d'utiliser eth1 comme interface source, tandis que
demande à wget de passer l'interface qui a
10.0.0.1
comme adresse IP.Honnêtement, je ne sais pas si c'est possible avec tous les programmes dont vous avez besoin, mais c'est un début pour réduire les règles pour lesquelles vous devez écrire
iptables
etiproute
programmes.Pour commencer, vous devriez lire ce tutoriel sur plusieurs connexions Internet . Une bonne lecture est aussi l' un des milliers de tutoriels iptables, expecially sur
outbound filtering
,process
/pid filtering
etport filtering
.la source
La bonne façon d'y parvenir est de lier () à l'interface que vous souhaitez utiliser pour les paquets sortants. Puisque vous pouvez ensuite configurer des itinéraires avec les commandes
ip route
etip rule
pour contrôler la façon dont les paquets sont routés en fonction de leur interface sortante. Pour mon exemple, je suppose que le réseau suivant:Je vais créer deux tables de routage, une pour le trafic sortant pour eth0 appelée alternative et une table pour eth1 appelée principale. La table de routage principale existe toujours et est la table normale utilisée par les commandes
route
etip route
. La plupart des gens ne traitent jamais avec d'autres tables. Pour créer la table appelée alternative, nous ajouterons la ligne suivante à/etc/iproute2/rt_tables
:La table main a une priorité par défaut de 254. Les règles pour lesquelles la table de routage est en vigueur sont contrôlées par la
ip rule
commande. Par défaut, cette commande affichera une liste des règles existantes qui devraient ressembler à ceci:Cela signifie essentiellement qu'il recherchera une route dans la table
local
qui est une table spéciale maintenue par le noyau pour les routes locales telles que ma propre adresse IP. Il essaiera ensuite table main et table default. La table par défaut est normalement vide, donc s'il n'y a pas de correspondance dans main, il n'y a pas de route vers l'hôte. Tout d'abord, permet de remplir la table en alternance avec des règles pour eth0.Vous souhaiterez normalement que la
alternate
table ressemble à lamain
table. Les seules différences sont lorsque le routage doit être différent. Vous pouvez ne pas vouloir inclure la deuxième ligne ci-dessus si vous voulez littéralement que tout le trafic NFS, HTTP, etc. passe par la passerelle par défaut sur eth0 même s'il est destiné au réseau sur eth1. L'étape suivante consiste à ajouter une règle pour savoir quand utiliser cette table de routage alternative:Cette règle indique que tout trafic provenant d'une adresse sur le réseau 192.168.0 utilisera la
alternate
table de routage au lieu de lamain
table normale . La dernière étape consiste à s'assurer que tous les clients qui doivent utiliser y sonteth0
liés. Avecwget
, par exemple, set--bind-address=192.168.0.2
, pour NFS, définissezclientaddr=192.168.0.2
option de montage. Si vous utilisez LibWWW avec Perl, vous pouvez définir l'option localaddr dans LWP :: UserAgent pour contrôler l'interface locale à laquelle il se lie. Si vous avez un client dont vous ne pouvez pas contrôler la liaison et que la compilation n'est pas une option, vous pouvez peut-être utiliser une règle iptables pour modifier son adresse, mais il s'agit plus d'un piratage et peut ne pas fonctionner. Vous auriez besoin d'une règle SNAT configurée dans la chaîne PREROUTING de la table nat ou de la table mangle. Vous aurez toujours besoin des tables de routage modifiées données ci-dessus pour que cela fonctionne.la source