非常に奇妙な問題があります。 2つのネットワークインターフェースを持つサーバーがありますeth0
。eth1
各インターフェイスは異なるネットワークに接続されています。すべてのネットワークにはインターネットゲートウェイがあります。さまざまなサーバーがあります国を離れる接続:http(ウェブサイトをスクラップするためのサーバーの一部のスクリプト)、nfsクライアント、Sambaクライアント、dnsクライアント、および電子メールゲッターなどがあります。
詳しくは説明しないため、アウトバウンドhttp、nfs、samba、およびdnsトラフィックのみを要求し、他のすべてのトラフィックはeth0
通過するようにこれらのアウトバウンドクライアントを分割する必要がありますeth1
。
私はGoogle検索をいくつか読んでいましたが、それはiptables
私に必要なようですが、実際には手がかりはありません。私はインバウンドファイアウォールルールの管理にのみ慣れていますufw
。
誰かがいくつかのサンプルルールから始めて、システムが起動時にこれらのルールを採用する方法を教えてください。理想的には、SSH接続をロックせずに(Iできる物理的にアクセスできますが、望ましくありません)。
編集する1つのアカウントから1つのインターフェイスにすべてのアウトバウンドトラフィックを制限できる場合は、クライアントを2人のユーザーに分割できます。紙では簡単に見えるかもしれません。
答え1
別々のルーティングテーブルとそのテーブルを使用して、タグ付きパケットをルーティングし、iptables / netfilterに特定のパケットを表示させるポリシーを設定しました。
テーブルを作成します。
echo 1 known >> /etc/iproute2/rt_tables
ルーティングルールの作成(ip
次のコマンドIP ルート 2):
ip rule add from all fwmark 1 table known
「通知済み」というテーブルを作成し、タグが1のすべてのパケットが「既知の」テーブルに従ってルーティングされるというルーティングルールを作成します。既知のプロトコルリストのためであるため、既知の名前と呼ばれます。必要に応じて名前を付けることができます。これで、正しい方法でルーティングされるように既知のテーブルを設定しました。
ip route add default dev eth0 table known
iptablesルールを生成します。
iptables -t mangle -I PREROUTING -p tcp --dport 111 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p tcp --dport 2049 -j MARK --set-mark 1
この例では、NFSポート(111、2049)のパケットを1としてマークします。このルールを "mangle" iptable に追加します。これはルーティングテーブルとは異なり、変更できません。マングルテーブルは、NAT以外の方法でパケットを変更するように設計されています。
次に、他のインターフェイスを介して他のすべてをルーティングするために、標準のルーティングテーブルにパスを追加します。
ip route add default dev eth1
これを正しく理解するには、セクション4とセクション11をお読みください。LARTC オペレーションガイド。
答え2
まあ、」最も単純な「単一のプログラムに特定のインターフェイス(またはそのインターフェイスのIP)を使用するように指示する方法が必要です。たとえば、次のようになります。
ping -I eth1 8.8.8.8
eth1をソースインタフェースとして使用するようにpingに指示し、
wget --bind-address 10.0.0.1 http://www.google.it/
wgetに以下を指示してください。経験10.0.0.1
IPアドレスを持つインターフェイス。
正直なところ可能かもしれません。みんな手順が必要ですが、作成する必要がある規則iptables
と手順を減らすことの始まりです。iproute
始めるには、次の内容をお読みください。このチュートリアル存在する複数のインターネット接続。よく読むこともその一つです。数千iptables、特にoutbound filtering
/とのチュートリアルprocess
です。pid filtering
port filtering
答え3
正しい方法は、発信パケットに使用するインターフェイスにバインドすることです。その後、ip route
コマンドを使用してルーティングを設定し、発信インターフェイスip rule
に応じてパケットのルーティング方法を制御できます。私の例では、次のネットワークを想定します。
- eth0:
- 住所:192.168.0.2/24
- デフォルトゲートウェイ:192.168.0.1
- イーサネット1:
- 住所:192.168.1.2/24
- デフォルトゲートウェイ:192.168.1.1
2つのルーティングテーブルを作成します。 1つは「alternate」というeth0から出るトラフィック用、もう1つは「main」というeth1用のテーブルです。ルーティングテーブルmainは常に存在し、route
コマンドに使用される一般的なテーブルですip route
。ほとんどの人は他のテーブルを扱っていません。代替と呼ばれるテーブルを作成するには、次の行を追加します/etc/iproute2/rt_tables
。
10 alternate
基本表のデフォルト優先順位は254です。ルーティングテーブルに適用されるルールは、ip rule
コマンドによって制御されます。デフォルトでは、このコマンドは次の既存のルールのリストを印刷します。
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
local
これは、デフォルトでは、ローカルパス(たとえば、私のIPアドレス)に対してカーネルが管理する特別なテーブルであるtableでパスを検索することを意味します。その後、テーブルマスターとテーブルのデフォルト値を試します。テーブルのデフォルト値は通常空であるため、デフォルトに一致するエントリがない場合、ホストへのパスはありません。まず、eth0のルールを交互に使用してテーブルを入力します。
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
通常、テーブルはテーブルalternate
と似ているように見えることを望みます。main
唯一の違いは、ルーティングが異なる必要があることです。すべてのNFS、HTTPなどのトラフィックがeth0のデフォルトゲートウェイを通過するようにしたい場合は、宛先がeth1のネットワークであっても上記の2行目を含めたくはありません。次のステップは、この代替ルーティングテーブルを使用するタイミングに関するルールを追加することです。
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
このルールは、192.168.0ネットワークのアドレスからのすべての着信トラフィックが通常のalternate
テーブルではなくルーティングテーブルを使用することを意味しますmain
。最後のステップは、すべてのeth0
クライアントがバインディングを使用する必要があることを確認することです。wget
たとえば、--bind-address=192.168.0.2
NFSのclientaddr=192.168.0.2
マウントオプションを設定するには、setを使用します。 PerlでLibWWWを使用している場合は、LWP :: UserAgentでlocaladdrオプションを設定して、バインドするローカルインターフェイスを制御できます。ソースバインディングとコンパイルを制御できないクライアントがある場合は、iptablesルールを使用してそのアドレスを変更できますが、これはハッキングに近いので動作しない可能性があります。 nat テーブルまたは mangle テーブルの PREROUTING チェーンで SNAT ルールを設定する必要があります。機能するには、上記の変更されたルーティングテーブルがまだ必要です。