CentOS8のSSH設定 – SSHの起動とrootへの直接ログイン禁止

CentOS8は初期設定でSSHを繋げるようになっていますが、セキュリティが脆弱な状態です。

なので、サーバの公開(インターネット上から繋げるようにする)前に設定をしておかないと悪意を持った人々の餌食となってしまいます。

そうならないようにするためにもしっかりとSSH周りの設定をしておきましょう。

もしSSHを使わない場合はしっかりとSSHを停止しておきましょう。

この記事で行うこと

  1. SSHの起動・停止
  2. rootへの直接ログインの禁止
続きを読む CentOS8のSSH設定 – SSHの起動とrootへの直接ログイン禁止

CentOS8設定の基礎 – ファイアウォールの設定

ファイアウォールは直訳すると防火壁となり、外部からの不正なアクセスを遮断するための機能です。

外から降りかかる火の粉(不正アクセス)を防ぐ防火壁ということですね。

ここではファイアーウォールの解説と、よく使うコマンドについて扱います。

この記事で行うこと

  1. ファイアーウォールについて
    1. ポートとは
    2. ファイアーウォールの意義
  2. ファイアーウォールのコマンド解説
    1. –list-all
    2. –add-xxxxxx=zzzzzz
    3. –remove-xxxxxx=zzzzzz
    4. –reload

1. ファイアウォールについて

前述の通り、ファイアウォールは防火壁として不正なアクセスを防いでくれるものです。

ただ、実際にはファイアウォールは事前に通すように設定された通信以外は全て遮断するようになっています。

アクセスが不正か否かは判断できないため「疑わしきは通さない」となるわけです。

このため、アクセスさせたい場所には事前に穴を開けておく必要があります。

ファイアウォールではポートの単位で穴を開ける事ができます。

1-1. ポートとは

ポートというのは簡単に言うとサーバとネットワークを繋ぐ出入り口です。

このポートは65536個存在し番号で表現されていて、各アプリケーションに割り振られています。

有名なところでいうと、SSH接続は22番ポート、HTTPは80番ポートといった具合です。

実際に割り振られているのはごく一部で、残りは空きポートとして必要に応じて使うことができます。

具体的にいうと0番から1023番までのポートは既に割り振られているので使えませんが、それ以上の番号のポートはそのポートを使うと言っているアプリケーションをインストールしていない限りは自由に使えます。

1-2. ファイアウォールの必要性

例えば、「SSH接続を使う予定がなかったので初期設定のままで放置をしていたら、そこに付け込まれて不正なアクセスを受けてしまった」ということが起きえます。

当然、使わないのであればSSHを停止しておくべきでしたが、ファイアウォールで22番ポートを閉じていたとしたらSSHが起動したままでも上記のような事は起きません。

このように転ばぬ先の杖となるのがファイアウォールとなります。

2. ファイアーウォールのコマンド解説

ファイアウォールは firewall-cmd というコマンドで操作します。

これは Firewall Daemon Command の略で、 Firewall Daemon が firewalld と略され、更に firewalld Command が firewall-cmd と略された物と思われます。

このコマンドに何をさせたいかをオプションのような形で与えることで操作をします。

2-1. –list-all

現在のファイアウォールの設定を全て表示させるコマンドです。

以下のような表示が出ると思います。(実際にはsourcesとportsは空欄になっていますが、今回は説明のために記入しています)

[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp3s0
sources: 192.168.10.0/24
services: cockpit dhcpv6-client ssh
ports: 22/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

ここでは以下に注目してください。

  • sources:IPアドレス単位で全ての接続を許可したい場合に設定します。例えば自宅からの接続は全て許可と言った場合です。
  • services:特定のアプリケーションの接続を許可する場合に設定します。SSHを許可する、HTTPを許可する等です。
  • ports:直接ポート番号を許可したい場合に設定します。この例では22/tcpが記入されていますが、これはSSHのポートです。このためservicesにsshの記載がなくてもSSH接続ができます。一時的にテストのためにとりあえずポートを開けたいといった場合に使います。恒久的に使うときはservicesに追加した方が良いです。

2-2. –add-xxxxxx=zzzzzz

許可ルールを追加します。

xxxxxxの部分には許可したいルールの種類を入れ、zzzzzzの部分には許可したいルールの内容を入れます。

例えば、servicesにHTTPを追加したい場合は以下のようになります。

[root@localhost ~]# firewall-cmd --add-service=http

こうして設定したルールはすぐに有効になりますが、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)すると消えてしまいます。

上記のコマンドに --permanent のオプションを設定すると、逆にすぐには有効にならず、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)するとずっと有効になります。

[root@localhost ~]# firewall-cmd --add-service=http --permanent

