GNU/Linux >> Linux の 問題 >  >> Linux

LinuxOpenSSHサーバーについて知っておくべきことすべて

OpenSSHスイートは、ネットワークシステム間でのデータのリモート制御と転送を容易にすることを目的とした堅牢なツールのコレクションです。これは、SSH、SCP、SFTP、SSHDなどの多くのツールで構成されています。 sshを使用してリモートマシンにログインするたびに、OpenSSHサーバーを利用する可能性が高くなります。このガイドでは、OpenSSHがどのように機能するか、および増大するセキュリティ要求を満たすためにOpenSSHを適切に利用する方法について詳細に説明します。したがって、OpenSSHの複雑さについて詳しく知りたい場合は、このガイド全体を通して私たちと一緒にいてください。

OpenSSHサーバーとサービスの詳細

OpenSSHサーバーは、LinuxやBSDマシン間のリモート通信の中心に位置しています。その注目すべき機能には、トラフィックの暗号化、いくつかの強力な認証方法、安全なトンネリング、高度な構成機能などがあります。以下のセクションでは、基本的なサービスとセキュリティのヒントについて有意義な理解を提供します。

OpenSSHサーバーの基礎

その名前が示すように、OpenSSHはSSH(Secure Shell)プロトコルを利用して、リモート接続とデータ転送機能を提供します。 LinuxFTPコマンドやtelnetなどのレガシーメソッドに関連するセキュリティの脆弱性を取り除きます。 OpenSSHを使用すると、正当なユーザーを簡単に認証し、リモート接続を暗号化できます。

リモート接続の管理を担当するOpenSSHスイートのコアユーティリティは、OpenSSHサーバーまたはsshdです。着信リクエストを常にリッスンし、新しいリクエストが着信したときに適切な接続タイプを設定します。

たとえば、ユーザーがsshクライアントプログラムを使用してサーバーと通信する場合、sshdは認証が成功するとすぐにリモートコントロールセッションをセットアップします。ユーザーが代わりにSCPを使用する場合、sshdはセキュアコピーセッションを開始します。

エンドユーザーは、接続に適した通信メカニズムを選択する必要があります。これは、ssh-addやssh-keygenなどのツールによって容易になります。ユーザーがsshコマンドを使用してリモートマシンに正常に接続すると、テキストベースのコンソールが表示されます。このコンソールで入力されたコマンドはすべて、暗号化されたSSHトンネルを介して送信され、リモートマシンで実行されます。

OpenSSHサーバーのインストールと構成

次のセクションでは、OpenSSHサーバーデーモンをインストールして構成する方法について説明します。個人使用と企業目的の両方に最適な構成オプションを示します。また、このセクションの最後で、OpenSSHを構成および強化するためのベストプラクティスの概要を説明します。

OpenSSHサーバーのインストール方法

---

最新のLinuxディストリビューションのほとんどには、OpenSSHがすでにインストールされています。ただし、手動でインストールする必要がある場合は、次の簡単なコマンドを使用してインストールできます。

$ sudo apt install openssh-server

このコマンドはサーバーデーモンをインストールします。以下のコマンドを使用して、OpenSSHクライアントをシステムにインストールします。

$ sudo apt install openssh-client

OpenSSHサーバーを構成する方法

OpenSSHは、通信設定や認証モードなどを制御するための多数の構成オプションをサポートしています。 sshd_configファイルは、構成パラメーターを指定し、1つ以上のホストキーを含む他の構成ファイルのアドレスを保持します。 ファイルとauthorized_keys ファイル。 / etc / ssh /にあります ファイルシステムのディレクトリ。

パラメータの一部を微調整する前に、 sshd_configの現在のコピーをバックアップすることをお勧めします。 ファイル。これを行うには、お気に入りのLinuxターミナルエミュレータを開き、次のコマンドを発行します。

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

このように、 sshd_configを台無しにした場合 ファイルの場合、いつでも元の構成に戻すことができます。これで、sshサーバーの構成に進むことができます。その前に、以下の簡単なコマンドを使用して、効果的なsshd構成をテストすることをお勧めします。

$ sudo sshd -T

これで、 sshd_confiをバックアップしました。 gファイルを表示し、デフォルト設定を表示したら、構成ファイルを編集します。 vimテキストエディタを使用して、設定ファイルを開いて編集します。ただし、任意のLinuxテキストエディタを使用できます。

