サーバー再構築覚書(008)ーNFS(ネットファイルシステム)の構築

設定ファイルなど、クラッシュ時に必要不可欠のファイルを外付けHDにコピーし、復旧をスムーズにするため、各サーバーの日々のバックアップが必要です。そのファイル操作を簡便にするため、NFS を構築しました。
・外付けHDは、十分な容量を確保するとともに、MS-Windows や、MacOS のファイルシステムではなく、Linux の ext4 でフォーマットしておきます。

・以下、「サーバーワールド」からの図解を改変。

+----------------------+               |               +----------------------+
| [    NFS Server    ] |XXX.XXX.XXX.210|YYY.YYY.YYY.212| [    NFS Client    ] |
|   nishinari.or.jp    +---------------+---------------+   yyy.nishinari.or.jp|
|                      |                               |                      |
+----------------------+                               +----------------------+

・NFS サーバーの設定

# apt -y install nfs-kernel-server

# jed /etc/idmapd.conf
# 6行目:コメント解除して自ドメイン名に変更
Domain = nishinari.or.jp

外付けHDは、USB接続すると、Ubuntu側で、自動認識し、/media/zzzz/1….. にマウントします。

# jed /etc/exports
# 最終行にマウント設定を記述
# 例として [/media/zzzz/1..... ] を NFS 共有に設定
/media/zzzz/1..... xxx.xxx.xxx.208/28(rw,no_root_squash)


# systemctl restart nfs-server

・NFS クライエントの設定

# apt -y install nfs-common


vi /etc/idmapd.conf
# 6行目:コメント解除しドメイン名変更
Domain = nishinari.or.jp

マウントするには、

mount -t nfs nishinari.or.jp:/media/zzzz/1..... /mnt

起動時から、自動的にマウントするには

# jed /etc/fstab
# 最終行に追記:マウントするホームディレクトリをNFSサーバーのものに変更
nishinari.or.jp:/media/zzzz/1..... /mnt nfs defaults 0 0

確認するには

# df -hT
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 1.6G 1.7M 1.6G 1% /run
/dev/sda3 ext4 xxxG 20G xxxG xx% /
...
nishinari.or.jp:/media/zzzz/1..... nfs4 x.xT XXG x.xT xx% /mnt

実際には、/mnt/nfs にNFS(「共有フォルダー」が準備されています。

# ls -l /mnt/nfs/
合計 20
...
drwxr-xr-x 6 root root 4096 11月 28 14:05 takeru
...
drwxr-xr-x 3 root root 4096 12月 27 23:24 zephyr

サーバー再構築覚書(007)ーちょっと寄り道

たまたま、余っていた、ノートパソコン(Toshiba 製 CPU i3 Memory 8G)に、lubuntu 21.10 をインストールしました。インストール自体は、特別に難しいところはなく、順調でした。それ以前の問題として、PC自体の電源コードもなく、別のノートPCの電源では、機械はなんとか立ち上がるのですが、電池への充電がうまくいかず、コード付きで使うほかないと諦めていましたが、専用の電源コード(2000円弱)をゲット、つないでみると時間はかかりましたが、なんとか充電でき、電池も2年間の眠りから覚めました 笑)以下の図は、lubuntu のインストール経過です。インストールの実際は省略しますが、VirtualBoxで再現しています。比較的軽いディストリビューションなので、これくらいのスペックでさくさく動いています。

(補足1)日本語入力について
$ sudo apt-get update
$ sudo apt-get install fcitx-mozc

で、半角/全角、カタカナ/ひらがな キーで入力可能
(補足2)Firefox、Thunderbird、LibreOffice などのメニューは日本語されないが、実用の範囲内。
(補足3)有線、無線LANともに可能なので、有線は、グローバルネットワーク(xxx.xxx.xxx.217)につなぐ。これで、複数のサーバー機のバックアップのバックアップくらいの役目は果たせそう…
・IP アドレスを、xxx.xxx.xxx.217 に固定する方法
# jed /etc/netplan/01-network-manager-all.yaml

network:
ethernets:
# ネットワークカードのDevice 名
YYYY0:
dhcp4: no
addresses: [xxx.xxx.xxx.217/28]
gateway4: xxx.xxx.xxx.209
nameservers:
addresses: [xxx.xxx.xxx.210,8.8.8.8]
dhcp6: no

設定を反映させる
# netplan apply
ネット接続を確認
....
2: YYYY0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
....
inet xxx.xxx.xxx.217/28 brd xxx.xxx.xxx.223 scope global noprefixroute YYYY0
....

