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 で想定したとおりの設定になっているか確認するようにしましょう。

まとめ

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

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

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

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

Linuxの基本コマンド – ファイルの権限設定

この記事ではLinuxでのファイルの権限設定について触れたいと思います。

アプリをインストールして使う場合、権限設定不要で動くことも多いです。

しかし、設定ファイルを自分で作ったときなどにそのファイルの権限設定が合わないためにアプリが動かないといったことが起きます。

このような際に対応するためにも権限設定については知っておいて損はありません。

この記事で行うこと

  1. Linuxの権限について
    1. ユーザ
    2. グループ
    3. ファイルのパーミッション
  2. 権限設定コマンドの解説
    1. chown
    2. chmod

1. Linuxnお権限について

Linuxではユーザーとグループという概念があります。

1-1. ユーザ

ユーザは特定の個人を指します。

とはいえ実際の人でなくても、例えばアプリケーションなんかもユーザを持っていたりします(システムアカウントといいます)。

ユーザはコマンドを実行できる主体と考えることができます。

つまり、ユーザでなければコマンドを実行できません。

これだとアプリケーションが何かしらのコマンドを実行したいときに困ってしまいます。

なので、アプリケーションもシステムアカウントを持っているのです。

1-2. グループ

グループはユーザをひとまとめにした物を指します。

代表的な例だと、rootになれる管理者ユーザを集めたwheelグループがあります。

またユーザを作ると、同時にユーザ名と同じ名前のグループができます。(例えばyutoといユーザを作ると、同時にyutoというグループができます)

グループは複数のユーザを一纏めにしますし、ユーザは複数のグループに属せます。

グループとユーザはいわゆる多対多の関係です。

1-3. ファイルのパーミッション

各ファイルは「所有者」と「グループ」と「パーミッション」を持っています。

「所有者」と「グループ」はそれぞれファイルを所有するユーザ、グループを表しています。

「パーミッション」はそのファイルへのアクセスをどこまで許すかという物を「所有者」「グループ」「その他ユーザ」毎に設定することになります。

どこまで許すかという部分は以下の組み合わせで設定できます。

1実行権限 (eXecute)x
2書き込み権限 (Write)w
4読み取り権限 (Read)r
設定できるパーミッション

例えば、このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけといった設定ができます。

さて、こうやって毎回「このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけ」と書くのは面倒です。

なので、左から順に所有者に許可されたこと、グループに許可されたこと、その他ユーザに許可されたことを並べてみましょう。

また、より短縮するために許可されたことの内容をアルファベット一文字で表してみましょう。(上表の右にあるアルファベット)

rwxrw-r--

ファイルのあるディレクトリで ls -l を実行すると、各ファイル名の左側に同じような表記があると思います。

これはそのファイルのパーミッションを表していたのです。

また、もっと短縮することができます。

上記の表の左側にある数字を足し合わせて権限を表すのです。

実行、書き込み、読み取りが全てできる場合は1+2+4=7、書き込みと読み取りができる場合は2+4=6、実行と書き込みのみできる場合は1+2=3といった具合です。

これで表すと、上記の表示は764と表せます。

これはパーミッションの設定時に使うので覚えておいてください。

2. 権限設定コマンドの解説

権限設定は以下の2つのコマンドで行うことができます。

2つだけなので、ぜひ覚えてください。

2-1. chown

ファイルの所有者とグループを変えられます。(本来はグループを変えるための chgrp というコマンドがありますが chown で両方変えられるのでこっちだけ覚えていれば大丈夫です)

CHange OWNerの略です。

使い方は以下となります。

# chown [オプション] [変更後の所有者]:[変更後のグループ] [ファイル名]

またよく使われるオプションは -R があります。

これはディレクトリを chown で指定したときに、中身も全て同じように所有者変更を行うという物です。

なお、小文字の -r ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。

2-2. chmod

ファイルのパーミッション設定を変えられます。

