🦁

Debian 12 環境構築

に公開

この記事は、さくらインターネットのVPSでDebian 12の環境構築をした作業記録である。価格だけで選ぶなら、X-ServerやWeb ARENAのVPSの方が安い。

aptコマンドの使い方

  • 検索:apt search apparmor
  • インストール:apt install apparmor
  • リストの更新:apt update
  • バイナリの更新:apt upgrade

systemctlの使い方

https://zenn.dev/tomoakinagahara/articles/521a8ffbbedc89

auditd

後述のAppArmorで利用する。

  • インストール:apt install auditd

AppArmor

AppArmorとは、Debian系における、Redhat系のSELinuxのようなもの。SELinuxは慣れないとかなり煩わしいが、AppArmorSELinuxより楽である。

  • インストール
    sudo apt install apparmor apparmor-utils
    
  • ステータスを確認
    sudo systemctl status apparmor
    
    インストール直後に起動するはずだが、起動していなければ起動する。
    sudo systemctl start apparmor
    
    AppArmorの設定状況を確認する。
    sudo aa-status
    
    こんな感じで出力される。初期状態で7プロファイルが動作している。
    apparmor module is loaded.
    7 profiles are loaded.
    7 profiles are in enforce mode.
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/connman/scripts/dhclient-script
       /{,usr/}sbin/dhclient
       lsb_release
       nvidia_modprobe
       nvidia_modprobe//kmod
    0 profiles are in complain mode.
    0 profiles are in kill mode.
    0 profiles are in unconfined mode.
    0 processes have profiles defined.
    0 processes are in enforce mode.
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.
    0 processes are in mixed mode.
    0 processes are in kill mode.
    
  • 標準の設定ファイルがあるディレクトリー
    tree /etc/apparmor.d/abstractions/
    
  • ローカルの設定ファイルを作るディレクトリー
    /etc/apparmor.d/local/
    

Apache2のAppArmorプロファイルの作り方は、以下を参照。
https://qiita.com/hoogee/items/7f96f2d533b5cf9576cd

Apache2

Debian系のApacheの設定ファイルの管理方法はかなりうざいです。ひどいです。

  • インストール
    sudo apt install apache2
    
  • 起動を確認
    sudo systemctl restart apache2
    

Moduleの有効化と無効化

有効化

sudo a2enmod ssl

無効化

sudo a2dismod ssl

mod_headers を有効にする

なんで有効にしたんだか忘れた。

sudo a2enmod headers
sudo systemctl restart apache2
sudo apache2ctl -M | grep headers

仮想ホストの設定

仮想ホストとは、一つのサーバー(1つのIPアドレス)に、複数のサイト(ドメイン)を割り当てる方法。

  1. sites-availableディレクトリーに、1サイトにつき1ファイルを作る
  2. a2ensiteコマンドで、sites-enabledにリンクを張る
  3. ownerrootじゃないとエラーになる?

PHP

PHPは、Apacheのモジュールとして動作するので速い。CGI(FastじゃないCGI)は、プロセス間通信するので遅い。現在ではPerlのapacheモジュールもあるし、Python版もあるらしい。PHP-FPM(FastCGI版)で動作させることも可能であるが、モジュール版の方が速いし手間が少ない。

  • Apache2用モジュールのインストール
    現在はNginx用のPHPモジュールも存在する
    sudo apt install libapache2-mod-php
    
  • 再起動してPHPモジュールを有効にする
    sudo systemctl restart apache2
    

Let's Encrypt

Debian の certbot は、ApacheNginx でないと上手く動かない。
LiteSpeed で使う場合の手順は後述。

Apache2のSSLを有効にする

sudo a2enmod ssl
sudo systemctl restart apache2

Let's Encryptのインストール

sudo apt install certbot python3-certbot-apache

SSL証明書の設定

以下のコマンドを実行すると、ホスト名の一覧が表示されるので、番号から選択するだけ。簡単。

sudo certbot

--apacheを付けると、apacheのconfファイルの設定も行ってくれる。

sudo certbot --apache

証明書の更新は自動的に行ってくれる。

sudo systemctl status certbot.timer

LiteSpeedを使っている場合

