CentOS8は初期設定でSSHを繋げるようになっていますが、セキュリティが脆弱な状態です。
なので、サーバの公開(インターネット上から繋げるようにする)前に設定をしておかないと悪意を持った人々の餌食となってしまいます。
そうならないようにするためにもしっかりとSSH周りの設定をしておきましょう。
もしSSHを使わない場合はしっかりとSSHを停止しておきましょう。
この記事で行うこと
- SSHの起動・停止
- rootへの直接ログインの禁止
CentOS8は初期設定でSSHを繋げるようになっていますが、セキュリティが脆弱な状態です。
なので、サーバの公開(インターネット上から繋げるようにする)前に設定をしておかないと悪意を持った人々の餌食となってしまいます。
そうならないようにするためにもしっかりとSSH周りの設定をしておきましょう。
もしSSHを使わない場合はしっかりとSSHを停止しておきましょう。
ファイアウォールは直訳すると防火壁となり、外部からの不正なアクセスを遮断するための機能です。
外から降りかかる火の粉(不正アクセス)を防ぐ防火壁ということですね。
ここではファイアーウォールの解説と、よく使うコマンドについて扱います。
前述の通り、ファイアウォールは防火壁として不正なアクセスを防いでくれるものです。
ただ、実際にはファイアウォールは事前に通すように設定された通信以外は全て遮断するようになっています。
アクセスが不正か否かは判断できないため「疑わしきは通さない」となるわけです。
このため、アクセスさせたい場所には事前に穴を開けておく必要があります。
ファイアウォールではポートの単位で穴を開ける事ができます。
ポートというのは簡単に言うとサーバとネットワークを繋ぐ出入り口です。
このポートは65536個存在し番号で表現されていて、各アプリケーションに割り振られています。
有名なところでいうと、SSH接続は22番ポート、HTTPは80番ポートといった具合です。
実際に割り振られているのはごく一部で、残りは空きポートとして必要に応じて使うことができます。
具体的にいうと0番から1023番までのポートは既に割り振られているので使えませんが、それ以上の番号のポートはそのポートを使うと言っているアプリケーションをインストールしていない限りは自由に使えます。
例えば、「SSH接続を使う予定がなかったので初期設定のままで放置をしていたら、そこに付け込まれて不正なアクセスを受けてしまった」ということが起きえます。
当然、使わないのであればSSHを停止しておくべきでしたが、ファイアウォールで22番ポートを閉じていたとしたらSSHが起動したままでも上記のような事は起きません。
このように転ばぬ先の杖となるのがファイアウォールとなります。
ファイアウォールは firewall-cmd
というコマンドで操作します。
これは Firewall Daemon Command の略で、 Firewall Daemon が firewalld と略され、更に firewalld Command が firewall-cmd と略された物と思われます。
このコマンドに何をさせたいかをオプションのような形で与えることで操作をします。
現在のファイアウォールの設定を全て表示させるコマンドです。
以下のような表示が出ると思います。(実際には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:
ここでは以下に注目してください。
許可ルールを追加します。
xxxxxxの部分には許可したいルールの種類を入れ、zzzzzzの部分には許可したいルールの内容を入れます。
例えば、servicesにHTTPを追加したい場合は以下のようになります。
[root@localhost ~]# firewall-cmd --add-service=http
こうして設定したルールはすぐに有効になりますが、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)すると消えてしまいます。
上記のコマンドに --permanent
のオプションを設定すると、逆にすぐには有効にならず、サーバやファイアーウォールを再起動したり、ファイアウォールを再読込(–reload)するとずっと有効になります。
[root@localhost ~]# firewall-cmd --add-service=http --permanent
先に一度ルールを追加して試して問題がなかった場合に --permanent
を付けて再度設定すると良いです。
--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」というサービスを通すルールが有効になっていますが、これは当面使わないので削除してみましょう。
ファイアウォールの設定を再読み込みします。
--permanent
オプションを付けた設定を有効にしたり、逆に --permanent
オプションを付けずに色々と試してみた設定をなかったことにするときに使います。
使い方は以下の通りです。
[root@localhost ~]# firewall-cmd --reload
再読み込みを行った後は必ず --list-all
で想定したとおりの設定になっているか確認するようにしましょう。
今回はファイアウォールの基本的な設定について説明しました。
理論上は、全てのアプリに脆弱性がなく設定にも穴がない状態が常に維持されていればファイアウォールは不要ということになります。
ただ、人間いつミスを犯すか分からないですし、最新のアプリでも脆弱性が見つかることもあります。
リスクを軽減するためにもファイアウォールは常に確認して、不要なポートは必ず閉めるようにしましょう。
サーバを確認したり変更を加える度にいちいちサーバにキーボードやディスプレイを取り付けて調べるというのは面倒です。
だからといってサーバに常にキーボードやディスプレイを付けっぱなしにするのもキーボードやディスプレイが有り余ってなければ現実的ではありません。(仮に有り余っていたとしても場所を取ってしまうのであまりやりたくありませんね)
そのため多くの場合は自分が普段使っているPCから操作できるようにします。
これを実現するためにはそのサーバの在処、IPアドレスを調べます。
以下のコマンドを実行します。
# nmcli d status DEVICE TYPE STATE CONNECTION [デバイス名] ethernet 接続済み enp3s0
ここでSTATEが接続済みとなっているデバイスの名称を覚えておきます。
以下のコマンドを実行します。
[デバイス名]の部分は先ほど調べた接続済みのデバイスの名称です。
# 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
ここで重要な情報は「GENERAL.HWADDR」と「IP4.ADDRESS」の二つです。
「GENERAL.HWADDR」はMACアドレスと呼ばれる物で、ルータからIPアドレスを固定させるときなどに使います。(実施方法や可否はルータによって異なるので各自で調べてみてください)
「IP4.ADDRESS」はその名の通り、そのサーバのIPアドレスとなります。
似たような物に「IP6.ADDRESS」というのもありますが、これの違いは「IPv4 IPv6」で調べると分かるかと思います。現時点において自宅サーバでこれを使うことはほぼ無いですね。
今回の記事ではサーバのIPアドレスを調べる方法を扱いました。
CentOSでは初期設定でSSHが許可されているので、これでSSHクライアントなどを使ってSSH接続を行うことができます。
SSH接続のやり方は利用するクライアントなどによっても異なるので各自で調べてみてください。
もし機会があれば当サイトでもPowerShellを使ったSSH接続方法を扱いたいと思います。(予定は未定)