web-dev-qa-db-ja.com

ファイアウォールの背後にあるLinuxマシンへのリモートアクセス

Linuxマシンを一種のパブリックターミナルとして遠隔地に導入します。メンテナンスのためにSSHを介してリモートでアクセスできるようにしたいのですが、このマシンにアクセスする必要があるまれな場合のために、リモートファイアウォールのポートを開いたままにしたくありません。外部のマシンへの逆SSHトンネルを作成する簡単なスクリプトについては説明しましたが、アクセスする必要があるときにユーザーに何もする必要はありません。何か案は?

更新:逆sshトンネルを作成するためのスクリプトの当初の計画を採用することにしました。ポートノッキングなどの他の提案された解決策は、私が本当にやりたいことに沿ったものですが、この場合、ユーザーに構成を説明する以外に、ルーターを構成するためのアクセス権がありません。 震え

10
baudtack

それは、ポートが開いていることを心配することとは関係がなく、ポートを開くプロセスを通してユーザーを歩きたくないことと関係があります。残念ながら、このルーターにはまったくアクセスできません。

ルーターの変更がまったく問題にならない場合は、 Hamachi のようなP2PまたはVPNソリューションを検討する必要があるかもしれません。起動時にVPN接続を自動的に確立するようにシステムを設定すると、必要なときにいつでも接続できるようになります。ハマチはあなたのためにすべてのファイアウォールの交渉を行います。 1つの欠点は、接続する必要があるときにHamachiサーバーが稼働して機能していることに依存する必要があることです。

常に稼働しているサーバーがある場合は、リモートシステムが常にトンネルを開いたままにしてサーバーに接続するように autossh を設定できます。 1つの欠点は、リモートシステムが危険にさらされ、攻撃者がsshセッションの確立に使用されたキーを取得することです。 ssh接続を受け入れるシステムを本当にロックダウンしておくことは非常に重要です。


以下は私の元の答えですが、ルータの更新はオプションであると想定していました。

ファイアウォールがそれをサポートしているかどうかを調査したい1つの解決策は、 ポートノッキング です。一部のファイアウォールでは、ファイアウォールが通知する特別なパケットのセットを送信し、一時的にファイアウォールに穴を開けることができるはずです。

他の実装よりも優れた実装が多数あります。強力な暗号化を使用して、正しいキーがない人が正しいノックを送信することをほぼ不可能にする人もいます。

5
Zoredache

ポート22をインターネットにアクセスできるようにしておくことはそれほど心配しませんが、それを保護するためにいくつかの手順を実行します。

まず、キーボードのインタラクティブ認証を無効にし、sshキーに移動します。

次に、リモートサーバーに fail2ban のようなものをインストールして、マシンを繰り返しプローブするブラックボールIPアドレスをインストールします。 sshキーを設定しているので、許可されたユーザーの認証に失敗することはありません。

または、可能であれば、WerkkreWsのアドバイスを受けて、マシンの前にあるファイアウォールを構成してVPN接続を終了し、リモートサーバー上のsshデーモンのみがそのVPNを経由する接続を受け入れるようにします。

または、ファイアウォールがVPN接続を終了できない場合は、GREまたはIPSECパケットをLinuxマシンに転送し、そこで終了することができます。

6
Dave Cheney

お探しのようですknockd

iptablesを使用してLinuxサーバー自体にインストールできるため、第2レベルのファイアウォールのようなものになります。フロントエンドファイアウォールでポート22が開いていても、サーバーでは開いていないため、ポートスキャンは開いているポートを認識しません。次に、「シークレットノック」を送信すると、突然、ポート22へのオープンパスができます。

それは理にかなっていますか?

4
Brent

すべての答えを要約するには:

sshを使用しますが、よりあいまいで安全なものにします。

セキュリティのため:

  • ルートログインが許可されていないことを確認してください(PermitRootLogin no)。
  • 設定オプションAllowUsersまたはAllowGroupsでログインできるユーザーを制限します。
  • 2バージョンのsshプロトコル(プロトコル2)のみを使用していることを確認してください。
  • 認証キーのみを使用することをお勧めしますが、認証キーにアクセスできない休日からサーバーに接続する必要がある場合は、パスワードの方が便利です。

あいまいさの場合:

  • Sshポートを20486のような覚えやすいランダムなハイポートに変更します。これにより、ほとんどの自動ブルートフォーサーが取り除かれますが、サーバー上のすべてのポートスキャンから非表示にはなりません。
  • ポートに接続する機能を非表示にします。 1つの方法は、他の回答で言及されているポートノッキングですが、どこからでもアクセスできない特別なソフトウェアが必要です。もう1つの簡単なオプションは、最近のモジュールでiptablesファイアウォールを使用してルールを作成することです。これにより、2回目または3回目の試行でのみ接続が許可されます。したがって、正常に接続するには数回試行する必要があることはわかっていますが、単純なすべてのポートスキャンではsshポートは明らかになりません。ルールは次のようになります。

iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP
3

スケジュールされたタスクは、リバースsshトンネルのスクリプトであるか、ファイアウォールポートを開きます。

SSHが世界中に公開されていることを心配している場合は、iptablesスクリプトを使用してメンテナンス期間中にタスクをスケジュールし、そのときに利用できるポートのみを用意することができます。

2
sclarson

port-knocking を調べて、SSHトンネルを開きます。

また、denyhostsを実行して、悪いリクエストが多すぎる場合にユーザーをロックアウトします。

どちらのパッケージも、標準のUbuntu、Fedora、およびRHELリポジトリで使用できます。

2
Tim Howland

先に進んでポートを開き、通常の範囲外のポートにします。私はそれを1024以上のランダムなポートにします。そうすれば、ハッカーはそれを探すことすらできないでしょう。

1
Brad Gilbert

マシンにリモートでアクセスする必要がある場合は、ファイアウォールに穴を開けない理由はありませんが、まれです。

ただし、それでもポートを開かない(またはできない)場合は、単純なシェルスクリプトが、制御し、リバーストンネルを起動するコマンドをリッスンするインターネットで利用可能なリソースを監視できます。電子メールアカウント、IRCチャネル、およびWebページは、トリガーデバイスとしてすぐに思い浮かびます。

もちろん、これは単にポートを開くよりもはるかに脆弱で安全性が低くなります。しかし、あなたにはあなたの理由があると確信しています。

0
Brian