$ sudo vim /etc/ssh/sshd_config

お気づきのように、すでにいくつかの事前設定されたオプションがあります。ただし、それらのほとんどはコメント化されています。オプションパラメータを指定する特定の行のコメントを解除することで、それらをアクティブ化できます。ポンドを取り除く「#」 コメントを外すための行頭からの記号。以下で重要なオプションのいくつかについて説明します。

  • AcceptEnv

このオプションは、クライアントから送信された環境変数をリモート環境にコピーできるかどうかを指定します。

  • AddressFamily

sshdが使用するIPアドレスファミリを定義します。使用可能な3つのオプションは、any、inet、およびinet6です。

  • AllowAgentForwarding

このオプションは、ssh-agent転送を許可するかどうかを定義します。

  • AllowStreamLocalForwarding

Unixドメインソケットの転送を許可するかどうかを定義します。

  • AllowTcpForwarding

TCP転送を許可するかどうかを定義します。

  • AllowUsers

このオプションは、パターンに基づいてアクセスを許可されるユーザー名のリストを定義できます。デフォルトでは、すべてのユーザー名が許可されています。

  • AuthenticationMethods

このオプションは、ユーザーがアクセスを受け取る前に完了する必要のある認証方法を示します。

  • AuthorizedKeysFile

このオプションは、ユーザー認証用の公開鍵を含むファイルを指定します。

  • ChallengeResponseAuthentication

このオプションを有効にすると、チャレンジレスポンス認証が可能になります。

  • ChrootDirectory

正常に認証されたユーザーに表示されるルートディレクトリを指定します。

  • 暗号

このオプションは、OpenSSHサーバーで許可される暗号化暗号を定義します。利用可能なオプションはたくさんあります。

  • 圧縮

圧縮を許可するかどうか、許可する場合はどの段階で許可するかを指定します。

  • DenyUsers

このオプションを使用して、パターンに基づいてアクセスを拒否されたユーザー名のリストを定義できます。

  • ForceCommand

特定のコマンドを強制的に実行するために使用できます。これにより、サーバーはsshクライアントによって提供されたコマンドや〜/ .ssh / rcに存在するすべてのコマンドを無視します。 。

  • ゲートウェイポート

このオプションは、リモートホストがクライアント側に転送されたポートに接続できるかどうかを定義します。

  • GSSAPIAuthentication

GSSAPIベースのユーザー認証が許可されているかどうかを示すために使用されます。

  • HostbasedAuthentication

このオプションは、クライアントマシンに存在する公開鍵がリモートサーバー上のホストを認証できるかどうかを指定します。

  • HostbasedUsesNameFromPacketOnly

このオプションは、サーバーが/。shostsに存在する名前の逆名前ルックアップを実行する必要があるかどうかを指定します 、〜/ .rhosts 、および /etc/hosts.equiv ファイル。

  • HostKey

秘密のホストキーを含むファイルを定義するために使用できます。管理者は複数のキーファイルを指定できます。デフォルトのものは/etc / ssh / ssh_host_dsa_key / etc / ssh / ssh_host_ecdsa_key / etc / ssh / ssh_host_ed25519_key および/etc / ssh / ssh_host_rsa_key

  • HostKeyAlgorithms

このオプションは、sshサーバーによって利用可能になるホストキーアルゴリズムを定義します。 OpenSSHは、この目的のために多数のアルゴリズムをサポートしています。

  • IgnoreRhosts

.rhostsを無視するようにサーバーに指示します および.shosts RhostsRSAAuthenticationのファイル およびHostbasedAuthentication

  • KbdInteractiveAuthentication

このオプションは、サーバーがキーボードインタラクティブ認証を許可するかどうかを定義します。

  • KexAlgorithms

これは、sshキー交換に使用可能なアルゴリズムを示すために使用されます。 OpenSSHは、DiffieHellmanやEllipticCurvesを含むすべての主要な鍵交換アルゴリズムをサポートしています。

  • ListenAddress

sshdデーモンがリッスンするローカルアドレスを定義します。

  • LoginGraceTime

このオプションは、ログインに失敗した場合にsshdがユーザーを切断するまでの時間を定義します。

  • LogLevel

