このエントリーをはてなブックマークに追加

AlmaLinux9.2のインストール

イメージファイルのダウンロード

まず、公式サイトに行き、AlmaLinux-9-latest-x86_64-dvd.isoをダウンロードします。

公式サイトには
AlmaLinux-9.2-x86_64-dvd.iso
AlmaLinux-9.2-x86_64-boot.iso
AlmaLinux-9.2-x86_64-minimal.iso
AlmaLinux-9.2-x86_64-boot.iso.manifest
AlmaLinux-9.2-x86_64.torrent
のようなファイルがありますが、

 dvd.iso インストールディスク。普通はこれを使う。 
 boot.iso インストーラーが起動するだけ。本体はミラーサイトからダウンロードしながらインストールする。インターネット環境がある場合はこちらでも良い。 
 minimai.iso 最小インストールする場合に使う。インストール後に随時dnfコマンドで必要なパッケージを追加する場合はこれでも良い。 
 torrent ビットトレント経由で本体をダウンロードする場合に使う。 

ダウンロードが終了したら、 DvdDecrypterやAnyDVDもしくは NeroやImgBurn等を使ってDVD-Rに焼きます。当初AlmaLinux-9.2-x86_64-dvd.iso をDVD-R DLのメディアに焼こうと思ったのですが、なんと、DVD-R DLの容量オーバーして焼けません。なぜDVD-R DLの容量に入らないサイズのISOファイルを置いているのか意味不明です。

2枚に分けろよ。

したがって、今回は、AlmaLinux-9.2-x86_64-minimal.iso をDVD-Rに焼きます。パッケージは都度dnfコマンドでインストールする事にします。

まずサーバーに焼いたDVDをセットします。BIOS(UEFI BIOS)でブートの優先順位をDVDドライブを最優先にしてください。ブートの優先順位の変え方はサーバーのマニュアルを見てほしいのですが、大抵は起動時にF2キーでUEFI BIOSのメニューが出ます。

・GRUB Version x.xx
ここで、デフォルトでは「Test this media」になっているのですが、今焼いたばかりのディスクをテストする必要はまったくありません。エラーが出たら焼き直せばいいのです。したがって、Install Alma Linux 9.2を選択します。

・インストールに使用する言語を選択してください。
ここは日本語で問題ないでしょう。

・ベース環境
最小限インストールを選択します。minimalディスクではおそらくこれ以外は途中でrpmファイルがないのでエラーが出ると思います。(未確認)

・ストレージの設定
カスタムを選択して、自分でパーティションを分けます。

マウントポイント ファイルシステム 容量  デバイスタイプ
/boot/efi EFI System Partition  1GB RAID1
SWAP  1GB RAID1 
/ xfs 残り全部  RAID1 

ここでは、同容量のハードディスクを2台接続して、ソフトRAIDにしています。

サーバーのRAMが256MBとかだった時代に、SWAPとしてRAMの倍の容量を設定する慣習がありました。しかし、現在ではすでにサーバーには8GBものRAMが搭載されており、スワップのためだけに16GBもの容量を使うのは単にハードディスクの無駄です。したがって、現在はSWAPは必要ないと思いますが、いちお過去の慣習にしたがって1GBだけ確保しておきます。

・ネットワークとホスト名
サーバーにするので、DHCPなどにはせず、固定IPを設定します。

・セキュリティポリシーの適用
よくわからないのでオフにします。

・ルートパスワード
インストール中は暗記できる程度の簡単なものにしておき、全てが終わったら長くて複雑なものに変更します。

・ユーザーの作成
SSHで直接ルートでログインできるように設定しておくのは危険ですから、必ずログインユーザーを作っておきます。ここでのパスワードも簡単なものでかまいませんが、全ての設定が終わったらすぐに長くて複雑なものに変更しましょう。

ここまで終わったら「インストール開始」をクリックします。けっこう時間がかかるので他の仕事をするなりしてお待ちください。

インストールが終わったらEnterキーを押すと再起動しますが、ここでブートの優先順位がDVDのままになっていると、またインストーラーが起動してしまいます。なので、再起動時にF2キーを押してブートの優先順位をDVDからハードディスクに変更しておいてください。

重複を避けるために、これ以降は以前に「▽ここを参考にしました」と紹介したサイトはここでは省略していますが、 この記事を作るにあたりさまざまなサイトを参考にしています。参考にさせていただいたサイトにはこの場をお借りして感謝申し上げます。

ソフトRAIDの定期チェックをやめる

デフォルトの状態では、日曜の01:00にソフトRAIDのチェックがかかります。 しかし、このチェックがかかっている間はサーバーが激重になるので、サーバーの設定が一段落するまでは定期チェックを止めておきます。
vi /etc/sysconfig/raid-check

ENABLED=no

SELinuxをオフにする

SELinuxに関しては、どうやって設定するのかわからないし、いくら検索しても私のスキルでも理解できる説明をしてくれているサイトがないので、ここではオフにします。 セキュリティはもっぱらfirewalldに頼る事にします。
vi /etc/sysconfig/selinux

SELINUX=disabled

このままだと再起動するまでSELinuxが動いてるので、今すぐ停止させたい時は
setenforce 0
とします。これを忘れていると、telnet等でいっこうに繋がらずに延々と悩む事になります。

IPアドレス等を設定する

インストール時にIPアドレス等は設定できるわけですが、あとから変更するたびにハードディスクをフォーマットしてLinuxを再インストールするわけにもいきませんから、IPアドレスの手動での設定方法を覚えておきましょう。

・NetworkManagerを起動する
systemctl start NetworkManager.service
systemctl enable NetworkManager.service

・現在のホスト名の確認
nmcli general hostname

・ホスト名の設定
nmcli general hostname www2.aufheben.net
注意:これはあくまで例です。このままコピペして本当にホスト名をwww2.aufheben.netにしないでくださいね。じゃないと、世の中にwww2.aufheben.netっていうホストだらけになってしまいますので。

・NICの名前の確認
nmcli device

DEVICE TYPE STATE CONNECTION 
em1     ethernet  接続済み  em1        
em2     ethernet  利用不可  --         
lo      loopback  管理無し  --         

ここで「lo」とは、 コミックLO ループバック・・・つまり、サーバーに直接キーボードを繋げて操作するためのインターフェイスなので無視してください。

ここではNICの名前は「em1」「em2」ですが、em2にはLANケーブルが繋がっていないようなので、以後NICの名前は「em1」とします。 NICの名前はお使いの環境によって異なりますので、以後NICの名前は読み替えてください。 このページのコマンドを丸コピペして「動かないぞゴルァ」などと文句を言ってくるのはナシでお願いします。

・NICをpublicゾーンにする
nmcli con mod em1 connection.zone public

・うまくいったかどうか確認
firewall-cmd --get-active-zones

public
    interfaces: em1

・IPアドレスの設定
nmcli con mod em1 ipv4.addresses 192.168.0.4

・ デフォルトゲートウェイの設定
nmcli con mod em1 ipv4.gateway 192.168.0.2

・ネームサーバーの設定
nmcli con mod em1 +ipv4.dns 192.168.0.2
nmcli con mod em1 +ipv4.dns 192.168.0.4
使わなくなったネームサーバーを消す場合は、
nmcli con mod em1 -ipv4.dns 192.168.10.9
のように、「-ipv4.dns」に続けてIPアドレスを入力します。また、追加、削除ではなく完全に上書きしたい場合は、
nmcli con mod em1 ipv4.dns "192.168.0.2 192.168.04"
みたいに、「ipv4.dns」に続けてダブルクォートで囲ってDNSサーバーを複数記述します。
注意:これはあくまで例です。このままコピペして「ネットに繋がんねーぞゴルァ」などと文句を言うのはナシでお願いします。

・DNSのsearchの変更
従来は/etc/resolv.confに書いてたのですが、ネットワークマネージャーを使う場合はnmcliコマンドで設定しないと、ネットワークマネージャーが上書きしてしまいます。
nmcli con mod em1 ipv4.dns-search aufheben.net
注意:これはあくまで例です。このままコピペして本当にaufheben.netにしないでください。

・ipv4関係の設定の確認
nmcli --fields ipv4 connection show em1

ipv4.method:                            manual
ipv4.dns:                               192.168.0.2 192.168.0.4
ipv4.dns-search:                        aufheben.net
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.0.4/24
ipv4.gateway:                           192.168.0.2
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)

注意:これはあくまで例です。 「これまで説明してきた内容と違うじゃないか」などと言ってはいけない。もっと温かい目で作者を見てほしいものである。(©Dr.スランプ)

