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

基本的なセキュリティを構成する

サーバー上で実行されているサービスがなく、すべてのポートが開いていることは問題ではない場合、これは危険ではないと考える人もいます。同意しません。未使用の(そして人気のある)ポートへの接続がブロックまたはドロップされた場合、悪意のある侵入者の大多数は、ポートが接続を受け入れている別のマシンに移動します。ファイアウォールの設定には数分しかかからないため、サーバーを保護するためにファイアウォールを設定することを強くお勧めします。

新しいクラウドサーバーを作成したら、サーバーのセキュリティを強化するために次のタスクを実行することをお勧めします。

注: 別のディストリビューションを使用している場合は、次のコマンドに少し変更を加える必要がある場合があります。必要に応じて、オペレーティングシステムのドキュメントを参照してください。

サーバーにログインします

サーバーのIPアドレスとパスワードを取得したら、次のSSHコマンドを使用してログインします。

ssh [email protected]

:再構築されたサーバーにログインしている場合、リモートホストIDが変更されたことを示すメッセージが表示される場合があります。クラウドサーバーを再構築すると、リモートホストキーが変更されます。これは、コンピューターでの異常なアクティビティまたは疑わしいアクティビティを示します。この問題を回避するには、サーバーのIPアドレスの古いエントリを削除します。 ローカル コンピューターで、SSH known_hostsを編集します 次のコマンドを使用してファイルを作成し、クラウドサーバーのIPアドレスを指すエントリをすべて削除します。

nano ~/.ssh/known_hosts

ローカルコンピュータがLinuxまたはMacOSX以外のオペレーティングシステムを実行している場合、known_hostsの場所 ファイルは異なります。このファイルの場所については、OSのドキュメントを参照してください。

ルートパスワードを変更する

サーバーにログインした後、次のコマンドを発行してルートパスワードを変更します。

passwd
管理者ユーザーを追加する

:OnMetalserverに追加のSSHユーザーを設定する場合は、該当するOnMetalの手順について「OnMetalクラウドサーバーの作成」を参照してください。

  1. 管理者ユーザーを追加するには、次のコマンドを発行してデモを置き換えます 選択したユーザー名で:

    adduser demo
    

    :この最初のステップの後、サーバーで日常の操作を実行するためにrootuserとしてログインしないでください。ただし、これらの管理タスクを完了するには、スーパーユーザー(sudo)権限が必要です。

  2. adminユーザーにsudo権限を割り当てるには、次のコマンドを発行します。これにより、Ubuntuオペレーティングシステムでデフォルトでnanoエディターが呼び出されます。

    visudo
    
  3. ファイルの最後に、管理者ユーザー名(次の例のデモインの代わりに)と次のテキスト文字列を追加します:

    demo   ALL=(ALL) ALL
    
  4. この行の追加が完了したら、次のようにファイルを終了して確認し、保存します。

    a。 Ctrl-Xを押します 終了するb。 yを押します 変更を確認するためc。 Enterを押します ファイルを/etc/sudoers.tmpとして保存します 。

    :nanoエディターで作業しているときに、backspace / deletekeyが予期せず機能し、カーソルの後ろではなく前の文字が削除されます。この問題は、/etc/nanorcを編集することで解決できます。 ファイル(たとえば、nanoを使用)および次の行のコメント解除または追加:

        set rebinddelete
    

新しい動作は、ファイルを保存してnanoを再度開いた後に有効になります。

公開鍵と秘密鍵を設定する(SSH keygen)

クラウドサーバーへのSSHアクセスを保護する効果的な方法の1つは、パブリック/プライベートを使用することです。 キー。これは、公開キーがサーバーに配置され、秘密キーがローカルコンピューターに配置されることを意味します。これにより、誰かがパスワードだけを使用してログインすることは不可能になります。秘密鍵が必要です。このセットアップは、次の基本的な手順で構成されています。ローカルコンピューターでキーを作成し、公開キーをサーバーにコピーして、キーに適切なアクセス許可を設定します。