sshdのログメッセージの詳細レベルを定義します。

  • MAC

このオプションは、使用可能なメッセージ認証コード(MAC)アルゴリズムを定義するために使用されます。これらは、データの整合性を保護するために使用されます。

  • MaxAuthTries

このオプションは、ユーザーがサーバーへの認証を試行できる最大回数を定義します。

  • PasswordAuthentication

リモートユーザーがパスワードベースの認証を使用してログインできるかどうかを定義します。

  • PermitEmptyPasswords

このオプションは、ユーザーがリモートログインに空のパスワードを使用できるかどうかを指定します。

  • PermitRootLogin

このオプションは、rootログインを許可するかどうかを定義します。

  • PermitTTY

このオプションは、疑似TTYを許可するかどうかを定義します。

上記のオプションのいずれかを含む行のコメントを解除し、目的のオプション値を設定します。以下のセクションでは、OpenSSHの一般的なセキュリティ強化の方法をいくつか示します。

OpenSSHサーバーのセキュリティを強化する方法

OpenSSHはサーバーへの玄関口として機能するため、セキュリティを強化することが非常に重要です。リモートログインをさらに安全にするために、次の提案を維持するようにしてください。

1。ルートログインを無効にする

ルートアカウントのエスカレーションはサーバー全体を危険にさらす可能性があるため、sshサーバーでのrootログインを許可しないでください。さらに、rootユーザーアカウントは常に悪意のあるユーザーの標的になっています。したがって、通常のユーザーを作成し、それにsudo権限を許可することをお勧めします。 PermitRootLogin の値を設定することで、ルートログインを無効にできます。 いいえ。

PermitRootLogin no

2。認証の試行を制限する

管理者は、ブルートフォースログインの試行を防ぐために、リモートホストからのログイン試行の回数を制限する必要があります。広大なボット軍の台頭により、これはかつてないほど重要になっています。 MaxAuthTriesオプションを使用して、サーバーに対して許可される認証の試行回数を設定します。多くの管理者は、3つをこのオプションの許容値と見なしています。ただし、セキュリティ基準に基づいて設定できます。

MaxAuthTries 3

3。ログイン猶予時間を短縮する

自動化されたボットを防ぐもう1つの方法は、ログインの猶予時間を短縮することです。これは、サーバーに接続した後、ユーザーが正常に認証する必要がある時間です。 sshd_config ファイルはこの値を秒単位で定義します。

LoginGraceTime 20

4。パスワード認証を無効にする

ユーザーがキーベースの認証を使用してサーバーにログインすることのみを許可する必要があります。したがって、パスワードベースの認証スキームを必ず無効にしてください。これを行うには、 PasswordAuthenticationの値を設定します いいえ。

PasswordAuthentication no

空のパスワードを無効にすることもお勧めします。 PermitEmptyPasswordsフィールドの値をnoに設定します。

PermitEmptyPasswords no

5。他の認証方法を無効にする

OpenSSHは、キーベースおよびパスワードベースの認証以外のいくつかの追加の認証方法をサポートしています。キーベースの認証を設定し、パスワード認証を無効にした後は、これらを完全に無効にする必要があります。

ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no

6。 X11転送を無効にする

X11転送は、サーバー上のグラフィカルアプリケーションをリモートホストマシンに表示するために使用されます。ただし、ほとんどのエンタープライズサーバーには必要ありません。したがって、この機能が必要ない場合は無効にしてください。

X11Forwarding no