サーバー再構築覚書(006)ーインフラ整備(03)

◎DNS 設定
ネット環境ーインフラ整備の大きな「肝」となるのが、DNS(Domain Name Server)である。まず、ネームサーバーのプログラム(デーモン)とユーティリティをインストールする。主に外に向けたサーバーであるので、公開IP番号⇔ドメイン名の「名前解決」を図る。ドメイン名は、nishinari.or.jp とnishinari.coop の二つ、それぞれ別のコンピュータに割り付ける。また、nishinari.or.jp はメールサーバーも兼ねるので、「正引き」と「逆引き」の名前解決とする。(そうしないと、セキュリティーの面で、メールされないサーバーがある。下図参照)


# apt -y install bind9 bind9utils

ここからが設定である。

# jed /etc/bind/named.conf


include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.external-zones";


# jed /etc/bind/named.conf.options


options {
directory "/var/cache/bind";
dnssec-validation auto;
# IPV6 を利用しない場合は [any] を [none] に変更
listen-on-v6 { none; };
};

ここでは、nishinari.or.jp と nishinari.coop の2つのドメインを定義する。前者は、「逆引き」可能とし、まず、定義ファイルのファイル名を書く。

# jed named.conf.external-zones
# 自身のネットワークとドメイン名の定義を追記
zone "nishinari.or.jp" IN {
type master;
file "/etc/bind/nishinari.or.jp.zone";
allow-update { none; };
};
zone "nishinari.coop" IN {
type master;
file "/etc/bind/nishinari.coop.zone";
allow-update { none; };
};
zone "xxxh.xxx.xxx.210.in-addr.arpa" IN {
type master;
file "/etc/bind/xxxh.xxx.xxx.210.in-addr.arpa";
allow-update { none; };
};


nishinari.or.jp ドメインには、同一PCでの、違ったIP番号と、別PC(予備サーバー)での、IP番号を定義する。
# jed nishinari.or.jp.zone
@ IN SOA komachi.nishinari.or.jp. (
2021101001
10800
3600
604800
86400 )
;
IN NS xxx.nishinari.or.jp.
IN MX 10 mail.nishinari.or.jp.
;
; the role of servers (1)
;
mail.nishinari.or.jp. IN A xxx.xxx.xxx.210
;
; the female name of servers (1)
;
komachi.nishinari.or.jp. IN A xxx.xxx.xxx.210
ns.nishinari.or.jp. IN A xxx.xxx.xxx.210
nishinari.or.jp. IN A xxx.xxx.xxx.210
www.nishinari.or.jp. IN A xxx.xxx.xxx.211
blog.nishinari.or.jp. IN A xxx.xxx.xxx.211
jirou.nishinari.or.jp. IN A xxx.xxx.xxx.212
; miscellous name of servers
*.nishinari.or.jp. IN CNAME mail.nishinari.or.jp.

xxx.xxx.xxx.210~213 は、逆引きの定義も行う。

# jed xxxh.xxx.xxx.210.in-addr.arpa
@ IN SOA komachi.nishinari.or.jp. (
2021101004
10800
3600
604800
86400 )
;
IN NS komachi.nishinari.or.jp.
IN MX 10 mail.nishinari.or.jp.
;
;
;
210 IN PTR komachi.nishinari.or.jp.
211 IN PTR www.nishinari.or.jp.
212 IN PTR jirou.nishinari.or.jp.
213 IN PTR takeru.nishinari.coop.


