2+プロバイダーを使用します(第2部)

前の記事で説明したゲートウェイの構成を続けます。 ルーティングルールを設定したら、iptablesを実行する必要があります。 次に、ゲートウェイとサーバーで構成されるネットワークをセットアップします。 SSHとDNSはゲートウェイ上で動作し、RDPとSMTPを備えたサーバーがゲートウェイ上にあります。 ネットワークは、任意の外部IPを介して任意のサーバーに接続できるように構成され、SMTPサーバーはメインプロバイダーを介して外部に移動します。



そしてもちろん、変数から始めて、次の設定を別のファイルに入れてみましょう。これは将来私たちにとって非常に役立つでしょう:

#!/ bin / bash



エクスポートGLOBAL_ETH_PRIM = eth1

エクスポートGLOBAL_ETH_SEC = eth2

GLOBAL_IP_PRIM = 10.10.10.10をエクスポート

エクスポートGLOBAL_IP_SEC = 20.20.20.20

MARK_PRIM = 10をエクスポート

MARK_SECをエクスポート= 20



このファイルをipt_p1.confと呼びます。 また、どのインターフェイスがメインであり、どのインターフェイスがスペアであるかに関するデータ(それぞれ、PRIMおよびSEC)およびパケットをマーキングするための値が含まれています。

メインのiptables構成ファイルに移動して、それをipt.confと呼びましょう。 変数を書きます;-)

#!/ bin / bash

IPTABLES = / sbin / iptables

MODPROBE = / sbin / modprobe



これは、配布(実行可能ファイルへのパス)への依存を少なくするためです。

LOCAL_ETH = eth0

GLOBAL_ETH_P1 = eth1

GLOBAL_ETH_P2 = eth2

LOCAL_IP = 192.168.0.1

LOCAL_NET = 192.168.0.0 / 24

GLOBAL_IP_P1 = 10.10.10.10

GLOBAL_IP_P2 = 20.20.20.20


ここで、ネットワークの構成を順番に説明しました。ローカルインターフェイス、プロバイダーを見るインターフェイス、ローカルIPとサブネット、プロバイダーによって発行されたIPアドレス。

SRV11 = 192.168.0.11

SRV12 = 192.168.0.12



これは、ラベルを使用してポリシーベースのルーティングを構成したサーバーです。 既に述べたように、このサーバーのネットワークインターフェイスには2つのIPがありますが、そのすぐ下で、これがなぜ役に立つのかを説明します。

。 1ドル


外部設定をフックしました。この場合、それはipt_p1.confファイルになります。

退屈なことはもう十分だから、セットアップに取り掛かり、すべてを美しくしようとしましょう。

echo "[+]既存のiptablesルールをフラッシュしています..."

$ IPTABLES -F

$ IPTABLES -F -t nat

$ IPTABLES -F -t raw

$ IPTABLES -F -tマングル

$ IPTABLES -X

$ IPTABLES -P入力ドロップ

$ IPTABLES -P出力ドロップ

$ IPTABLES -Pフォワードドロップ



すべてのiptablesルールをクリアします。最初の行では、何をするのか、なぜ英語で行うのかを述べています。そのため、エンコーディングに問題はありません。 最後の3行はデフォルトでルールを設定します-ルールのリストに適合しないすべてのパケットは単に破棄されます。

$ MODPROBE ip_conntrack

$ MODPROBE iptable_nat



使用するカーネルモジュールをロードしました。

次に、iptablesチェーンを調べて、必要なルールを入力します。

echo "[+] INPUTチェーンをセットアップしています..."



$ IPTABLES -A入力-m状態--state無効-jドロップ

$ IPTABLES -A INPUT -m state --state ESTABLISHED、RELATED -j ACCEPT



状態モジュールの機能を使用して、無効なパケットを破棄し、既に確立された接続またはセカンダリ接続(ftpへのデータ転送など)に関連するパケットを受け入れます。

$ IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT


どこからでもSSH接続を受け入れます。

$ IPTABLES -A入力-i $ LOCAL_ETH -s $ LOCAL_NET -j ACCEPT


ローカルトラフィックは制限なしに送信されますが、これは常に正しいとは限りません。

$ IPTABLES -A入力-i lo -j ACCEPT


localhostでも。

OUTPUTチェーンの継続:

echo "[+] OUTPUTチェーンのセットアップ..."



$ IPTABLES -A出力-m状態--state無効-jドロップ

$ IPTABLES -A出力-m状態--state確立、関連-j ACCEPT



これらのルールは、INPUTチェーンのルールに似ています。

$ IPTABLES -A出力-o $ GLOBAL_ETH_PRIM -p udp --dport 53 -j ACCEPT


DNSサーバーがメインプロバイダーを介して動作することを許可しました

$ IPTABLES -A出力-o $ GLOBAL_ETH_PRIM -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT


また、SSHで外に出ることができました。

$ IPTABLES -A出力-o $ LOCAL_ETH -d $ LOCAL_NET -m state --state NEW -j ACCEPT


繰り返しますが、発信ローカルトラフィックには制限がありません。

ローカルネットワークからのトラフィックの処理に進みます。

echo "[+] FORWARDチェーンを設定しています..."



$ IPTABLES -A FORWARD -m state --state INVALID -j DROP