X11転送を無効にした後、 AcceptEnvへのすべての参照をコメントアウトする必要があります 。行の前にハッシュ(#)を追加するだけで、コメントできます。

7。その他のオプションを無効にする

サーバーに必要ない場合は、トンネリングと転送に使用される次のオプションを無効にします。

AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

8。 SSHバナーを無効にする

詳細なsshバナーはデフォルトで有効になっており、サーバーに関する重要な情報を表示します。ハッカーはこの情報を利用して、サーバーへの攻撃を計画できます。したがって、冗長なsshバナーを無効にすることをお勧めします。

DebianBanner no

このオプションがsshd_configに存在しない場合 ファイル、バナーを無効にするために追加します。

9。 IPアドレス許可リストを実装する

ほとんどの場合、少数の既知のIPアドレスからリモートサーバーにアクセスします。他の人があなたのサーバーにアクセスするのを防ぐためにリストを許可するIPアドレスを作成することができます。これにより、秘密鍵が危険にさらされた場合でも、サーバーが侵害されるリスクが軽減されます。

ただし、IP許可リストを実装するときは注意が必要であり、動的アドレスは頻繁に変更されるため、使用を控える必要があります。

許可リストを定義するには、まず、OpenSSHサーバーへの接続に現在使用しているIPアドレスを確認します。これを行うには、端末で次のコマンドを実行します。

$ w

FROM」というラベルの下のIPアドレスをメモします ‘。 203.0.113.1のIPアドレスの例を想定します このガイドの残りの部分については。次に、ssh構成ファイルを開き、 AllowUsersを使用します。 以下に示すように、構成ディレクティブ。

AllowUsers *@203.0.113.1

上記の行は、すべてのリモートユーザーを選択したIPアドレスに制限します。以下に示すように、クラスレスドメイン間ルーティング(CIDR)表記を使用して、これをIPアドレス範囲に変更できます。

AllowUsers *@203.0.113.0/24

10。リモートユーザーのシェルを制限する

リモートユーザーが実行する操作を制限することは常に良い習慣です。これを行うには、リモートユーザーのシェルを制限します。 OpenSSHでは、このタスクを支援するために複数の構成オプションを使用できます。これらのオプションのみを使用して、ユーザーのシェルアクセスをSFTPに制限する方法を説明します。

まず、 / usr / sbin / nologin を使用して、maryという新しいユーザーを作成します。 シェル。これにより、そのユーザーのインタラクティブログインが無効になりますが、ファイル転送などの操作を実行するための非インタラクティブセッションが提供されます。

$ sudo adduser --shell /usr/sbin/nologin mary

このコマンドは、nologinシェルを使用してユーザーメアリーを作成します。次のコマンドを使用して、既存のユーザーのインタラクティブシェルを無効にすることもできます。

$ sudo usermod --shell /usr/sbin/nologin alex

上記のユーザーのいずれかとしてログインしようとすると、リクエストは拒否されます。

$ sudo su alex
This account is currently not available.

ただし、これらのアカウントを使用することで、インタラクティブシェルを必要としないアクションを実行できます。

次に、sshd構成をもう一度開き、 ForceCommand internal-sftpを使用します。 およびChrootDirectory 非常に制限の厳しいSFTPのみのユーザーを作成するためのディレクティブ。この例では、ユーザーalexを制限します。また、 sshd_configの下部にMatchブロックを追加することを強くお勧めします。 。

Match User alex
ForceCommand internal-sftp
ChrootDirectory /home/alex/

構成ファイルを終了し、構成ファイルによってエラーが発生するかどうかをテストします。これを行うには、Linuxターミナルエミュレータで次のコマンドを実行します。

$ sudo sshd -t

すべてがうまくいけば、ユーザーalex用の堅牢な構成を作成する必要があります。このユーザーのインタラクティブログインセッションは無効になっており、ユーザーは自分のアカウントのホームディレクトリにのみアクセスできます。

終わりの考え

OpenSSHはリモートサーバーのセキュリティに不可欠であるため、OpenSSHがどのように機能するかを学ぶことが不可欠です。そのため、このガイドでは、編集者がOpenSSHサーバーに関するさまざまな有用な情報を提供しています。トピックには、OpenSSHの動作、構成ファイルの読み取りと編集の方法、およびセキュリティのベストプラクティスの実装方法が含まれます。

うまくいけば、私たちはあなたが探していた情報を提供することができました。今後の参考のために、このガイドをブックマークしてください。また、このガイドをより使いやすくするための質問や提案がある場合は、コメントを残すことを忘れないでください。


Linux
  1. Ubuntu13.04について知っておくべきことすべて

  2. Linux tmpディレクトリ:知っておくべきことすべて

  3. Linuxファイル圧縮:知っておくべきことすべて

  1. Linuxファイルのパーミッション:知っておくべきことすべて

  2. LinuxのSwappiness:知っておくべきことすべて

  3. Linuxファイルシステムについて知っておくべきことすべて

  1. LinuxChmodコマンドについて知っておくべきことすべて

  2. Linuxコンテナー(LXC)について知っておくべきことすべて

  3. UbuntuDNSサーバーについて知っておくべきことすべて