基本的にこれらの設定を変更する場合、
nmcli con mod NIC名 ipv4.項目名 値
とすれば変更できるので、最低限それだけは覚えておいてくださいね。

・設定を有効にする
nmcli con reload
nmcli con down em1
nmcli con up em1

IPアドレス、デフォルトゲートウェイ、DNSサーバー、ホスト名などはCentOS4の頃は、/etc/sysconfig/networkとか、/etc/resolv.confとかに直接vi等のエディタを使って記述していたのですが、 ネットワークマネージャーを使う場合はネットワークマネージャーで設定しておかないと、直接記述してもnmcli con reloadするとネットワークマネージャーで上書きされてしまいます。 必ずネットワークマネージャー経由で設定するようにしてください。

SSHで接続できるようにする

Linuxサーバーを設定する場合、大抵はあらかじめWindowsパソコンからtelnetかSSHでログインして、Windowsパソコンに保存しておいたコマンドをコピペしながら設定します。でないと、面倒くさすぎてやってられません。したがって、まずはSSHでログインできるようにします。

デフォルトではルートで直接ログインできる設定になっています。しかしながら、ルートで直接ログインできるようになっていると、ユーザー名は「root」に固定されており、パスワードのみを英単語総当りでログインを試みられてしまうため、侵入されてしまうリスクが高まります。そこで、ルートでは直接ログインできないようにします。
vi /etc/ssh/sshd_config

PermitRootLogin no
PermitEmptyPasswords no

また、システム全体の暗号化ポリシーを外しておかないとPoderosaからログインできなくなってしまうので、以下の設定をします。
vi /etc/sysconfig/sshd

#システム全体の暗号化ポリシー
#から脱退するために以下のコメントを外すべし
CRYPTO_POLICY=
↑コメントアウトを外す

ただし、これでもPoderosaのバージョンによってはログインできない事があり、以後の説明ではPoderosaはあきらめてRLoginを使う事にします。

以下の設定が終わったら、SSHのサービスを起動します。
systemctl start sshd.service
systemctl enable sshd.service

以下の作業は、Windowsパソコンから、RLogin を使って遠隔で操作します。ただし、firewalldの設定に失敗するとWindowsパソコンから操作ができなくなるため、サーバーに接続したディスプレイやキーボードはいぜんとして接続したままにしておいてください。

firewalldの設定

・firewalldの起動
systemctl start firewalld
systemctl enable firewalld

・http、https、FTP、DNS、NTP、SSH、pop3を許可
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-service=dns --permanent
firewall-cmd --zone=public --add-service=ntp --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=pop3 --permanent

dhcpv6を削除
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

・cokpitポート封鎖
firewall-cmd --zone=public --remove-service=cockpit --permanent

・telnet、 SMTPを内部LAN(192.168.0.xx)からのみにする
SSHの設定に失敗した場合にそなえて、LANの内部からならtelnetで接続できるようにします。また、SMTPを外部に向けて開けておかないとメールが一切届かないのですが、以前サーバーを迷惑メール発生装置にされてしまったので、ここではSMTPポートは内部LANにのみ開放するようにしています。

firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=telnet accept"
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=smtp accept"

注意:これはあくまで例です。お使いのLANのローカルIPが192.168.0.xxxではない場合は、お使いのローカルIPに合わせて読み替えてください。

・うまくいったか確認
firewall-cmd --list-all --zone=public --permanent

public
  target: default
  icmp-block-inversion: no
  interfaces: em1
  sources: 
  services: http https dns ntp ssh pop3
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="192.168.0.0/24" service name="telnet" accept
    rule family="ipv4" source address="192.168.0.0/24" service name="smtp" accept

全部終わったらリロード。
firewall-cmd --reload

設定のリロードは、設定が全て終わった後にやりましょう。じゃないと、telnetやsshのルールを削除した後に設定のリロードをすると現在の接続が切れてしまいます。最悪の場合、データーセンターに行かないといけなくなります。

ファイアウォールの設定は、できればデーターセンターに設置する前に行いたいのですが、どうしても遠隔で操作しなければならない場合は、まず5分おきにcrontabで
systemctl stop firewalld
が実行されるように設定しておきます。うまくいったらcrontabの該当箇所をコメントアウトします。

コラム データーセンターはできれば行きたくない
ファイアウォールの設定にミスると、最悪、直接データーセンターに行ってサーバーを直接操作しなければならなくなります。しかし、データーセンターは入館の手続きそのものが面倒くさい(天王洲アイル)、入館してからサーバーにたどり着くまでに長い迷路や静脈認証をいくつもクリアしなければならない(新豊洲)、受付が大理石の床になっていて台車でサーバーを引いたまま受付ができない(有明)、夜間に駐車場が閉まってしまう(新川)などなど、とにかく面倒くさいので、できればデーターセンターで直接サーバーを操作しなければならない事態に陥る事だけは避けたいところです。

・基本的に・・・
基本的に、全てのIPに対してアクセスを許可する場合は、
firewall-cmd --zone=public --add-service=サービス名 --permanent
それを取り消す場合は、
firewall-cmd --zone=public --remove-service=サービス名 --permanent

特定のIPアドレスに対して許可する場合は、
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=IPアドレス/サブネットマスク service name=サービス名 accept"
それを取り消す場合は、
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=IPアドレス/サブネットマスク service name=サービス名 accept"

なので、これだけを覚えておくと便利です。ここでサブネットマスクは、255.255.255.0ではなく、24と書いてくださいね。

不要な常駐ソフトを止める

常駐ソフト、とりわけルート権限で動作している常駐ソフトは、そのいずれかに脆弱性が発見されると、途端にルート権限を乗っ取られてしまいます。なので、できる限り常駐ソフトは少なくしなければなりません。

ls -1 /etc/systemd/system/multi-user.target.wants/
で不要な常駐ソフトをチェックした後、
systemctl disable auditd.service
systemctl disable dnf-makecache.timer
systemctl disable irqbalance.service
systemctl disable kdump.service
systemctl disable mdmonitor.service
systemctl disable remote-fs.target
systemctl disable sssd.service
systemctl disable tuned.service
等を使ってで不要な常駐ソフトを起動しないようにしておき、
reboot
でリブートします。

なお、これはあくまで例です。インストールした時に最初から入れられてしまう不要なサービスは、Linuxのバージョンごとに異なるので、その都度読み替えてください。

VSFTPDの設定

・VSFTPDのインストール
先程と同じく、rpmコマンドではなくdnfコマンドを使います。
dnf -y install vsftpd

・設定ファイルの変更
デフォルトのままでは色々問題が多いため、設定ファイルを変更して使います。それにしても、VSFTPDは雛形になくて自分で記述しなければならない設定が多々あります。Googleで検索して調べろとでも言わんばかりです。
vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO ←NOにする
chroot_local_user=YES ←コメントアウトを解除
listen=YES ←YESにする
listen_ipv6=NO ←NOにする
allow_writeable_chroot=YES ←ひな形にないので自分で書く
use_localtime=YES ←ひな形にないので自分で書く
dual_log_enable=YES ←ひな形にないので自分で書く
vsftpd_log_file=/var/log/vsftpd.log ←ひな形にないので自分で書く

・chroot_local_user=NO
ローカルユーザーがFTPで接続した場合、そのユーザーのホームディレクトリがルートとみなされ、それより上に行けなくなります。これにより、管理者以外のユーザーがシステムディレクトリや他人のディレクトリを覗けなくなります。

・listen=YES
CentOS8まではxinetd経由で起動していたためlistenをNOにしていましたが、Red Hat EL9ではxinetdがなくなってしまったので、仕方なく単独起動させます。したがって、listen=YESにします。

・listen_ipv6=NO
IPv6のソケットをListenするかどうか。ここではソケットの接続はipv4でのみ行うためNOに設定します。

・allow_writeable_chroot=YES
デフォルトの設定では、chrootされたディレクトリに第三者からの書き込み権限があるとエラーで接続できないようになっています。これをYESに設定すると、chrootされたディレクトリが第三者からの書き込み権限があっても接続できるようになります。雛形にはないので自分で書き足します。

・use_localtime=YES
デフォルトでは、ファイルの更新時刻として世界標準時を返すようなっています。その場合、FTPクライアントの設定で「ホストの時刻」を「グリニッジ標準時」「世界標準時」「協定世界時」とかにしないといけません。use_localtime=YESに設定する事で、ファイルの更新時刻をローカル時間で返すようになるので、FTPクライアントの設定を「時差なし」に設定する事ができます。雛形にはないので自分で書き足します。

・dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
vsftpd独自の形式のログファイルを記録するようにします。これにより、fail2banでFTPへの不正アクセスをチェックできるようになります。

ここで、「ログファイルのローテーションを設定しなければそのうちログファイルがパンクしてしまうのでは?」と心配になりますが、ログファイルを/var/log/vsftpd.log にしておけば、/etc/logrotate.d/vsftpdに自動的に設定されているため、あえてローテーションを設定する必要はありません。

・特定のユーザーのみFTPで接続できるようにする
FTPを外部に公開する際に気をつけないといけないのは、1分間に100アクセスぐらいのすさまじい不正アクセスがあるという事です。昔はFTPで安易なパスワードにしておいても全然平気だったのですが、世知辛い世の中になったものです。

なので、今回からFTPで接続できるユーザーを限定します。
vi /etc/vsftpd/vsftpd.conf

↓雛形にはないので追加してください。
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

vi /etc/vsftpd/user_list

ここにFTPでログインしても良いユーザーIDを書いてください。

FTPを許可するユーザーのパスワードは、作業中は短くてかまわないのですが、作業が終わってグローバルIPに接続する時には長くて複雑なものにしておいてください。

・起動する
今回からxinetdが使えなくなったので、単独で起動させます。
systemctl start vsftpd
systemctl enable vsftpd

telnetのインストール

dnf -y install telnet
dnf -y install telnet-server

今回からxinetdが使えなくなったため、単独で起動させます。なんで後ろに.socketをつけないといけないのかは謎です。
systemctl start telnet.socket
systemctl enable telnet.socket

SSHを秘密鍵のみにする

SSHポートをグローバルIPに対して開けてしまうと、1分間に100回以上の不正アクセスを試みるアクセスが来ます。その場合、IDとパスワードを英文字総当たりで侵入を試みてくるので、いつかそのうち破られてしまいます。

そこで、秘密鍵がなければSSH接続はできないようにします。秘密鍵は64文字x25行のランダムな英文字なので、いくら総当りでやっても天文学的な確率でなければ破られないでしょう。

▽以降の記事を書くにあたり、ここを参考にしました。ありがとうございました。
https://qiita.com/soma_sekimoto/items/35845495bc565c38ae9d
https://qiita.com/tsuchm/items/b50cb10191c5a1cc05bc
https://www.server-memo.net/memo/rlogin/rlogin_create_key_pair.html
https://weblabo.oscasierra.net/openssh-sshd-pubkey-auth/
https://zenn.dev/noraworld/articles/ssh-rsa-sha1-disabled

・秘密鍵を作る
ルート(su -)で作業している場合は、いったん[Ctrl][d]でルートから抜けてログインユーザーになってください。
cd ~
chmod 700 .ssh
cd .ssh
ssh-keygen -t ed25519
質問は無視して全部Enterで送ってしまいます。すると、秘密鍵(id_ed25519)、公開鍵(id_ed25519.pub) が生成されます。

注意:CentOS8以前はssh-keygenだけで良かったのですが、Red Hat EL9からは従来の暗号化方式(「RSA/SHA暗号方式」って言うそうです)で作られた秘密鍵/公開鍵は使えなくなりました。したがって、ssh-keygen の後ろに-t ed25519をつけて、暗号化アルゴリズムを指定する必要があります。

cp id_ed25519.pub authorized_keys
chmod 600 authorized_keys
ここで、authorized_keysのパーミッションは600でないとエラーが出てログインできないので注意。

・パスワードログインの禁止
vi /etc/ssh/sshd_config

PasswordAuthentication no

しかし、このままでは自分も入れなくなってしまうので、ローカルIPからはパスワードで入れるようにします。

なお、以下の設定は、sshd_configの一番下の行に書いてください。Match Addressを途中に書いてしまうと、以降の記載が全部そのアドレスにマッチしないと無効になってしまいますので。
vi /etc/ssh/sshd_config

↓一番下に書くこと!
Match Address 192.168.0.0/24
PasswordAuthentication yes

・秘密鍵でログインできるようにする
vi /etc/ssh/sshd_config

↓以下の行のコメントアウト(#)を外して有効化する。
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

CentOS8までは「RSAAuthentication yes」という項目があったのですが、Red Hat EL9からはこの設定は不要で、書いてあるとかえってエラーになってしまうので、書かないようにします。

▽ここを参考にしました。ありがとうございました。
https://qiita.com/mogya/items/7f4a765a22e7e881dae5

・RLoginの設定
まずは秘密鍵(id_rsa)をWindowsパソコンにセーブします。といっても、秘密鍵そのものはテキストファイルであるため、
cat ~/.ssh/id_ed25519
としてRLoginの画面に表示させ、それをコピペしてWindowsパソコンのテキストファイルにコピーすれば良いのです。

サーバーのホスト設定のところで「SSH認証鍵」を押します。

すると、ファイルの選択画面になるので、先程保存した秘密鍵を選択して「開く」を押してください。

ここでは空欄になってますが、当然ながら「ホスト名」「ログインユーザー名」はちゃん入れてください。あと、秘密鍵にパスフレーズを設けている場合は、「パスワード or パスフレーズ」もちゃんと入れてください。

バックアップディスクの追加

Linuxをインストールする時にバックアップ用ディスクを接続していると、勝手にフォーマットされてマウントされてしまいます。普通はそれでも良いのですが、バックアップディスクに前のサーバーのバックアップが残っている場合は、勝手にフォーマットされてしまうと困るので、Linuxをインストールする時はSATAケーブルを外しておいてください。

ここまでの作業が終わったら、いったんサーバーの電源を切って、シャーシを開けてバックアップ用ハードディスクのSATAケーブルを接続します。以後は、バックアップ用ディスクが既にサーバーに装着済みであるとして話を進めます。

・バックアップ用ディスクがsd何かを調べる。
fdisk -l | grep GiB

ディスク /dev/sdb: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
ディスク /dev/sda: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
ディスク /dev/md127: 929.4 GiB, 997918244864 バイト, 1949059072 セクタ
ディスク /dev/md125: 1 GiB, 1074724864 バイト, 2099072 セクタ

バックアップディスクは250Gなので、ここでは/dev/sdhのようです。

バックアップ用に同じ容量のディスクをつけてしまった場合は、容量では判断できないので、RAIDになってるかどうかで判断する事もできます。
cat /proc/mdstat

Personalities : [raid1] 
md125 : active raid1 sdb1[1] sda1[0]
1049536 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md126 : active raid1 sda2[0] sdb2[1]
1047552 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sda3[0] sdb3[1]
974529536 blocks super 1.2 [2/2] [UU]
bitmap: 4/8 pages [16KB], 65536KB chunk

unused devices: <none>

としてみて、raidに含まれてないディスクがバックアップ用ディスクという事になります。この例ではsdaとsdbは少なくともバックアップ用ディスクではないという事になります。

・パーティション作成
バックアップ用ディスクにパーティションを作りましょう。バックアップ用ディスクに既に中身が入っている場合は、以下の作業は読み飛ばしてください。
fdisk /dev/sdh
コマンド (m でヘルプ): p

ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 3C3543F9-3540-4334-94A9-C15576942EBF

現在はパーティションがないので、新しくパーティションを作ります。

コマンド (m でヘルプ): n
パーティション番号 (1-128, 既定値 1): 
最初のセクタ (34-488397134, 既定値 2048): 2048
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-488397134, 既定値 488397134): 488397134
新しいパーティション 1 をタイプ Linux filesystem、サイズ 232.9 GiB で作成しました。
コマンド (m でヘルプ): w

最初のセクタも最終セクタも既定値のままで良いでしょう。

うまくいったか確認
fdisk -l

ディスク /dev/sdh: 232.9 GiB, 250059350016 バイト, 488397168 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 3C3543F9-3540-4334-94A9-C15576942EBF

デバイス   開始位置  終了位置    セクタ サイズ タイプ
/dev/sdh1      2048 488397134 488395087 232.9G Linux ファイルシステム

・フォーマット
mkfs -t xfs /dev/sdh1
注意:このコマンドを丸コピペするのはやめましょう。お使いのディスクのフォーマットしたいデバイス名を調べた上で、デバイス名は置き換えてくださいね。

meta-data=/dev/sdh1              isize=512    agcount=4, agsize=15262347 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=61049385, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=29809, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

・UUIDの確認
blkid | grep sdh1