CHange MODeの略です。

使い方は以下となります。

# chmod [オプション] [変更後のパーミッション] [ファイル名]

変更後のパーミッションは3桁の数字で表すようにしてください。(1-3の最後で扱ったアレです)

またよく使われるオプションは -R があります。

これはディレクトリを chmod で指定したときに、中身も全て同じように所有者変更を行うという物です。

なお、小文字の -r ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。

chmodを使った権限設定方法には「○○の権限を外す」「○○の権限を付ける」のように設定できる他の書き方もあるのですが、ここでは触れません。気になる方は調べてみてください。

まとめ

今回はLinuxの権限の基本とファイルへの権限設定について説明しました。

他にも権限設定だと「新たにグループを作成する」「ユーザをグループに追加する」などグループ周りのことがあるのですが、基本的に全てを一人で管理する自宅サーバではあまり必要とならないので割愛します。

興味のある方はぜひ調べてみてください。

アプリが動かないとなった時、設定ファイルの中身が間違っていなければ次に疑うべきは権限設定です。お気を付けを。

Linuxで設定ファイルを編集するときの基本

Linuxではアプリケーションの設定を変える際には設定ファイルを直接編集することが多いです。

ここでは設定ファイルの編集の方法を記載します。

今回はCentOS8のSSH設定で触れられている「rootへの直接アクセス禁止」の設定で /etc/ssh/sshd_config を編集する場合の例を取ります。

この記事で行うこと

  1. 編集したいファイルのバックアップ
  2. viでファイルを編集する

1. 編集したいファイルのバックアップ

ファイルのバックアップといっても大層なことではありません。

編集したいファイルを別の名前でコピーしておくだけです。

大体の場合はファイルの拡張子を変えます。(拡張子が無い場合は拡張子を付け加えます)

また、ファイルのコピー先は元のファイルと同じ場所で大丈夫です。

今回の例の場合以下のようになります。

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

cpコマンドについては当サイトの「Linuxの基本コマンド – ファイル操作」内に解説がありますので、参考にしてください。

私は「.backup」という拡張子にしましたがこれは何でも構いません。ただし、実際によく使われる拡張子は避けた方が良いでしょう。

2. viでファイルを編集する

viというのはLinuxであればほぼ必ずと言って良いほど入っているテキストエディタです。(実際は最近のOSだと上位互換のvimが入っていますが)

viでファイルを編集するときは以下です。

vi [開きたいファイル]

今回は以下のようになります。

# vi /etc/ssh/sshd_config

するとファイルの中身が表示されるはずです。

viは取っつきづらいことで有名ですが、vimはカーソルキーが使えるのでなんとかなります。

キーボードの「i」キーを押すと編集モードなります。

編集モードでないと、入力できないので注意してください。

「Esc」キーを押すとコマンドモードになります。

このモードではコピー&ペーストや文字列の検索・置換などができます。この辺りは興味がある方は「vim 使い方」などで調べてみてください。(コピー&ペーストはSSHクライアント側の機能で割となんとかなります)

ここで覚えておきたいのは編集モードでないときに入力しようとすると、コマンドモードであらぬコマンドが実行されてしまい大変なことになるということです。

編集モードの時は下の方に「–INSERT–」と表示されるので、必ず入力前に確認してください。

また、ファイルの保存やファイルを閉じるのはコマンドモードで行います。

「:」キーを押すとコマンドを入力できますので、ここで以下のコマンドを入力することで操作可能です

:w保存
:qファイルを閉じる
:wq保存してファイルを閉じる
:q!保存せずにファイルを閉じる(ファイルを編集した場合「:q」では閉じれません)

まとめ

今回は設定ファイルの編集方法を扱いました。

Linuxを触る際には様々な設定ファイルを編集することになりますが、必ずバックアップは取るようにしましょう。

あとから「なぜか動かない。変えたはずの所を直しても戻らない」ということになった私との約束です。