# jed nishinari.coop.zone
@ IN SOA xxx.nishinari.coop. (
2021101001 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum
;
IN NS xxx.nishinari.or.jp.
;
www.nishinari.coop. IN A xxx.xxx.xxx.213
nishinari.coop. IN A xxx.xxx.101.213
matsubokkuri.nishinari.coop. IN CNAME nishinari.coop.

クライエントとして、Macbookからの名前解決(dig)は以下の通り。

oosato-no-MacBook-Air:~ mitsu$ dig mail.nishinari.or.jp


; <<>> DiG 9.10.6 <<>> mail.nishinari.or.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63333
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;mail.nishinari.or.jp. IN A

;; ANSWER SECTION:
mail.nishinari.or.jp. 21600 IN A xxx.xxx.xxx.210

;; Query time: 17 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 08 08:33:46 JST 2021
;; MSG SIZE rcvd: 65

サーバー再構築覚書(005)ーインフラ整備(02)

本日、サーバーPCを10mほど部屋を変えて移転させたが、その後のLANケーブルの整備と再設定に結構時間がかかった。あとで、LANケーブルの一つが未接続であることに気がついた。接続しやすいように、サーバー3台とも、後ろ面を正面においた(写真)。ついでにメモクリップとして(知恵の象徴としての)「ミネルヴァのふくろう」を置いた。
Die Eule der
Minerva beginnt erst mit der einbrechenden Dammerung ihren Flug. – Hegel
「ミネルバのふくろうは迫り来る黄昏に飛び立つ」(ヘーゲル)

◎DHCP サーバーの設定

サーバー再構築覚書(004)ーインフラ整備(01)

◎遠隔操作を可能にするため、SSH をインストール
サーバーワールドの設定

root@Voyager:~# apt -y install openssh-server

クライエント側では、Windows や Mac でも、Terminal 系統のアプリ(Wiindows では、Teraterm など、最近のWindows では、コマンドプロンプトから、ssh -l ユーザー名 サーバーのIP番号 でログイン可能)下図は、Teraterm のログイン画面。

◎同一LAN内での時刻設定
サーバーワールドに従い、

root@voyager:~# apt -y install ntp
root@voyager:~# jed /etc/ntp.conf

これで、LAN内のクライアントPCとの時刻同期が可能。

◎LAN とインターネットの接続(ファイアーウォール)
やや古典的な、iptables を使用

root@voyager:~# apt -y install iptables


# Generated by iptables-save v1.8.4 on Thu Sep 30 17:59:40 2021
*nat
#xxxxx - Variable

:PREROUTING ACCEPT [xxxxxx:xxxxxx]
:INPUT ACCEPT [xxxxxx:xxxxxx]
:OUTPUT ACCEPT [xxxxxx:xxxxxx]
:POSTROUTING ACCEPT [xxxxxx:xxxxxx]
#Very Important
#○○○1- LAN Card name
-A POSTROUTING -s 192.168.0.0/24 -o ○○○1 -j MASQUERADE
#End

COMMIT
# Completed on Thu Sep 30 17:59:40 2021
# Generated by iptables-save v1.8.4 on Thu Sep 30 17:59:40 2021
*filter
#xxxxx - Variable
:INPUT ACCEPT [xxxxxx:xxxxxx]
:FORWARD ACCEPT [xxxxxx:xxxxxx]
:OUTPUT ACCEPT [xxxxxx:xxxxxx]
# 悪質なパケットを排除ーおまじないのようなもの
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
# 以下のPort を許可
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j LOG --log-prefix "drop_packet:"
COMMIT
# Completed on Thu Sep 30 17:59:40 2021

これをスクリプトで書くと…

root@voyager:~# cat iptables.sh

#!/bin/sh

# 設定をクリア
iptables -F

# 基本方針[1]
# サーバーが受信するパケットを許可
iptables -P INPUT ACCEPT
# サーバーが経由させるパケットを許可
iptables -P FORWARD ACCEPT
#iptables -P FORWARD DROP
# サーバーが送信するパケットを許可
iptables -P OUTPUT ACCEPT

# サーバ攻撃対策関連
# データを持たないパケットの接続を破棄
iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP
# SYNflood攻撃と追われる接続を破棄
iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP
# ステルススキャンと思われる接続を破棄
iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
# HTTPS(SSL)を許可
iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
# FTPD
iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#SMTP
iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT
#SMTP(SSL)
iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT
#POP3
iptables -A INPUT -p tcp -m tcp –dport 110 -j ACCEPT
#POP3(SSL)
iptables -A INPUT -p tcp -m tcp –dport 995 -j ACCEPT
#IMAP
iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT
#IMAP(SSL)
iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT
#SMTPS
iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT
#SMTP-Submission
iptables -A INPUT -p tcp -m tcp –dport 587 -j ACCEPT
# PINGを許可
iptables -A INPUT -p icmp -j ACCEPT
# MASQUARADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ○○○1 -j MASQUERADE

# 要するに、ローカル⇔インターネットのやり取りをするには
#「NATとは Network Address Translationの略。 「ネットワークアドレス変換」ともいう。 LANに接続された端末からインターネットに接続する際に、「プライベートIPアドレス」を自動的に外部ネットワークで使用できる「グローバルIPアドレス」に変換する機能。」が必要ということ
# その他
# ローカルループバックの接続を許可
iptables -A INPUT -i lo -j ACCEPT
# 確率済みの通信を許可
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# ログを出力
iptables -A INPUT -j LOG –log-prefix “drop_packet:”

サーバー再構築覚書(003)ーその前提(03)

◎サーバーで以下のプログラムが稼働することを目標とする
・ネットワークでのインフラ部分
・メールサーバー(メーリングリスト整備も目標)
・Web サーバー(各種のブログを用意」)
各種手順
1)OS(Linux)のインストール - 済
以後のインストールおよび設定では、Server World の Ubuntu 20.04 LTS 版が、役に立った。
2)インフラ部分の設定
事前の準備では、ファイラー( fdclone )と、vi 系のエディターは使いづらいので emacs 系の jed が必須。)
Terminal で、

