web-dev-qa-db-ja.com

OpenVPNの匿名化により内部サーバーへのSSHアクセスを許可

匿名VPNを使用していますが、内部コンピューターへのSSHアクセスが必要です。

SSH経由で内部コンピューターにアクセスするにはどうすればよいですか? ssh 98.123.45.6を実行すると、接続がタイムアウトします。

  • ケーブルプロバイダーからのIPアドレス:98.123.45.6
  • VPN経由の匿名IP:50.1.2.3
  • 内部コンピューター:192.168.1.123

周りを検索したところ、iptablesルールやルーティングルールを設定したり、sshd_configにListenAddressを追加したりするための推奨事項が見つかりました。これらのどれが私のケースに当てはまりますか?

これが私のルートです:

カーネルIPルーティングテーブル
宛先ゲートウェイGenmaskフラグメトリックRef Use Iface 
 10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0 
 10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0 
 50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0 
 192.168.1.0 * 255.255.255.0 U 202 0 0 eth0 
 169.254 .0.0 * 255.255.0.0 U 204 0 0 vboxnet0 
 loopback * 255.0.0.0 U 0 0 0 lo 
 default 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 
 128.0。 0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 
 default ddwrt 0.0.0.0 UG 202 0 0 eth0 
10
Lionel

この問題を解決するには、両方 iptablesとルーティングルールを設定する必要があります。発生している特定の問題は、発信SSHパケットがイーサネットインターフェイスではなく匿名VPNトンネルインターフェイス経由でルーティングされていることです。これは、VPNソフトウェアがルーティングルールを設定して、未処理のすべてのトラフィックをトンネルインターフェイス経由で送信するために発生します。ネットワークトラフィックの匿名化に適しています。お使いのコンピューターへのSSH接続を確立するための悪い。

この問題を解決する方法はいくつかありますが、同じ状況で私のために働いた方法を紹介します。これが私たちがする必要があることです:

  1. 非VPNトラフィックを処理する新しいIPルールテーブルを作成する
  2. IPルールを追加して、特定のnetfilterマスクでマークされたパケットのVPNなしテーブルを検索します
  3. トンネルの代わりにイーサネットインターフェイスを使用するように、VPNなしのテーブルのすべてのトラフィックを転送するIPルートを追加します
  4. Iptablesルールを追加して、指定したnetfilterマスクですべてのSSHトラフィックをマークします。

注:以下を実行しているときにRaspbianで作業していたため、ディストリビューションに合うようにmightコマンドを少し調整する必要があります。

新しいIPルールテーブルの作成

まず、iproute2のテーブル定義ファイルを調べます。既存のルールテーブルの名前や数を使用しないようにしたいと思います。

cat /etc/iproute2/rt_tables

あなたはおそらくこれらの線に沿って何かを見るでしょう:

# reserved values
255      local 
254      main
253      default   
0        unspec
#
# local
#
#1      inr.ruhep

新しいルールテーブルの任意の番号と名前を選択します-上記で使用されていないもの。この回答の残りの部分では、番号201と名前novpnを使用します。

定義を定義ファイルに直接追加するか、任意のテキストエディターで編集します。

echo "201 novpn" >> /etc/iproute2/rt_tables

新しいIPルールを追加して、VPNなしのテーブルを検索します

Netfilterマスクを処理する既存のIPルールを確認します。

ip rule show | grep fwmark

Grepで何も表示されない場合は、問題ありません。一部の行が出力される場合は、各行のWord fwmarkの右側にある16進数を書き留めてください。現在使用されていない番号を選択する必要があります。既存のfwmarkルールがなかったので、65を選択しました。

ip rule add fwmark 65 table novpn

これにより、netfilterマスク65を持つすべてのパケットは、パケットのルーティング方法について、新しいnovpnテーブルを検索します。

新しいテーブルのすべてのトラフィックにイーサネットインターフェイスを使用するように指示する

ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn

ここで注意すべき重要な点はdev eth0。これにより、novpnテーブルを通過するすべてのトラフィックは、VPNが作成する仮想トンネルインターフェイスではなく、ハードウェアイーサネットインターフェイスのみを使用するようになります。

今度は、iprouteキャッシュをフラッシュして、新しいルールとルートがすぐに有効になることを確認する良いタイミングです。

ip route flush cache

指定されたnetfilterマスクですべてのSSHトラフィックをマークするようにファイアウォールルールに指示します

iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65

オプションが多すぎて、詳しく説明できません。 iptablesのマニュアルページを読んで、ここで何が起こっているのかを理解することを強くお勧めします。

man iptables

簡単に言うと、ファイアウォールのマングルテーブル(特殊なパケット処理用)に出力ルールを追加し、指定されたnetfilterマスク65でソースポート22から発信されたすべてのTCPパケットをマークするように指示します。

次は何?

この時点で、SSHをテストする準備ができているはずです。すべてがうまくいけば、「login as」プロンプトが表示されます。

セキュリティ上の理由から、トンネルインターフェイスからの着信SSH要求をすべてドロップするようにファイアウォールに指示することをお勧めします。

iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP

上記の手順はすべて一時的なものであることに注意してください(ルールテーブルIDの作成を除く)。次にコンピューターを再起動したときに、これらの手順はクリアされます。それらを永続的なものにすることは、私があなたに残した課題です。

15
Ben D.