サーバー再構築覚書(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 風のアイコン配列と粋な壁紙が選べるのが素敵です。下図は、そのスクリーンショットです。

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