hoge@Voyager:~$ sudo apt -y install fdclone
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
fdclone
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 7 個。
544 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,201 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 fdclone amd64 3.01h-1build1 [544 kB]
544 kB を 2秒 で取得しました (346 kB/s)
以前に未選択のパッケージ fdclone を選択しています。
(データベースを読み込んでいます ... 現在 328516 個のファイルとディレクトリがインストールされています。)
.../fdclone_3.01h-1build1_amd64.deb を展開する準備をしています ...
fdclone (3.01h-1build1) を展開しています...
fdclone (3.01h-1build1) を設定しています ...
doc-base (0.10.9) のトリガを処理しています ...
doc-base ファイルを 2 個追加 を処理中...
man-db (2.9.1-1) のトリガを処理しています ...

root@mitsu-Voyager-2004:~# apt -y install jed
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
jed-common libonig5 libslang2-modules slsh
提案パッケージ:
gpm
以下のパッケージが新たにインストールされます:
jed jed-common libonig5 libslang2-modules slsh
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 0 個。
846 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,193 kB のディスク容量が消費されます。



以下はインフラ部分の整備で、次回にでも…
1. 時刻設定
2. ファイアーウォール設定
3. ネームサーバーの設定

サーバー再構築覚書(002)ーその前提(02)

・目標
1)以前のサーバーでの各種プログラム(デーモン)の水準に戻す、ないしその水準を超えるようにする
2)基本的には、すべてフリーなOS(Linux)とプログラムを使う
3)システムダウンなど緊急時の、バックアップを多重に用意する
4)「手作り感」満載のコンテンツを心がける

試行錯誤の結果、3台のサーバーを用意(CPU:i5 ないし i7 Memory 16G、HDD:256G~480G、外付けHDD:500G~4T)し、Ubuntu 20.04 LTS、Voyager Ubuntu 21.10 をインストールしました。下図は、簡略した概念図(その1)です。

 

 

サーバー再構築覚書(001)ーその前提(01)

2021年8月、10年来使用していた、職場のサーバー(Vinelinux  6.0 がベース)がとうとう動かなくなりました。以前から、OS を入れ替えなければと思っていた矢先でした。設定ファイルの幾分かは、バックアップしていましたが、職場のホームページなどは、ほとんど吹っ飛んでしまいました。これを機会に、より堅牢なハードとソフトに切り替えてサーバー再構築をめざし、2ヶ月半かけて、ようやく以前の水準に近い(サーバーの種類によっては、それを超えるところまで)回復できましたので、その覚書を書いておきます。
サーバーの構成は2回目以降に後述するにして、何度かのテストを重ねる上で、Windows ないし MacOS の PCでの実験を試すため、Virtual Box が非常に役立ちました。(ちょっとしたコツが必要で、最初は、Virtual Box のディスプレイの設定で、VMSVGA ではなく、解像度の高いVBoxVGAにしないと、インストール画面が切れてしまいます。あとで、OS を立ち上げるときに、もとに戻し、CDROM ドライブに、VboxGuestAddition の疑似CDを挿入し、画面を調節します。ここらあたりは、Guest Additionsのインストール あたりを参照のこと)図は、ディスプレイを設定しているところです。また、続きも図は、Ubuntu 20.04 LTS 版を、Virtual Box にインストールしている途中のスクリーンショットです。



ただし、VirtualBox でうまくいくことが、実際のサーバーで通用するとは限らない、また逆も真であることを痛感しました。
ところで VirtualBox では、いろいろなディストリビューションの Linux が楽しめます。Ubuntu ベースでのお気に入りは、フランス発の、Voyager 、Mac 風のアイコン配列と粋な壁紙が選べるのが素敵です。下図は、そのスクリーンショットです。

次回は、実際のサーバー構成の概要について書く予定です。