一旦LiteSpeedをstopして、ApacheのSSLを有効にした後にcertbotする。証明書が有効になっていることを確認したら、Apacheを停止し、LiteSpeedをスタートさせる。

  1. Apacheの設定ファイルを作成する。certbotに認識させるため
  2. sudo /usr/local/lsws/bin/lswsctrl stop:LiteSpeedを停止する
  3. sudo /usr/local/lsws/bin/lswsctrl status:LiteSpeedが停止しているか確認
  4. sudo a2enmod ssl:ApacheのSSLを有効にする
  5. sudo systemctl start apache2:ApacheのSSLを有効にして起動する
  6. ブラウザでApacheの起動を確認する
  7. sudo certbot --apache:Apacheモードでcertbotを実行する
  8. ブラウザで証明書が更新されているか確認する
  9. sudo a2dismod ssl:ApacheのSSLを無効にする
  10. sudo systemctl stop apache2:Apacheを停止する
  11. sudo /usr/local/lsws/bin/lswsctrl stop:LiteSpeedを開始する
  12. ブラウザで証明書が更新されているか確認する

MySQL

MySQLサーバーとCLIクライアントのパッケージ名はこちら。
なんでこうなった???まぁここは歴史的経緯があるからかもしれない。

sudo apt install default-mysql-server
sudo apt install default-mysql-client

FTP - vsftpd

パッシブモード

https://zenn.dev/tomoakinagahara/articles/97ac440ef1593e

chroot

https://zenn.dev/tomoakinagahara/articles/1f18348c1fef08

メールサーバー

Postfix

多分、インストールしただけで動作すると思う。

dovecot

https://zenn.dev/tomoakinagahara/articles/7fcdceabaf2c96

Fail2ban

SSHのログインが失敗したIPアドレスをブロックする。
細かな設定方法は以下の記事にまとめてある。

https://zenn.dev/tomoakinagahara/articles/a1af9d36c67c20

  1. インストール:sudo apt install fail2ban
  2. Fail2ban起動:sudo systemctl start fail2ban
  3. ステータスを確認:sudo systemctl status fail2ban

デフォルトで起動に失敗していた場合は、以下のエラーが表示されていないか確認する。

ERROR Failed during configuration: Have not found any log file for sshd jail

上記のエラーは、設定ファイルにログのパスが設定されていないから。
Debianで、Redhat系(CentOSなど)の/var/log/secureに相当するログファイルは/var/log/auth.logだがrsyslogがインストールされていないと作成されていないので、/etc/fail2ban/jail.d/defaults-debian.conflogpathが空欄になっている。

/etc/fail2ban/jail.d/defaults-debian.conf
[sshd]
enabled = true
logpath = 

backendsystemdにする方法もあるようだが上手くいかない。

/etc/fail2ban/jail.d/defaults-debian.conf
[sshd]
enabled = true
backend = systemd

rsyslogをインストールする方が良い。

  1. インストール:sudo apt install rsyslog
  2. ステータスを確認:sudo systemctl status rsyslog
  3. ログに書き込まれているか確認:cat /var/log/auth.log

再起動して確認

sudo systemctl restart fail2ban
sudo systemctl status fail2ban
sudo fail2ban-server status 
sudo fail2ban-server status sshd

仮想スイッチ

さくらインターネットでは、仮想スイッチを構築してローカル・エリア・ネットワークを構築できる。基本的には同一ゾーン内(東京・大阪・石狩)での接続だが、ブリッジ接続も可能らしい。

スイッチを契約する

VPSをスイッチに繋ぐ方法

VPSには、NICが3つ用意されている。1つ目はインターネットに繋がっているので、2つ目を仮想スイッチに繋ぐ。

  1. さくらのVPSコントロールパネルを開く
  2. 左メニューの【サーバー】から、VPSを選択する
  3. 【ネットワーク】タブをクリックし、下へスクロールする
  4. eth1をスイッチに繋ぐ
  5. 静的IPアドレスを設定する
    1. 一時的な設定
      sudo ip address add 192.168.1.4/24 dev ens4
      sudo ip link set ens4 up
      
    2. 恒久的な設定
      /etc/network/interfaces に以下を追記する。
      auto ens4
      iface ens4 inet static
          address 192.168.1.4
          netmask 255.255.255.0
      

追加ストレージ(NFS)をL2スイッチに接続する

基本的に以下のURLの通りにやればできる
https://manual.sakura.ad.jp/vps/support/technical/nfs.html
ただし、NFSを /www/ にマウントしたかったので、マウントだけ変えた。

mount -t nfs 192.168.1.100:/export /www

Discussion