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


10

匿名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
ループバック* 255.0.0.0 U 0 0 0 lo
デフォルト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
デフォルトddwrt 0.0.0.0 UG 202 0 0 eth0

回答:


15

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

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

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

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

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

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

cat /etc/iproute2/rt_tables

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

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

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

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

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

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

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

ip rule show | grep fwmark

grepで何も表示されない場合、問題はありません。一部の行が表示される場合は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の作成を除く)。次回コンピューターを再起動したときにクリアされます。それらを永続的にすることは、私があなたに残した課題です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.