$ IPTABLES -A FORWARD -m state --state ESTABLISHED、RELATED -j ACCEPT


すべて同じ2つの便利なルール。

$ IPTABLES -A FORWARD -i $ GLOBAL_ETH_P1 -d $ SRV11 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT

$ IPTABLES -A FORWARD -i $ GLOBAL_ETH_P2 -d $ SRV12 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT

$ IPTABLES -A FORWARD -i $ GLOBAL_ETH_P1 -d $ SRV11 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT

$ IPTABLES -A FORWARD -i $ GLOBAL_ETH_P2 -d $ SRV12 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT


そのため、最初のプロバイダーに到着したパケットは、最初のサーバーIPにのみ渡され、2番目から2番目に渡されることがわかりました。

$ IPTABLES -A FORWARD -i $ LOCAL_ETH -s $ SRV11 -j ACCEPT

$ IPTABLES -A FORWARD -i $ LOCAL_ETH -s $ SRV12 -j ACCEPT



サーバーからのすべての発信トラフィックを拡大しますが、これも完全に正しいわけではありません。

NATルールは次のとおりです。

$ IPTABLES -t nat -A POSTROUTING -s $ SRV11 -p tcp --dport 25 -j SNAT --to-source $ GLOBAL_IP_PRIM

$ IPTABLES -t nat -A POSTROUTING -s $ SRV12 -p tcp --dport 25 -j SNAT --to-source $ GLOBAL_IP_PRIM



サーバーがSMTP経由で送信しようとするものはすべて、メインプロバイダーを経由します。

そして再び、最も興味深いことは最後に私たちに任されています。 PREROUTINGに渡します。ここでは、これらの2行のルーティングに必要なパケットをマークする機会を使用します。

IPルールは$ SRV11 fwmark 10テーブルT1から追加します

IPルールは$ SRV12 fwmark 20テーブルT2から追加します



したがって、私たちのルール:

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV11 -p tcp --dport 25 -j MARK --set-mark $ MARK_PRIM

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV12 -p tcp --dport 25 -j MARK --set-mark $ MARK_PRIM



ポート25で内部サーバーを出るすべてのパケットは、値$ MARK_PRIMでマークされます。 これが私たちに与えるものを見てみましょう:発信パケットは値10でマークされているため、テーブルT1に従ってルーティングされ、このテーブルに対応して、パケットは最初のプロバイダーを通過する必要があり、FORWARDチェーンに許可ルールがあるため、パケットはスムーズに通過します-すべてが正しいです必要です。

ここで、接続を処理する必要があります。 もちろん、最初にDNATを解決する必要があります。

$ IPTABLES -t nat -A PREROUTING -i $ GLOBAL_ETH_P1 -d $ GLOBAL_IP_P1 -p tcp --dport 25 -j DNAT --to-destination $ SRV11

$ IPTABLES -t nat -A PREROUTING -i $ GLOBAL_ETH_P1 -d $ GLOBAL_IP_P1 -p tcp --dport 3389 -j DNAT --to-destination $ SRV11

$ IPTABLES -t nat -A PREROUTING -i $ GLOBAL_ETH_P2 -d $ GLOBAL_IP_P2 -p tcp --dport 25 -j DNAT --to-destination $ SRV12

$ IPTABLES -t nat -A PREROUTING -i $ GLOBAL_ETH_P2 -d $ GLOBAL_IP_P2 -p tcp --dport 3389 -j DNAT --to-destination $ SRV12



すべてが正しいようです、チェックします:プロバイダーのインターフェイスに応じて、ゲートウェイの外部インターフェイスにパケットが到着し、内部サーバーの最初または2番目のIPアドレスにリダイレクトされ、サーバーは同じIPアドレスから応答します(!)、ゲートウェイ上のパケットはメインテーブルに沿ってルーティングされ、パスしますFORWARDを介してメインプロバイダーを介して送信されますが、パケットはバックアッププロバイダーを介して送信される可能性があるため、これはもはや正しくありません。 ルールを追加して修正します。

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV11 -p tcp --sport 25 -j MARK --set-mark $ MARK_PRIM

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV11 -p tcp --sport 3389 -j MARK --set-mark $ MARK_PRIM

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV12 -p tcp --sport 25 -j MARK --set-mark $ MARK_SEC

$ IPTABLES -t mangle -A PREROUTING -i $ LOCAL_ETH -s $ SRV12 -p tcp --sport 3389 -j MARK --set-mark $ MARK_SEC



さて、戻る途中で、パケットの送信元アドレスに従ってパケットをマークします。 次に、ルーティングテーブルT1およびT2が作用するため、パケットを送信するインターフェイスを正しく決定します。

それだけです! できた ルールを適用するには、コマンド"./ipt.conf ipt_p1.conf"を実行します。 これでサーバーが使用可能になり、少なくとも1つのプロバイダーがインターネットへのアクセスを許可しました。

また、プロバイダーを切り替えてコメントを2つ作成する方法についても説明したかったのですが、記事の量は既に大きすぎます。



最初と2番目の部分からスクリプトをダウンロードします。



私のブログの元の記事2+プロバイダーを使用します(第2部)

ps自分を理解し、他の人に伝えるために書かれています。



All Articles