/dev/sdh1: UUID="5d83842b-ae1a-4657-88ef-2574bedfff58" TYPE="xfs"
PARTUUID="64a49eba-029d-d347-87ca-107e0c3516ae"

・サーバー起動時に自動的にマウントさせる
バックアップ用ディスクのUUIDを/etc/fstabに記載します。UUIDなんてとても手入力できませんから、WindowsパソコンでRLogin経由でコピペしてくださいね。

vi /etc/fstab

UUID=5d83842b-ae1a-4657-88ef-2574bedfff58 /backuphdd xfs defaults 0 0

reboot

・うまくいったか確認
df -h

ファイルシス サイズ 使用 残り 使用% マウント位置<
devtmpfs         6.8G     0  6.8G    0% /dev
tmpfs            6.8G  8.0K  6.8G    1% /dev/shm
tmpfs            6.8G  8.9M  6.8G    1% /run
tmpfs            6.8G     0  6.8G    0% /sys/fs/cgroup
/dev/md126       929G   11G  919G    2% /
/dev/sdh1        233G  1.7G  232G    1% /backuphdd
/dev/md125      1023M  6.8M 1017M    1% /boot/efi
tmpfs            1.4G     0  1.4G    0% /run/user/1000

ls /backuphdd
「そのようなディレクトリはありません」とは出ない事を確認します。

バックアップハードディスクが同じサーバー内にあると、ショートや火災等で全データー消失という事も考えられるので、crontabで定期的に遠方にあるサーバーにFTPで転送するように作っておくと、より安全です。

lm_sensorsのインストール

・lm_sensorsのインストール
dnf -y install lm_sensors

・grubの再構築
vi /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.md.uuid=46ffb918:36e7a60d:9c0887e4:fdb157e2 rd.md.uuid=cb129b1c:8a3c6f98:26f2bb40:3e5091d9 rhgb quiet
acpi_enforce_resources=lax
GRUB_DISABLE_RECOVERY="true"

赤字の部分を足します。それ以外をいじると起動しなくなる恐れがあるので、他の項目は触らないように。ここをしくじると、これまでの作業全部やりなおしになるので、慎重にも慎重を重ねた上で操作してください。

grub2-mkconfig -o /boot/grub2/grub.cfg

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-ee353b8023ac45e6acaf42f0fa2d42f4
Found initrd image: /boot/initramfs-0-rescue-ee353b8023ac45e6acaf42f0fa2d42f4.img
done

reboot
再起動後、
sensors-detect
質問が色々出るので、全てyと答えます。
sensors

asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