次の手順は、LinuxまたはMac OS Xを使用していることを前提としています。Windowsの手順については、PuttyforWindowsを使用したキーの生成を参照してください。

ステップ1.公開鍵と秘密鍵を作成します
  1. ローカルコンピューターで、キーを保持するフォルダーを作成します。

    mkdir ~/.ssh
    
  2. SSHキーを作成するには、ローカルで コンピューターで、次のコマンドを入力します:

    ssh-keygen -t rsa
    
    • id_rsaおよびid_rsa.pubは.sshディレクトリに作成されます。rsa.pubファイルは公開鍵を保持します。このファイルをサーバーに配置します。

    • id_rsaファイルは秘密鍵です。このファイルを公共のコンピュータに表示したり、配布したり、保管したりしないでください。

ステップ2.公開鍵をコピーします

scpを使用できます サーバーに公開鍵を配置するコマンド。

  1. ローカルにいる間 コンピューターで、次のコマンドを入力し、デモ、IPアドレス、および管理者ユーザーのホームディレクトリを管理者ユーザーに置き換えます。

    scp ~/.ssh/id_rsa.pub [email protected]:/home/demo/
    
  2. プロンプトが表示されたら、管理者ユーザーのパスワードを入力します。

  3. 次の例に示すように、サーバー上の管理者ユーザーのホームフォルダーに.sshというディレクトリを作成し、その中にpubキーを移動します。

    mkdir /home/demo/.ssh
    
    mv /home/demo/id_rsa.pub /home/demo/.ssh/authorized_keys
    
ステップ3.SSH権限を変更する

次のコマンドを使用してキーに正しい権限を設定し、「デモ」ユーザーとグループを管理者ユーザーとグループに変更します。

chown -R demo:demo /home/demo/.ssh
chmod 700 /home/demo/.ssh
chmod 600 /home/demo/.ssh/authorized_keys

これで、ローカルコンピューターでキーが正常に作成され、公開キーがサーバーにコピーされ、キーに適切なアクセス許可が設定されました。

SSH構成を変更する

SSHサービスをデフォルトのポート22に維持すると、簡単にターゲットにできます。より安全にするために、デフォルトのSSH構成を変更することをお勧めします。

  1. 次のコマンドを発行します:

    nano /etc/ssh/sshd_config
    
  2. デフォルトのポートである22を任意のポートに変更し、ルートログインをオフにして、ログインできるユーザーを定義します。

    Port 22                           <--- change to a port of your choosing
    Protocol 2
    PermitRootLogin no
    PasswordAuthentication no
    UseDNS no
    AllowUsers demo
    

    :ポート番号は、1025〜65536の任意の整数にすることができます。後で追加のリスニングプロセスを構成する場合は、新しいポート番号をメモし、ポートの競合を回避することを忘れないでください。

公開鍵/秘密鍵を設定したので、PasswordAuthenticationパラメーターをnoに設定できます。ただし、別のコンピューターからサーバーにアクセスする場合は、PasswordAuthenticationをyesに設定したままにしておくことをお勧めします。秘密鍵は、ローカルコンピューターが安全である場合にのみ使用してください(つまり、仕事用のコンピューターに秘密鍵を置かないでください)。

これらの設定はまだ有効になっていません。新しいポートを使用してSSHを再起動する前に、iptablesを使用して単純なファイアウォールを作成する必要があります。

:SSHをまだ再起動しないでください。

iptablesを使用してプライベートファイアウォールを設定する

iptablesと呼ばれるユーティリティは、Linuxシステムのデフォルトのファイアウォールです。指定したポートまたはサービスへの接続を拒否することで機能します。

注: このセクションの手順は、systemdを使用するサーバーには適用されません。 。 systemdを使用するサーバー ここで、FirewallDと呼ばれるiptablesへの別のファイアウォールフロントエンドを使用します。 FirewallDの構文と実装は大きく異なります。 FirewallDおよびsystemdで適切なファイアウォール構成を行うには サーバーについては、RedHatcustomerポータルの「firewalldの概要」を参照してください。