先に一度ルールを追加して試して問題がなかった場合に --permanent を付けて再度設定すると良いです。

2-3. –remove-xxxxxx=zzzzzz

--add-xxxxxx=zzzzzz とは逆に許可ルールを削除します。

使い方は --add-xxxxxx=zzzzzz と同様に、xxxxxxの部分には削除したいルールの種類を入れ、zzzzzzの部分には削除したいルールの内容を入れます。

例えば、portsから22/tcpを削除したい場合は以下のようになります。

[root@localhost ~]# firewall-cmd --remove-port=22/tcp

また --permanent のオプションを設定するとすぐには有効にならず、再起動や再読込で有効になるという点も同じです。

[root@localhost ~]# firewall-cmd --remove-port=22/tcp --permanent

ちなみに、初期設定で「cockpit」と「dhcpv6-client」というサービスを通すルールが有効になっていますが、これは当面使わないので削除してみましょう。

2-4. –reload

ファイアウォールの設定を再読み込みします。

--permanent オプションを付けた設定を有効にしたり、逆に --permanent オプションを付けずに色々と試してみた設定をなかったことにするときに使います。

使い方は以下の通りです。

[root@localhost ~]# firewall-cmd --reload

再読み込みを行った後は必ず --list-all で想定したとおりの設定になっているか確認するようにしましょう。

まとめ

今回はファイアウォールの基本的な設定について説明しました。

理論上は、全てのアプリに脆弱性がなく設定にも穴がない状態が常に維持されていればファイアウォールは不要ということになります。

ただ、人間いつミスを犯すか分からないですし、最新のアプリでも脆弱性が見つかることもあります。

リスクを軽減するためにもファイアウォールは常に確認して、不要なポートは必ず閉めるようにしましょう。

CentOS8で自身のプライベートIPアドレスを調べる

サーバを確認したり変更を加える度にいちいちサーバにキーボードやディスプレイを取り付けて調べるというのは面倒です。

だからといってサーバに常にキーボードやディスプレイを付けっぱなしにするのもキーボードやディスプレイが有り余ってなければ現実的ではありません。(仮に有り余っていたとしても場所を取ってしまうのであまりやりたくありませんね)

そのため多くの場合は自分が普段使っているPCから操作できるようにします。

これを実現するためにはそのサーバの在処、IPアドレスを調べます。

この記事で行うこと

  1. ネットワークに接続しているデバイス名を調べる
  2. ネットワークに接続しているデバイスの詳細情報を得る

1. ネットワークに接続しているデバイス名を調べる

以下のコマンドを実行します。

# nmcli d status
DEVICE		TYPE	 STATE		CONNECTION
[デバイス名]	ethernet 接続済み	enp3s0
  • nmcli : NetworkManagerに含まれるツール名。(NetworkManagerCLIentの略?)
  • d : 操作対象がデバイスであるという意味。(”device”でも動きます)
  • status : 状態の概要を確認するコマンド。(操作対象がデバイスの時に何のコマンドも入力しないとこれが実行されます。)

ここでSTATEが接続済みとなっているデバイスの名称を覚えておきます。

2. ネットワークに接続しているデバイスの詳細情報を得る

以下のコマンドを実行します。

[デバイス名]の部分は先ほど調べた接続済みのデバイスの名称です。

# nmcli d show [デバイス名]
GENERAL.DEVICE: [デバイス名]
GENERAL.TYPE: ethernet
GENERAL.HWADDR: XX:XX:XX:XX:XX:XX
GENERAL.MTU: 1500
GENERAL.STATE: 100 (接続済み)
GENERAL.CONNECTION: enp3s0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER: オン
IP4.ADDRESS[1]: 192.168.10.7/24
  • show : 特定のデバイスの詳細を表示するコマンド

ここで重要な情報は「GENERAL.HWADDR」と「IP4.ADDRESS」の二つです。

「GENERAL.HWADDR」はMACアドレスと呼ばれる物で、ルータからIPアドレスを固定させるときなどに使います。(実施方法や可否はルータによって異なるので各自で調べてみてください)

「IP4.ADDRESS」はその名の通り、そのサーバのIPアドレスとなります。

似たような物に「IP6.ADDRESS」というのもありますが、これの違いは「IPv4 IPv6」で調べると分かるかと思います。現時点において自宅サーバでこれを使うことはほぼ無いですね。

まとめ

今回の記事ではサーバのIPアドレスを調べる方法を扱いました。

CentOSでは初期設定でSSHが許可されているので、これでSSHクライアントなどを使ってSSH接続を行うことができます。

SSH接続のやり方は利用するクライアントなどによっても異なるので各自で調べてみてください。

もし機会があれば当サイトでもPowerShellを使ったSSH接続方法を扱いたいと思います。(予定は未定)