amdgpu-pci-0600
Adapter: PCI adapter
vddgfx:           N/A  
vddnb:            N/A  
temp1:        +33.0°C  (crit = +80.0°C, hyst =  +0.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
Tdie:         +33.2°C  (high = +70.0°C)
Tctl:         +33.2°C  

CPUファンのスピードがCentOSから検出できるかどうかはマザボ(=BIOS)にもよりますが、少なくともこのマザボではダメみたいです。(0RPMになってしまう)

しかし、マザーボードとCPUの温度は検出できるみたいなので、MRTG等に温度変化を記録させる事はできるでしょう。

fail2banのインストール

・インストール
dnf -y install epel-release
dnf -y install fail2ban

・起動
systemctl start fail2ban

・設定ファイルの作成
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/24 

[sshd]
enabled = true 

[dovecot] 
enabled = true 

[postfix] 
enabled = true

[postfix-sasl] 
enabled = true

[recidive]
enabled = true

[vsftpd]
enabled = true
logpath  = /var/log/vsftpd.log

自分自身(127.0.0.1/8)や、ローカルIP(192.168.0.0/24)は除外しないと、自分でタイプミスした場合に自分もBANされてしまいます。

基本的に、それぞれのjail名の下に「enabled=true」を足すだけです。
ただし、vsftpdはlogpathに指定したファイルが存在しないとエラーになってしまうため、まだ1回もFTPで転送を行っていない場合は、
touch /var/log/vsftpd.log
とやってサイズ0のログファイルを作成しておいてください。

・相手にBANさせた事を通知しない
cp /etc/fail2ban/action.d/iptables.conf /etc/fail2ban/action.d/iptables.local
vi /etc/fail2ban/action.d/iptables.local

↓最初からある行をコメントアウトして、その下に追記
#blocktype = REJECT --reject-with icmp-port-unreachable
blocktype = DROP

CentOS8まではiptables-common.confだったのですが、Red Hat EL9からは-commonの文字はなくなったようです。

・ここまでの変更を有効にする
systemctl restart fail2ban

・起動時に自動起動させる
systemctl enable fail2ban
systemctl is-enabled fail2ban

・ちゃんと動作しているか確認
fail2ban-client status
fail2ban-client status sshd

・自分がBANされてしまった
fail2ban-client set [Jail名] unbanip [IPアドレス]
で解除できます。ただし、ローカルIPから繋ぐか、サーバーに直接キーボードとディスプレイを繋いで操作するしかなさそうです。

・ローテーションの設定
最初に「dnf -y install fail2ban」をした時に自動的に設定されるようです。

シスログローテーションの設定

vi /etc/logrotate.conf

rotate 30 ←4を30に変更
compress ←コメントアウト解除

ここでは30としましたが、今はハードディスクにも余裕がかなりあるので、もっと長くても良いかもしれません。

エラーにならない事を確認
logrotate -d /etc/logrotate.conf

[注意] logrotate.confや、logrotate.conf.d以下を変更した時は、必ずエラーがない事を確認します。でないと、最悪apacheのログが2Gを越えてapacheが止まってしまいます。

postfixのインストール

CentOS8まではsendmailを使っていたのですが、Red Hat EL9からはもはやsendmailは使えません。sendmailはもともと性善説に基づいてつくられたメーラーであり、とても脆弱です。したがって、無理に使わない方が良いでしょう。

・postgixのインストール
dnf -y install postfix

・リレーするIPをローカルのみにする
sendmailはデフォルトがどこからのメールもリレーするようになっており、デフォルトのまま使用するとSPAMの踏み台にされ放題になります。しかし、postfixでは逆にどこからもリレーしませんので、ローカルIPからはリレーするようにします。

▽ここを参考にしました。ありがとうございました。
http://hp.vector.co.jp/authors/VA022911/tec/centos/postfix2.htm

vi /etc/postfix/main.cf

myhostname = www2.aufheben.net ←これはあくまで例です。
inet_interfaces = all ←localhostになっているのをallに変更
mynetworks = 192.168.0.0/24 ←リレーを許可するネットワークを指定

・メールボックスの形式を選択する

▽ここを参考にしました。ありがとうございました。
http://hp.vector.co.jp/authors/VA022911/tec/centos/dovecot.htm

で、この参照したサイトによると、
MailBox形式は、全てのファイルを1ファイルへ保存します。
MailDir形式は1メールを1ファイルで保存します。
だそうです。ここでは、長年慣れ親しんだsendmailと互換性のある形式に設定してみます。
vi /etc/postfix/main.cf

mail_spool_directory = /var/spool/mail ←コメントアウトを解除

ここまで設定したら、postfixを起動します。
systemctl start postfix
systemctl enable postfix

・ファイアウォールの解除
ファイアウォールでローカルIPからしか25番ポートにアクセスできなくしてあるので、これを全IPに開放します。この場合、設定をミスっていると迷惑メール発生装置になってしまうので、後で無限リレーになっていないかチェックする必要があります。

firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=smtp accept"
firewall-cmd --zone=public --add-service=pop3 --permanent

・うまくいったか確認
firewall-cmd --list-all --zone=public --permanent

public
  target: default
  icmp-block-inversion: no
  interfaces: em1
  sources: 
  services: dns ftp http https ntp pop3 smtp ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="192.168.0.0/24" service name="telnet" accept    

見ての通り、telnetのみローカルIPから許可。SMTPは全IPに対して許可している事になっています。

設定をリロードします。
firewall-cmd --reload

・不正中継のテスト
このままではもし不正中継を許可してあると、迷惑メール発生装置になってしまいます。そこで、迷惑メール発生装置になっていないかチェックします。

http://check.jippg.org/
にアクセスして、IPアドレスかドメイン名を入れます。

www2.aufheben.net
TEST 1....OK.
MAIL FROM:
RCPT TO:

TEST 2....OK.
MAIL FROM:
RCPT TO:

TEST 3....OK.
MAIL FROM:<>
RCPT TO:

TEST 4....OK.
MAIL FROM:
RCPT TO:

TEST 5....OK.
MAIL FROM:
RCPT TO:

テスト1~5までOKが表示されていれば不正中継はされていません。

・バーチャルホスト
1つのサーバーに1つのドメインしか割り当てていないとは限りませんので、複数のドメインを割り当てている場合は、受け入れるドメインを指定します。

たとえば、www2.aufheben.netサーバーにaufheben.info宛に届いたメールを受け取るように設定するには。
vi /etc/postfix/main.cf

mydestination = $myhostname, localhost.$mydomain, localhost, aufheben.info 

のようにカンマで区切って最後に追記します。

▽ここを参考にしました。ありがとうございました。
https://web-creators-hub.com/linux/postfix3/

ためしに、YahooメールやGmail等から、ここで設定した指定したドメイン宛にメールを送信してみてください。リターンメールが戻ってこなければ、
ls /var/spool/mail/
としてメールがちゃんと届いているかどうか確認してください。

・メールが届かない場合
1.postfixが起動していない
この場合、telnet localhost 25 としてみて、postfixがちゃんと25番ポートをlistenしているかどうか確認してください。
2.ファイアウォールが効いてる
firewall-cmd --list-all --zone=public --permanent
として、services:にsmtpが含まれているかどうか確認してください。また、ファイアウォールの設定をリロードするのを忘れてないか確認してください。
3.バーチャルドメインを指定していない
/etc/postfix/main.cfのmyhostnameやmydestinationが正しく設定されているかどうか確認してください。また、inet_interfaces = allになっているかどうかも確認してください。

・ルートあてのメールを転送する
sendmailでは/etc/aliasesというファイルで設定しましたが、postfixでもそのまま有効です。
vi /etc/aliases

root: (転送したいユーザー名) ←一番下の行に追記

newaliases
ちゃんと設定できたかどうか確認
dnf -y install s-nail
mail root
Subject:test
test
~.
なお、ここで従来は終わらせる時に.(ピリオド1個)で良かったのですが、今回からは~.(にょろ+ピリオド)になったので注意が必要です。
cd /var/spool/mail
ls
これで設定したユーザー宛にルート宛のメールが届いていれば成功です。

dovecotのインストール

・dovecotのインストール
dnf -y install dovecot

・プレーンテキストパスワードに対応する
cd /etc/dovecot/conf.d
vi 10-auth.conf

disable_plaintext_auth = no ←コメントアウトを外して、yesをnoにする

・pop3sを使わないで通信できるようにする
vi 10-ssl.conf

ssl = no ←requiredをnoにする

・sendmail方式のメールボックスを取り出せるようにする
先程postfixの設定でメールボックスをsendmail互換形式に設定しましたので、こちらもsendmail形式のメールボックスを取り出せるように設定します。
vi 10-mail.conf

mail_location = mbox:~/mbox:INBOX=/var/spool/mail/%u
↑コメントアウトを外して = の後ろに追記
mail_access_groups = mail ←コメントアウトを外して = の後ろに追記

ちなみに、postfixでメールの格納形式を「Maildir形式」に設定した場合は、
mail_location = maildir:/var/mail/%u
と設定するそうです。

▽ここを参考にしました。ありがとうございました。
http://hp.vector.co.jp/authors/VA022911/tec/centos/dovecot.htm#dovecot

・開始
systemctl start dovecot
systemctl enable dovecot

・うまくいったか確認
telnet localhost 110
user (ユーザー名)
pass (パスワード)
quit
注意:(ユーザー名)(パスワード)のところには、当然ですが、お使いのユーザー名とパスワードを入れてください。本当に(ユーザー名)(パスワード)と入力して「動かんぞゴルア」とか文句を言ってくるのはナシで。

あとはBecky等のメールソフトでメールが受信できるかどうか確認してください。

viをカラーにする

・vim-enhancedのインストール
dnf -y install vim-enhanced

・オートインデントオフ
オートインデントなどがあると、Windowsパソコンからコピペした時に1行ごとにインデントが増えてしまって全体的に斜めになってしまうので、オフにします。
vi /etc/vimrc

set nocompatible " Use Vim defaults (much better!)
set bs=indent,eol,start " allow backspacing over everything in insert mode
の下に以下を足す
set paste
set ruler

set rulerはすぐ上に set ruler " show the cursor position all the time という行があるのですが、右側にコメントあるせいでエラーになっています。どうも、/etc/vimrcを書いた人はset文の後ろにコメントを書くとエラーになる事を知らないみたいです。

・vi2というコマンドを新設する
/usr/bin/vim -u /etc/vimrc /usr/local/bin/vi2

#!/bin/sh
/usr/bin/vim -u /etc/vimrc $1

chmod 755 /usr/local/bin/vi2

・ログイン時にvi=vi2になるようにする
vi /etc/profile.d/vi2.sh

alias vi=vi2

いったんサーバーから抜けて、ログインし直します。

・うまくいったか確認
vi /etc/aliases
カラーになれば成功。

vi終了時の画面を残す

▽ここを参考にしました。ありがとうございました。
http://kurokawh.blogspot.com/2015/01/linuxcygwin-less-man.html

cd ~
infocmp > screen.terminfo
vi screen.terminfo

rmcup=\E[?1049l\E[23;0;0t,
smcup=\E[?1049h\E[22;0;0t,
を消す

tic -o .terminfo screen.terminfo

・うまくいったか確認
いったんログアウトして入り直す
vi /etc/aliases
:q!
で抜けて画面がクリアされていなければ成功

chronyの設定

・chronyのインストール
dnf -y install chrony

・起動
systemctl start chronyd
systemctl enable chronyd

・確認
chronyc sources
として

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- y.ns.gin.ntt.net              2   9   377    60  +1333us[+1333us] +/-  106ms
^* 30-213-226-103-static.ch>     1   9   377   385  +4615us[+4775us] +/-   28ms
^- sh11.paina.net                2  10   377   195    +10ms[  +10ms] +/-   47ms
^+ ec2-3-114-30-212.ap-nort>     2  10   377   180  +1414us[+1414us] +/-   50ms

と表示されていればOKです。

chronyc sourcestats -v
とすると、さらに詳細な情報を確認できます。

210 Number of sources = 4
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
2403:71c0:2000::d:8b97      7   5   201     -4.454    110.385    +52ms  3114us
time.cloudflare.com         7   4   200     -3.915     60.887  +2808us  1660us

103.202.217.183             7   4   201     +7.317     25.868   +569us   782us
ipv4.ntp2.rbauman.com       6   4   136     -0.047      7.920  -3809ns   107us

ファイアウオールが効いてて動作しない場合は
firewall-cmd --zone=public --add-service=ntp
firewall-cmd --zone=public --add-service=ntp --permanent
としてNTPポートを開けてから、再度chronyc sourcesで確認してください。

開発環境のインストール

以前は自力で依存関係を解決してrpmコマンドでインストールしていたのですが、さすがに面倒すぎるのと、dnfというコマンドを使えば自動的に依存関係は解決してくれるみたいなので、今回からはdnfコマンドを使う事にします。

dnf -y group install "Development Tools"
dnf -y install wget
dnf -y install mlocate
updatedb
dnf -y install rpmdevtools
dnf -y install perl-CPAN
dnf -y install perl-TimeDate
dnf -y install perl-DBI
dnf -y install perl-Digest-HMAC
dnf -y install perl-libwww-perl
dnf -y install bzip2-devel
dnf -y install libXpm-devel
dnf -y install libvpx
dnf -y install libtiff-devel
dnf -y install apr
dnf -y install apr-devel
dnf -y install apr-util
dnf -y install apr-util-devel
dnf -y install pcre-devel
dnf -y install libpng-devel
dnf -y install freetype-devel
dnf -y install fontconfig-devel
dnf -y install gd-devel
dnf -y install perl-GD
dnf -y install readline-devel
dnf -y install libxslt
dnf -y install libcurl-devel
dnf -y install sqlite
dnf -y install sqlite-devel
dnf -y install ImageMagick
dnf -y install ImageMagick-perl
dnf -y install perl-File-Tail
dnf -y install perl-Jcode
dnf -y install krb5-devel
dnf -y install krb5-server
dnf -y install libxslt-devel

鬼車-develのインストール

PHPをコンパイルする時に必要になる鬼車-develは、どういうわけかdnfでインストールできないので、自力でインストールします。

・develじゃない方をインストールする
dnf -y install oniguruma

・自動的にインストールされた鬼車のバージョンを調べる
rpm -qa | grep oniguruma

oniguruma-6.9.6-1.el9.5.x86_64

ここで鬼車のバージョン番号をググって、同じバージョン番号のdevelパッケージを探す。みつかったらダウンロードURLをテキストファイルにコピペしておく。

・取得する
cd /home/mente
mkdir work
cd work
mkdir RPMS
cd RPMS
wget https://rpmfind.net/linux/centos-stream/9-stream/CRB/x86_64/os/Packages/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

・インストールする
rpm -ivh oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

・ちゃんとインストールされたか確認する
rpm -qa | grep oniguruma

oniguruma-6.9.6-1.el9.5.x86_64
oniguruma-devel-6.9.6-1.el9.5.x86_64

ちゃんとマイナーバージョンも同じものを入れてくださいね。それにしても、なんで鬼車-develだけdnfコマンドで入らないのか謎です。

CPANから直接インストール

以下はRPMパッケージがないので、CPANから直接ソースをダウンロードして、コンパイル&インストールします。

cd /home/mente/work
mkdir targz
cd targz

・File-ReadBackwards
wget https://cpan.metacpan.org/authors/id/U/UR/URI/File-ReadBackwards-1.02.tar.gz
tar xvzf File-ReadBackwards-1.02.tar.gz
cd File-ReadBackwards-1.02
perl Makefile.PL
make
make test
make install
cd ..

・GD-Barcode
wget https://cpan.metacpan.org/authors/id/K/KW/KWITKNR/GD-Barcode-1.15.tar.gz
tar xvzf GD-Barcode-1.15.tar.gz
cd GD-Barcode-1.15
perl Makefile.PL
make
make test
make install
cd ..

このままでは「QRコードのバージョンを指定しなかった場合には自動判別になる」という機能が働かず、QRコードのバージョンを指定しなかった場合に1になってしまうというバグがあるので、以下のように修正します。
chmod 755 /usr/local/share/perl5/5.32/GD/Barcode QRcode.pm
vi /usr/local/share/perl5/5.32/GD/Barcode/QRcode.pm

40行目
$oSelf->{Version} = $rhPrm->{Version} || 1;
       ↓
$oSelf->{Version} = $rhPrm->{Version};

・Net::OAuth
cd /home/mente/work/targz
wget https://cpan.metacpan.org/authors/id/K/KG/KGRENNAN/Net-OAuth-0.28.tar.gz
tar xvzf Net-OAuth-0.28.tar.gz
cd Net-OAuth-0.28
perl Makefile.PL
make
make test
#make: *** [test] エラー 255が出るけど無視無視
make install
cd ..

・Net::Twitter::Lite
wget https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Net-Twitter-Lite-0.12008.tar.gz
tar xvzf Net-Twitter-Lite-0.12008.tar.gz
cd Net-Twitter-Lite-0.12008
#このモジュールにはMakefile.PLというものがないので、直接コピーコマンドでインストールします。
mkdir /usr/lib64/perl5/Net
cp -pr lib/Net/Twitter /usr/lib64/perl5/Net/
#※注意
#ここではコピー先は/usr/lib64/perl5にしましたが、
#Perl本体のインストールのし方、Perlのバージョンによっても異なりますので、
#それぞれの環境に合わせて読み替えてください。
cd ..

openldapのインストール

openldapをrpmからインストールすると/usr/lib64にインストールされますが、なぜかPHP7.4のconfigureスクリプトが/usr/lib64から探してくれないので、ソースをコンパイルして/usr/local/libにインストールします。

さらにconfigure時に環境変数LD_LIBRARY_PATHを指定しておかないと、/usr/lib64に入っているDB4を先に見に行って
configure: error: Berkeley DB version mismatch
というエラーが出てしまいます。

▽ここを参考にしました。ありがとうございました。
http://lightmaterial.blogspot.com/2008/04/openldapconfigureberkeley-db-version.html

まずLD_LIBRARY_PATHのパスを指定するようにします。
vi /etc/profile.d/uselocallib.sh

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"/usr/local/lib"

一度抜けて入り直します。
echo $LD_LIBRARY_PATH
で/usr/local/libが含まれていれば成功です。

うまくいったらソースをコンパイル、インストールします。
cd /home/mente/work/targz
wget https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.50.tgz
tar xvzf openldap-2.4.50.tgz
cd openldap-2.4.50
./configure --prefix=/usr/local
make depend
make
make install

apacheのインストール

dnfコマンドで入れてしまえば一発なのですが、apache、PostgreSQL、PHPに関してはコンパイルオプションに独自のものを使いたいのと、脆弱性が発見される毎に頻繁にバージョンアップさせたいので、ソースからコンパイルしてインストールします。特にapacheに関してはDVDに標準で入っているバージョンは攻撃を受けやすいため、できる限り避けます。

cd /home/mente/work/targz
wget https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
tar xvzf httpd-2.4.57.tar.gz
cd httpd-2.4.57
./configure \
--enable-modules=all \
--enable-so \
--enable-ssl \
--enable-rewrite \
--with-expat=builtin \
--with-apr=/usr \
-with-pcre=/usr
make
make install

・SSLキー作成
cd /usr/local/apache2/conf
mkdir sslkey
cd sslkey
openssl md5 /var/log/messages > rand.dat
openssl genrsa -rand rand.dat -des3 2048 > key.pem
(パスフレーズは123456)
cp key.pem key_in_pass.pem
openssl rsa -in key.pem -out key.pem
(パスフレーズは123456)

注意:CentOS8まではSSLのキーは1024バイトで良かったのですが、REL9からは2048バイト以上でないと「key is too small」と言われてapacheが起動しません。

▽こここを参考にしました。ありがとうございました。
https://aoiakari.com/2020/03/12/%E6%B0%97%E8%BB%BD%E3%81%AA%E6%B0%97%E6%8C%81%E3%81%A1%E3%81%A7ssl%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%82%8F%E3%81%8B%E3%82%89%E3%81%95%E3%82%8C%E3%81%9F%E8%A9%B1/

・CSRの作成
openssl req -new -days 365 -key key.pem -out csr.pem
自己証明の時は、質問事項は全部Enterキーで飛ばしてください。商用サーバーの時は、真面目にちゃんと質問された項目を正確に入力してください。バックスペースキーが効かないので慎重に。

・自己証明書の作成
openssl x509 -in csr.pem -out jiko_cert.pem -req -signkey key.pem -days 365
ただ、今どき(2020年6月現在)のブラウザで自己証明書なんか使ってたら、まず警告が出てアクセスできません。

商用サーバーの場合、CSRの質問事項に対して真面目に入力して、ベリサイン等の公的な証明機関に送って正しい証明書を発行してもらう必要があります。当然ですが、その際にはCSRで入力した会社名が実在するかどうかの審査があります。ベリサインの場合、登記簿謄本の提出を求められます。

・ログディレクトリ作成と、ローテーションの設定
useradd apache
mkdir /var/log/apache
chown apache.apache /var/log/apache
vi /etc/logrotate.d/apache

/var/log/apache/*log {
        create 0644 apache apache
        missingok
        sharedscripts
        postrotate
                /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
        endscript
}

終わったらエラーにならない事を確認します。ここでエラーがあるようだと、ログのローテーションが行われずにログが2Gを越えてapacheが止まったりしますので、注意が必要です。
logrotate -d /etc/logrotate.conf

・自動起動スクリプトの作成
▽ここを参考にしました。ありがとうございました。
http://d.hatena.ne.jp/rougeref/20170815

vi /usr/lib/systemd/system/apache.service

[Unit]
Description=The Apache HTTP Server (/usr/local/apache2)
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl restart
ExecStop=/usr/local/apache2/bin/apachectl stop
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

・起動
systemctl start apache.service
systemctl enable apache.service

・チューニング
vi /usr/local/apache2/conf/httpd.conf

User apache
Group apache
ServerAdmin 管理者のメールアドレス
ServerName ホスト名

<IfModule dir_module>
     DirectoryIndex index.html index.php index.cgi
</IfModule>

AddType application/x-httpd-php .php .html

ErrorLog "/var/log/apache/error.log"
CustomLog "/var/log/apache/access.log" combined
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

▽以下はコメントアウトを解除
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-vhosts.conf

・CGIが動かない場合
従来のapacheではmod_cgid.soなしでも標準でCGIが稼働したのですが、現バージョンではmod_cgid.soがないとCGIが動作せずにソースが表示されてしまうようです。

▽ここを参考にしました。ありがとうございました。
http://blog.netandfield.com/shar/2012/08/mod-cgid.html

vi /usr/local/apache2/conf/httpd.conf

▽以下コメントアウトを外します。
LoadModule cgid_module modules/mod_cgid.so

▽以下Scriptsock cgisockのコメントアウトを外します。
<IfModule cgid_module>
    #
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    #
    Scriptsock cgisock
</IfModule>

    ▽以下はコメントアウトします。
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

▽ここを参考にしました。ありがとうございました。
http://www1.txt-nifty.com/blog/2012/12/apache-242cgi-d.html
http://d.hatena.ne.jp/rougeref/20120521
http://kotsukotsublog.blogspot.com/2013/03/apachecgidunable-to-connect-to-cgi.html

・SSLを動かす
vi /usr/local/apache2/conf/extra/httpd-ssl.conf

SSLCertificateFile /usr/local/apache2/conf/sslkey/jiko_cert.pem
SSLCertificateKeyFile /usr/local/apache2/conf/sslkey/key.pem
ServerAdmin 管理者のメールアドレス
ServerName ホスト名
ErrorLog "/var/log/apache/ssl-error.log"
TransferLog "/var/log/apache/ssl-access.log"
CustomLog "/var/log/apache/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

もっとも、自己証明書なのでSSLが動いたところでブラウザが拒否するでしょうけど・・・。

・バーチャルホストを有効にする
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

最初から書いてあるバーチャルホストの設定は全てコメントアウト。
最後の行に
Include virtconf.d/*.conf

cd /usr/local/apache2
mkdir virtconf.d
cd virtconf.d
vi バーチャルホスト名.conf

<VirtualHost *:80>
  ServerName バーチャルホスト名
  DocumentRoot /usr/local/apache2/htdocs
  CustomLog /var/log/apache/access.log combined
  ErrorLog /var/log/apache/error.log
</VirtualHost>

たまに、ここから丸コピペして本当に「バーチャルホスト名.conf」というファイルを作って、「動かねえぞゴルァ」って言ってくる人がいますが、バーチャルホスト名.confの部分は「software.aufheben.info.conf」みたいに、お使いのバーチャルホスト名を入れてくださいね。

・パスを通す
vi /etc/profile.d/apache.sh

PATH="$PATH":/usr/local/apache2/bin

ただし、/etc/profile.dに記述したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入り直します

入り直した後、apachectlというコマンドがパスなしで直接使えれば成功です。

・セキュリティポリシーが本当にレガシーになったか確認する
update-crypto-policies --show

・文法チェック
/usr/local/apache2/bin/apachectl configtest

・再起動
systemctl restart apache

この時、もし
Warning: The unit file, source configuration file or drop-ins of apache.service changed on disk. Run 'systemctl daemon-reload' to reload units.
と表示された時は、apache.serviceファイルの読み込みに失敗しているので、
systemctl daemon-reload
とやって、もう1回
systemctl restart apache
とやってみてください。

・ちゃんと動いてるかどうか確認
ps ax | grep httpd

7762 ? Ss 0:00 /usr/local/apache2/bin/httpd -k start
7763 ?        S      0:00 /usr/local/apache2/bin/httpd -k start
7764 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start
7765 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start
7766 ?        Sl     0:00 /usr/local/apache2/bin/httpd -k start

・CGIソケットが動作しているかどうか確認
ls /usr/local/apache2/logs/
cgisock.4300
ここで4300は実際にはプロセスIDが入ります。

PostgreSQLのインストール

cd /home/mente/work/targz
wget https://ftp.postgresql.org/pub/source/v15.3/postgresql-15.3.tar.gz
tar xvzf postgresql-15.3.tar.gz
cd postgresql-15.3
./configure
make
make install

・データーベース初期化
useradd postgres
chmod 777 /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb --encoding=UTF8 --no-locale -D /usr/local/pgsql/data
exit
chmod 755 /usr/local/pgsql

・ログのローテーションの設定
mkdir /var/log/pgsql
chown postgres.postgres /var/log/pgsql
vi /etc/logrotate.d/postgres

/var/log/pgsql/*log {
    create 0644 postgres postgres
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `head -1 /usr/local/pgsql/data/postmaster.pid  2> /dev/null` 2> /dev/null || true
    endscript
}

エラーが出ない事を確認
logrotate -d /etc/logrotate.conf

・自動起動スクリプトの作成
▽ここを参考にしました。ありがとうございました。
http://d.hatena.ne.jp/rougeref/20170815

vi /usr/lib/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL Database Server (/usr/local/pgsql/)

[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /var/log/pgsql/postgres.log start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -m fast stop
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -m fast restart
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/rc.d/init.dに書いていた時代とは異なり、ExecStart=の後にsuコマンドを入れるとエラーになってしまうので、実行するユーザーは
User=postgres
として指定します。これによって、systemdがユーザーを切り替えてから実行してくれます。

▽ここを参考にしました。ありがとうございました。
http://engineer-milione.com/tips/centos7postgres.html

・起動
systemctl start postgresql.service

・動作確認
ps ax | grep postgres
もしpostgresが常駐してないようなら、ログを見て問題を修正します。
cat /var/log/pgsql/postgres.log

・サーバー起動時に自動起動
systemctl enable postgresql.service

・パスを通す
PostgreSQL関係のコマンド(psqlやpg_dumpやvacuumdbなど)をフルパスで入力しなくても良いように、パスを通しておきます。
vi /etc/profile.d/postgresql.sh

export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
export PGHOST=127.0.0.1
PATH="$PATH":/usr/local/pgsql/bin

ただし、/etc/profile.dに記載したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入りなおします。入りなおしたら、
psql -U postgres -l
としてパスが通っている事を確認します。

・PostgreSQL8からの互換性のない変更
PostgreSQL9以降からは、psql、pg_dump、vacuumdbコマンドにホストの指定(-h ホスト)が必須となっています。ホストを指定しないと、 「TCP/IP connections on port 5432?」というエラーになってしまいます。

しかし、これではいささか面倒なので、/etc/profile.d/postgresql.shに
export PGHOST=127.0.0.1
を追加しています。

ただし、/etc/profile.d/postgresql.shはtelnetやsshでログインした時に自動的に実行されるスクリプトであって、crontab内では使うことができません。もしcrontabでpg_dumpやvacuumdbをする場合は、pg_dumpやvacuumdbコマンドに -h 127.0.0.1を入れましょう。

.soファイルの場所をシステムに記憶させます。そうしないと、DBD::Pg等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/postgres.conf

/usr/local/pgsql/lib

ldconfig

・DBD::Pgのインストール
DBD::Pgは今ソースからコンパイルしてインストールしたバージョンのPostgreSQLとリンクしなければならないので、DBD::Pgもまたソースからコンパイルして入れます。

cd /home/mente/work/targz
wget https://www.cpan.org/modules/by-module/DBD/DBD-Pg-3.9.1.tar.gz
tar xvzf DBD-Pg-3.9.1.tar.gz
cd DBD-Pg-3.9.1
perl Makefile.PL
make
export DBI_DSN='dbi:Pg:dbname=template1;port=5432;host=127.0.0.1'
export DBI_USER=postgres
make test
make install

DB4のソースのコンパイル&インストール

DB4をdnfコマンドやrpmからインストールすると、PHPのconfigureスクリプトに「DB4のバージョンが違う」といってエラーにされてしまうので、仕方なくバージョン4.8.30をソースからコンパイルして/usr/localにインストールします。

cd /home/mente/work/targz
wget https://src.fedoraproject.org/lookaside/extras/db4/db-4.8.30.tar.gz/f80022099c5742cd179343556179aa8c/db-4.8.30.tar.gz
tar xvzf db-4.8.30.tar.gz
cd db-4.8.30
cd build_unix
../dist/configure --prefix=/usr/local
make
make install

PHP8.2.8 のコンパイル&インストール

cd /home/mente/work/targz/
wget https://www.php.net/distributions/php-8.2.8.tar.gz
tar xvzf php-8.2.8.tar.gz
cd php-8.2.8
vi mkphpconf

./configure                                      \
--disable-debug                                  \
--enable-bcmath                                  \
--enable-calendar                                \
--enable-ctype                                   \
--enable-exif                                    \
--enable-ftp                                     \
--enable-gd                                      \
--enable-mbstring                                \
--enable-shared                                  \
--enable-shmop                                   \
--enable-soap                                    \
--enable-sockets                                 \
--enable-static                                  \
--enable-sysvmsg                                 \
--enable-sysvsem                                 \
--enable-sysvshm                                 \
--with-apxs2=/usr/local/apache2/bin/apxs         \
--with-bz2                                       \
--with-config-file-path=/etc                     \
--with-curl                                      \
--with-db4=shared,/usr/local                     \
--with-expat                                     \
--with-freetype                                  \
--with-gettext                                   \
--with-jpeg                                      \
--with-kerberos                                  \
--with-layout=GNU                                \
--with-ldap=shared,/usr/local                    \
--with-openssl                                   \
--with-pear=/usr/share/php                       \
--with-pgsql=/usr/local/pgsql                    \
--with-xsl                                       \
--with-zlib                                      \
--with-zlib-dir=/usr

configureオプションが前回のPHP7.4の時と一部変更になっていますので、それに合わせて変更しています。(例:--with-iconv-dir, --with-xmlrpcはなくなったので除外)
chmod 755 mkphpconf
./mkphpconf
ここでエラーが出ない事を確認します。特にPHPのconfigureは、すぐにアレがないコレがないとか言ってエラーばっかり吐くので注意が必要です。アレがないコレがないっていってエラーになった場合は、仕方なくdnfコマンドでないと言われたパッケージをインストールしてください。

エラーがなければコンパイルします。
make

コンパイルが通ったら
make test
make install
cp php.ini-development /etc/php.ini

・「libiconv_closeという関数はない」というエラーが出た場合
PHP7.2まではlibiconvを/usr/lib64から探してくれず、泣く泣くソースからコンパイルして/usr/local以下に入れていたのですが、PHP7.4からは/usr/lib64から探してくれるようになったばかりか、/usr/local/にソースからコンパイルしたlibiconvが入っているとかえってエラーになってしまうので、/usr/local/include/iconv.hを別の名前(なんでも良い)にリネームします。

・DB4のバージョンが合わないというエラーが出た場合
DB4は、パッケージからインストールすると、/usr/lib64から探してバージョンが合わないといってエラーになってしまうので、DB4をソースからコンパイルして/usr/local以下にインストールします。

・「onigurumaがない」というエラーが出た場合
鬼車のdevelパッケージは、どういうわけかdnfコマンドでインストールできないので、develじゃない方のパッケージのバージョンを調べて、同じバージョンのdevelパッケージをgoogle検索して見つけてきて、rpmコマンドでインストールしておいてください。onigurumaの場合はDB4とは逆に/usr/local/libからは探してくれないので、ソースからコンパイルせずにRPMを/usr/lib64に入れないとダメみたいです。

・/usr/lib/rpm/redhat/redhat-hardened-ldがないと出た場合
rpm-buildパッケージが入ってません。dnfコマンドでインストールしてください。

なお、PHP7.4以降ではGD2ライブラリを/usr/lib64からも探してくれるので、PHP7.2の時のようなわざわざGD2をソースからコンパイルして/usr/local/libに入れておく必要はなくなりました。

それにしても、PHPのconfigureスクリプトは、ものによってソースからコンパイル・インストールした時に入る/usr/local/libからしか探してくれなかったり、 RPMからインストールした時に入る/usr/lib64からしか探してくれなかったりするので毎回泣かされます。 PHPのconfigureスクリプトはイマイチ完成度が低い気がします。全てのオプションで「--with-なんとか=/usrとか/usr/local」みたいにライブラリを探す場所を指定できるようにするべきでしょう。

・チューニング
vi /etc/php.ini

error_log = /var/log/apache/php-error.log
file_uploads = On
short_open_tag = On
session.auto_start = 1
session.gc_maxlifetime = 3600
session.use_trans_sid = 1
session.cache_limiter = private, must-revalidate
upload_max_filesize = 100M
post_max_size = 200M
date.timezone = Asia/Tokyo
mbstring.http_output = UTF8
mbstring.internal_encoding = UTF8
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
default_charset = ""

・default_charset=""
デフォルトではdefault_charset = "UTF8"と記述されていますが、これがあるとブラウザに対してcontent-type: text/html; charset=utf-8を出力してしまい、utf8以外で書かれたページは全て文字化けを起こしてしまいます。

当サイトでは、ほとんどのページがシフトJISなため、default_charset = ""としてブラウザに文字コードヘッダーを出力させないようにします。

▽ここを参考にしました。ありがとうございました。
http://scribble.washo3.com/linux/web-garbled-characters-apacheweb-garbled-character-apache.html

・short_open_tag
「PHP5.4からこの項目は削除された」と他のサイトに書いてあったので、それを鵜呑みにしてこのサイトでもこれまでずっと「PHP5.4から削除されました」と書いていたのですが(人のせいにするな?)、どうやらガセネタだったようです。

しかしデフォルトがOffになっているので、Onと書き換えます。つか、自分のサーバー上のPHPはもう全部<?で開始してるので、いまさらオフにはできません。

・register_globals
これは本当になくなったようです。register_globals=On前提で作ってあるスクリプトは全部修正しなければなりません。

・apacheを再起動
apachectl stop
apachectl start

PHPが入ってない時に新規に入れる場合、restartではなく、いったんstopしてstartしないとうまく動作しないようです。

この後、ネットワーク内のWindowsパソコンから、
http://192.168.0.40/
https://192.168.0.40/
でアクセスできるかどうか確認します。ただし、自己証明なのでhttpsは警告が出て表示されないと思います。
注意:
192.168.0.40はあくまで例です。お使いのIPアドレスに合わせて読み替えてください。

PHPを入れる前にapacheにアクセスしてしまうと、ブラウザがヘッダー
AddType application/x-httpd-php .php .html
を解釈できず、ブラウザで開かずにダウンロードになってしまうのと、ブラウザがヘッダーを解釈できなかった事を覚えてしまうので、その場合はいったんブラウザのキャッシュをクリアしてから再度アクセスしてください。

BINDのインストール

これまでは、NATの外側向けの設定と、NATの内側向けの設定を両方入れていたのですが、お名前.comのネームサーバーをそのまま使う場合は無料で使えるので、なにもNATの外側向けの設定まではする必要がないため、 今回はNATの外側向けにはネームサーバーを提供しないので、NATの内側で使う設定だけにします。

・BINDのインストール
今まではrpmコマンドで自力でrpm -ivh /media/cd-rom/RedHat/bind-9.2.0-8.i386.rpmなどとやっていたのですが、そのためにいちいちDVDをセットしたり、依存性を解決したりするのも面倒なので、今回からはdnfコマンドに頼る事にします。
dnf -y install bind

・サービス開始
systemctl start named.service
systemctl enable named.service

・LANの内側には開放
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.0.0/24 service name=dns accept"

・うまくいったか確認
firewall-cmd --list-all --zone=public --permanent

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources: 
  services: dns ftp http https ntp pop3 smtp ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" source address="192.168.0.0/24" service name="telnet" accept
        rule family="ipv4" source address="192.168.0.0/24" service name="dns" accept

■named.confの設定
vi /etc/named.conf

zone "aufheben.net" IN {
        type master;
        file "data/named.aufheben.net";
};

注意:これはあくまで例です本当にaufheben.netって書かないでくださいね。

・文法チェック
named-checkconf /etc/named.conf

・ゾーンファイルの設定
vi /var/named/data/named.aufheben.net

$TTL 86400
@ IN SOA www.aufheben.net. root.aufheben.net. (
                        2004081601 ; Serial
                        28800      ; Refresh
                        14400      ; Retry
                        3600000    ; Expire
                        86400 )    ; Negative TTL

                        IN NS   ns
                        IN MX   10 mail
                        IN A    192.168.0.4
ns                      IN A    219.166.53.194
mail                    IN A    219.166.53.194
www                     IN A    219.166.53.194
www2                    IN A    192.168.0.4
tomcat                  IN A    192.168.0.4

注意:これはあくまで例です本当にaufheben.netのネームサーバーを設定しないでくださいね。

wwwはNATの外側、www2、tomcatはNATの内側にあるため、www2、tomcatはNATの内側のアドレスになっています。この場合、www2、tomcatはローカルIPなので、NATの外側向けには提供できません。

・文法チェック
named-checkzone "aufheben.net" /var/named/data/named.aufheben.net

・設定を反映させる
systemctl restart named.service

・自分が参照するDNSを、自分(127.0.0.1)にする。
nmcli con mod eno1 ipv4.dns "127.0.0.1"

・うまくいったか確認
nmcli connection show eno1 | grep dns

ipv4.dns: 127.0.0.1

・設定を反映させる
nmcli con reload
nmcli con down eno1 && nmcli con up eno1
ただし、この場合一瞬でもLANをダウンさせるため、設定や入力をミスっていると最悪データセンターまで行かないといけなくなるので、サーバーが手元にあるうちに設定しておきましょうね。

このページの先頭へ
  広告