この手順の一環として、次の3つのポートを開きます。 ssh http 、およびhttps。

次に、2つのファイルを作成します。

  • /etc/iptables.test.rules

  • /etc/iptables.up.rules

1つ目は一時的なテストルールのセットで、2つ目はiptablesが使用する永続的なルールのセットです。

:手順を完了するには、rootユーザー権限が必要です。現在rootとしてログインしていない場合は、次のコマンドの前にsudoコマンドを使用してください。

  1. 次のコマンドを発行して、現在実行中のプロセスを確認します。

    iptables -L
    

    次のようなものが表示されます:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    これは、サーバーが任意のポートの誰からでも何でも受け入れていることを意味します。

  2. ファイアウォールを構築するには、ファイル/etc/iptables.test.rulesを作成します いくつかのルールを追加します。以前にこれらの手順を実行したことがある場合、このファイルは空ではない可能性があります:

    nano /etc/iptables.test.rules
    
  3. 必要に応じてポートを変更および追加します。

  4. 次のコマンドを発行して、サーバーにルールを適用します。

    iptables-restore < /etc/iptables.test.rules
    
  5. 次のコマンドを発行して、違いを確認します。

    iptables -L
    
  6. 出力に変化がない場合は、前の手順を繰り返して再試行してください。

  7. ルールをチェックして、何が受け入れられ、拒否され、削除されているかを正確に確認してください。ルールに満足したら、次のコマンドを発行してルールを永続的に保存します。

    iptables-save > /etc/iptables.up.rules
    

    :ルールを永続的に保存する前にサーバーを再起動すると、変更が失われ、サーバーは以前の設定に戻ります。

  8. ネットワークインターフェイスの起動時にシステムが実行するスクリプトを追加します。次のコマンドを実行してファイルを作成します:

    nano /etc/network/if-pre-up.d/iptables
    
  9. 新しいファイルに次の行を追加します。

    #!/bin/sh
    /sbin/iptables-restore < /etc/iptables.up.rules
    
  10. 変更を保存してから、新しいスクリプトを実行可能にします。

    chmod +x /etc/network/if-pre-up.d/iptables
    

RedHatでiptablesを設定する

Red Hatディストリビューションを使用している場合、iptablesの動作はUbuntuオペレーティングシステムの場合とは少し異なります。次のコマンドを使用して、コマンドラインから直接iptablesルールセットを変更できます。

HTTP-ポート80

RHEL7およびCentOS7の場合、次のコマンドを使用して、iptablesファイアウォールのHTTP(Web)トラフィックのポート80を開きます。

sudo firewall-cmd --add-service=http --permanent

古いバージョンのOSの場合は、次のコマンドを使用します。

sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport http -j ACCEPT

HTTPS/SSL-ポート443

RHEL7およびCentOS7の場合、次のコマンドを使用して、安全なHTTPトラフィックのためにポート443を開きます。

sudo firewall-cmd --add-service=https --permanent

古いバージョンのOSの場合は、次のコマンドを使用します。

sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport https -j ACCEPT

SSH-ポート22

ポート22はデフォルトで開いており、ビルド後にサーバーにSSHで接続できますが、次のコマンドは、RHEL7およびCentOS7でポート22を開く方法を示しています。

sudo firewall-cmd --add-service=ssh -permanent

SSH用のカスタムポートを設定する場合は、RHEL7およびCentOS7に対して次のコマンドを使用します。

sudo firewall-cmd --add-port=<customport>/tcp --permanent

古いバージョンのOSの場合は、次のコマンドを使用してポート22を開きます。

sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ssh -j ACCEPT

FTP-ポート21

FTPはファイル転送の一般的なサービスですが、安全なプロトコルではないため、ほとんど廃止されています。代わりに、SFTPなどの安全なファイル転送プロトコルを使用することを強くお勧めします。どうしてもFTPを使用する必要がある場合は、次のコマンドを使用して、デフォルトのポートである21inRHEL7およびCentOS7を開きます。

sudo firewall-cmd --add-service=ftp --permanent

古いバージョンのOSの場合は、次のコマンドを使用します。

sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ftp -j ACCEPT
sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport ftp-data -j ACCEPT

MySQL-ポート3306

別のサーバーからMySQLデータベースにリモート接続する必要がある場合は、iptablesでポート3306を開く必要があります。 RHEL7およびCentOS7の場合、次のコマンドを使用します。

sudo firewall-cmd --add-service=mysql --permanent

古いバージョンのOSの場合は、次のコマンドを使用します。

sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport mysql -j ACCEPT
ルールを保存

次のコマンドを使用して、作成したすべてのルールを保存します。サーバーを再起動する前に保存しない場合、iptablesルールセットはデフォルトのルールセットに戻り、ポート22を除くすべてのトラフィックをブロックします。RHEL7またはCentOS 7を使用している場合、この手順は必要ありません。

sudo /sbin/service iptables save
iptablesを再起動します

iptablesへの変更は、ルールを保存してiptablesサービスを再起動した後にのみ有効になります。ルールを保存する前にiptablesを再起動すると、iptablesはデフォルトのルールセットに戻ることに注意してください。

RHEL7およびCentOS7の場合、次のコマンドを使用します。

firewall-cmd --reload

古いバージョンのOSの場合は、次のコマンドを使用します。

sudo /sbin/service iptables restart
チェックルール

RHEL7およびCentOS7でファイアウォールをリロードした後にルールを確認するには、次のコマンドを使用します。

firewall-cmd --get-active-zones

これにより、アクティブなゾーン(すべてのルールを保存したゾーン)が返されます。

firewall-cmd --zone=<zone> --list-all

これにより、指定したゾーンで有効なサービスが一覧表示されます。

sshを再起動

これで、SSHサービスを再起動できます。 shを再起動している間はログインしたままにして、新しい接続でテストしてください。 そうすれば、エラーが発生した場合に、より簡単にトラブルシューティングを行うことができます。

ほとんどのディストリビューションでは、サービスはsshdであり、次のコマンドで再起動します:

sudo service sshd restart

Ubuntuオペレーティングシステムやその他のディストリビューションでは、サービスはsshと呼ばれ、同様のコマンドで再起動します。

sudo service ssh restart

SSHの再起動後に新しい接続を確立できない場合は、症状を確認して、何が問題であるかを判断してください。

  • 接続がタイムアウトした場合は、iptablesの構成に問題がある可能性があります。
  • 秘密鍵に関する警告が表示された場合は、鍵がサーバーに正しくインストールされていない可能性があります(コピーアンドペースト操作で欠落した余分な改行や文字を確認してください)。
  • サーバーを再構築している場合は、接続を確立する前に、known_hostsファイルからホストキーを削除する必要がある場合があります。
ロックアウトされている場合

SSH、sudo、またはiptablesの設定が正しくないと、システムからロックアウトされる可能性があります。これが発生した場合は、TheRackspace Cloudコントロールパネルにログインし、緊急コンソールまたはレスキューモードを使用して構成を修復します。

これらは、LinuxCloudServerへの接続とセキュリティの設定の基本です。これらの手順をWindowsサーバーで実行するには、WindowsCloudServerを参照してください。


Linux
  1. Debian10にOpenVPNサーバーをインストールして設定する方法

  2. Debian10にVNCサーバーをインストールして設定する方法

  3. Apacheのセキュリティを向上させるための7つの基本的なヒント

  1. 基本的なiptablesファイアウォール管理

  2. 基本的なLinuxユーザー管理

  3. CentOSでMariaDBサーバーを構成する

  1. Ubuntu20.04にOpenVPNサーバーをインストールして構成する方法

  2. IISでのIPセキュリティの構成

  3. 基本的な NFS セキュリティ – NFS、no_root_squash および SUID