skucky.com


HOME


Ubuntuで自宅サーバー構築メモ

  1. はじめに
  2. Ubuntuのインストール
  3. ネットワークの設定
  4. DNSの設定
  5. メールサーバーの設定
  6. WEBサーバーの設定

はじめに

はじめにお断りしておきますが、自宅サーバー構築メモと題を掲げているものの、正確にはサーバー復旧メモ(自分用備忘録)と言った方が良く、人様がご覧になって参考にできるような物ではないということを申し上げておきます。 しかも、サーバー構築が終わってから記憶をたどりながら執筆しているため、その参考にならなさ加減に拍車をかけいることでしょう。

当ページは、長年無音サーバーを運用してきましたが、どうも動作が不安定(Segmentaion faultの多発とか)で毎日電源ブッチで強制再起動するような運用が日々繰り返され、「サーバーの意味ないじゃん!」と言うこともあり、また、時を同じくしてカミさんの嫁入り道具の一つであるデスクトップ一体型VAIOちゃんのHDDがお釈迦になってただの箱と化し、リソースの有効活用も兼ね(VAIOちゃんのHDDだけ交換したら普通に使えました)、VAIOちゃんに自宅サーバーとして第二の人生を歩んでもらおうとサーバーを再構築するに至ったというのが事の経緯です。

どうせ再構築するならDebianやめて(Segmentaion fault多発の原因がDebianの問題なのか、長年使い古してきたハードとの相性の問題なのかよくわからないと言う事もあり)、最近流行りの?Ubuntuにしてみようかと思い立ち、Ubuntuサーバーをインストールし、サーバーを構築するまでの備忘録としてまとめたのがこのページです。結果的には非常に安定して動作しています!財布の紐を握っているカミさんを説得させ高いお金を出してサーバーを新調するのは至難の業であり、説得させるまで長い年月を要し、そのうち自分の年金で買ってくれと言われかねない事態も想定されたため、リソースを有効活用して再構築して正解でした(しかも、交換したHDDは普段クライアントとして使用している自作PCのバックアップ用ディスクを流用。つまり実質0円でサーバーを更改しました)。


Ubuntuのインストール

i.まずはUbuntuを入手

UbuntuのHPから「Ubuntuのダウンロード」のリンクをたどり、用途別に必要なISOイメージをダウンロードします。自分はサーバー用途で利用したいのでUbuntu Serverをチョイスしました。

ii.USBインストーラ作成

ISOイメージをダウンロード後、USBメモリでインストーラを作成します。昔はインストーラといえばCDでしたが、最近はUSBメモリに書き込みできるらしいです。この辺の情報もWEB上でいくらでも探すことができるので、詳細はそちらを参照いただくとして、自分の場合はWin32 Disk Imagerと言うソフトでUSBメモリを作成しました。

iii.インストール

インストーラの指示に従ってインストールすればOK。特につまづいた点は無し(記憶にないと言った方が正しいかも・・)。サーバー用途というだけあってKDEやらGNOMEやら余計なデスクトップ環境の莫大な量のソフトが最初からインストールされないのは素晴らしい。個人的に思うのはサーバーを保守するうえで余計なソフトがインストールされているとそれだけで日々のアップデートが大変だし、セキュリティホールも増えるってもんです。この辺の心意気なかなか良いではないか、やるな!Ubuntu。ただし、ダウンロードしたUbuntu Serverは日本語対応していないので、こちらのサイトを参考に日本語化パッチを当てます。

▲TOP


ネットワークの設定

i.サーバーのIPアドレス割り当て

インストール時はNICが自動認識され、ネットワーク関連の設定ができないまま勝手にインストールが進む関係で、そのままインストールが終了し、システムを立ち上げるとデフォルトでDHCPが有効になっている。サーバーとして利用するならば静的アドレスとしてIPアドレスを割り当てる必要があるということで、設定するファイルは/etc/netplan/00-installer-config.yamlである。参考にさせていただいたサイトはこちらです。

留意したところとしては、ネームサーバーとしても自宅サーバーを利用したかったので、そのアドレスにNICに割り当てたIPアドレスを指定した点くらいでしょうか。

設定1. /etc/netplan/00-installer-config.yaml
network:
    ethernets:
        enp4s0:
            dhcp4: no
            addresses:
                        - 192.168.1.201/24
            gateway4: 192.168.1.1
            nameservers:
                        addresses:
                                    - 192.168.1.201            
            dhcp6: true
        version: 2

設定が終わったら、以下のコマンドで設定を反映しておく。因みに、コマンドの補完はbashなら当たり前だが、パラメータ(ここで言う"apply")まで補完できるのはありがたい。

コマンド1. 設定の反映
quark:~# netplan apply

ii.ホスト名を決める

設定ファイルは/etc/hosts。以下の通り設定する。

設定2. /etc/hosts
127.0.0.1localhost
192.168.1.201quark
#
# 〜中略〜
#

iii.FTPとTELNETのサービスをインストール

普段使用しているクライアントからサーバの様子を見たり、ファイルを転送する時に基本となるサービスがtelnetだったりftpだったりと言う事でこれらのサービスをインストールする(デフォルトではデーモンが入っていない)。

インストールは以下のコマンドを実行すればOK。

コマンド2. vsftpdとtelnetのインストール
quark:~# apt -y install vsftpd
quark:~# apt -y install telnetd xinetd
quark:~# apt -y install inetutils-inetd

インストール後の設定ファイルは、/etc/vsftpd.conf/etc/vsftpd.chroot_list/etc/inetd.confである。参考にしたサイトはこちらこちらです。

/etc/vsftpd.chroot_listの方は、hogehogeとしていますが、普段FTPを利用したいユーザー名を指定します。

設定3. /etc/vsftpd.conf
#
# 〜中略〜
#
write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
ls_recurse_enable=YES
#
# 〜中略〜
#

設定4. /etc/vsftpd.chroot_list
hogehoge #実際にFTPログインするユーザーを指定する

設定5. /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

これで設定は終わりで、あとはサービスをそれぞれ再起動すればFTPとTELNETは使えるようになりますが、不正アクセスの痕跡が後を絶たないので、多少なりともセキュリティ対策を施しておきます。メジャーなところでTCP Wrapperの設定をしておきます。

設定6. /etc/hosts.deny
ALL:ALL #王道の設定(すべてのアクセスを拒否)

設定7. /etc/hosts.allow
in.telnetd: 192.168.1.12
in.telnetd: 192.168.1.13
in.telnetd: 192.168.1.
in.ftpd: 192.168.1.
ALL:127.0.0.1

基本的にFTPもTELNETもLAN内から使用するのでローカルのIPからのみアクセスを許可する設定にしておきます。ですが、出先からもちょっとTELNETしてサーバーの様子を確認したいというケースもあるかと思います。その場合は、ルーターのVPN機能をあらかじめ有効にしておき、スマホでVPN接続すれば適当なエミュレータアプリでアクセスできるので便利です。自分はTerminusというアプリを利用しています。

▲TOP


DNSの設定

i.BINDの設定ファイル

インターネットへの接続も含めネットワーク周りの環境ができたら、まずはネームサーバーを最優先に立ち上げる。さもないと、メールサーバもWEBサーバも自前のサーバで立ち上げられない。

BINDの設定ファイルは/etc/bind/named.conf。同ファイルにはデフォルトである程度の記述がされているが、さすがにそのままでは使えない。具体的な修正箇所は下記に示す/etc/bind/named.confの内容に「以下を追加」というコメントがある次行から空白行までの設定を追記した。特にコメントの無い設定はデフォルトのままである。

設定内容について簡単に言えば、LAN内と外部(インターネット)用とに分けてskucky.comドメインにあるホスト名の名前解決を行うために元となる設定を行ったといったところ。実際のIPとホスト名を関連付けするには、後述のゾーンファイルで設定する。

設定8. /etc/bind/named.conf
//
// named.confの全内容(コメント箇所は除く)
//
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
//以下を追加
acl internal {
  127.0.0.1;
  192.168.1.0/24;
};
 
view "inside" {
match-clients { internal; };
recursion yes;
zone "." {
  type hint;
  file "/etc/bind/db.root";
  };
zone "localhost" {
  type master;
  file "/etc/bind/db.local";
  };
zone "127.in-addr.arpa" {
  type master;
  file "/etc/bind/db.127";
  };
zone "0.in-addr.arpa" {
  type master;
  file "/etc/bind/db.0";
  };
zone "255.in-addr.arpa" {
  type master;
  file "/etc/bind/db.255";
  };
zone "1.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/db.lan";
  };
zone "skucky.com" {
  type master;
  file "/etc/bind/db.192";
  };
};
 
view "outside" {
match-clients { any; };
allow-query { any; };
recursion no;
zone "skucky.com" {
  type master;
  allow-transfer { internal; 69.67.108.10; };
  file "/etc/bind/db.skucky.com";
  notify yes;
  };
};

なお、上記ファイルからincludeされている/etc/bind/named.conf.optionsとか言うファイルも以下のように設定しておく(わざわざファイルを分ける程の事でもないけれど)。

設定9. /etc/bind/named.conf.options
options {
  directory "/var/cache/bind";
  allow-query { internal; };
};

ii.ゾーンファイル

次に、ゾーンファイルを作成する。ここで作成したゾーンファイルはLAN内で名前解決(正引き・逆引き両方)に使うファイルと外向け用(正引き用のみ)に使うファイルの3種類(named.confで設定しているその他のゾーンファイルはデフォルトのままで問題無し)。それぞれの設定内容は以下の通り。

・/etc/bind/db.lan(LAN内逆引き用ゾーンファイル)

設定10. /etc/bind/db.lan
$TTL 86400
@INSOA ns1.skucky.com. root.skucky.com. (
 2021053001  ; Serial
 604800  ; Refresh
 86400  ; Retry
 2419200  ; Expire
 604800 )  ; Negative Cache TTL
 INNS ns1.skucky.com.
 INMX 10 mail.skucky.com.
201INPTR quark.skucky.com.
12INPTR lepton.skucky.com.

・/etc/bind/db.192(LAN内正引き用ゾーンファイル)

設定11. /etc/bind/db.192
$TTL 86400
@INSOA ns1.skucky.com. root.skucky.com. (
 2021053001  ; Serial
 604800  ; Refresh
 86400  ; Retry
 2419200  ; Expire
 86400 )  ; Negative Cache TTL
 INA 192.168.1.201
 INNS ns1.skucky.com.
 INMX 10 mail.skucky.com.
ns1INA 192.168.1.201
wwwINCNAME ns1
quarkINCNAME ns1
mailINA 192.168.1.201
leptonINA 192.168.1.12
popINCNAME mail
smtpINCNAME mail

・/etc/bind/db.skucky.com(外向け正引き用ゾーンファイル)

設定12. /etc/bind/db.skucky.com
$TTL 86400
@INSOA ns1.skucky.com. root.skucky.com. (
 2021053001  ; Serial
 604800  ; Refresh
 86400  ; Retry
 2419200  ; Expire
 86400 )  ; Negative Cache TTL
 INA 219.117.212.112
 INNS ns1.skucky.com.
 INNS ns2.granitecanyon.com.
 INMX 10 mail.skucky.com.
ns1INA 219.117.212.112
wwwINCNAME ns1
mailINA 219.117.212.112
popINCNAME mail
smtpINCNAME mail

それと、世界中のDNSの頂点に君臨するDNSの親玉のようなサーバーの情報がここにありますので、db.rootというファイル名で保存しておきます。

参考記事:Linux World 2003年9月号

あと、これが今回Ubuntuに変更して一番ハマったところですが、nslookupで名前解決出来ているか確認したところ、どうにも解決できず、色々調べた結果、どうやら/etc/resolv.confは再起動時に勝手に書き換えられるものらしい事が判明。最近のUbuntuでは/etc/systemd/resolved.confというファイルでDNSを指定する必要があるらしいとのこと。また、/etc/resolv.conf/run/systemd/resolve/stub-resolv.confのシンボリックリンクとなっており、「編集すんなよ!」とコメントに記載されています。

何はともあれネット上にある先人達の知恵を拝借して必要な設定を行い、名前解決の確認が無事できました。BINDの設定も問題ないことがこれで確認できます。

設定13. /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.1.201
Domains=skucky.com

コマンド3. systemdリゾルバの再起動と確認
quark:~# systemctl restart systemd-resolved
quark:~# systemd-resolve --status
~中略~
Current DNS Server: 192.168.1.201
             DNS Server: 192.168.1.201
~中略~
quark:~# nslookup
> ns1.skucky.com
Server:     127.0.0.53
Address:   127.0.0.53#53
 
Non-authoritative answer:
Name:      ns1.skucky.com
Address:   192.168.1.201

▲TOP


メールサーバーの設定

i.postfixの設定

MTAには使い慣れた?postfixを選択。参考にしたサイトはこちらです。

コマンド4. postfixのインストール
quark:~# apt -y install postfix

設定ファイルは/etc/postfix/main.cfだが、雛型として置いてある同ファイルにはコメントも無く、あっさりしたファイルで、先頭行にも「より完全なバージョンで、コメント付きの/usr/share/postfix/main.cf.distを見てくれ」とか書いてあるので、そちらの方を雛型として利用することにする。

どこを修正したのかよく覚えていないので、現状の設定で有効となっている行をすべて記載すると下記の通り。

設定14. /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
compatibility_level = 2
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = quark.skucky.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = mydestination = $myhostname, skucky.com, quark, localhost.localdomain, localhost, mail.skucky.com
relayhost =
mynetworks = 192.168.1.0/24,127.0.0.0/8
mailbox_size_limit = 1073741824
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox = Maildir/
virtual_alias_maps = hash:/etc/postfix/virtual
mail_owner = postfix
mydomain = skucky.com
myorigin = $mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
message_size_limit = 10485760
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_client_restrictions = permit_mynetworks check_sender_access hash:/etc/postfix/access reject_rbl_client relays.ordb.org reject_rbl_client sbl-xbl.spamhaus.org permit

ii.メールの転送設定

普段プライベートのメアドはGmailを使用しているので、独自ドメインのメアドはGmailに転送し、一極集中して管理するためメールの転送設定を行います。設定は容易で普段Ubuntuにログインしているユーザーのホームディレクトリに.forwardというファイルを作成し、転送先のGmailアドレスを記載しておくだけです。複数のメアドを指定することもできます。

設定15. ~/.forward
hogehoge@gmail.com
hagehage@gmail.com

▲TOP


WEBサーバーの設定

ApacheはWEBサーバーのメジャーなソフトだけあって、ネット上にもApacheに関する情報はそれこそ腐るほどありますが、自分が設定した内容は以下に示す通り。WEBサーバーにどの様な機能を持たせるかによって設定内容は大きく異なってくるかと思います。

ポイントとしては、アクセスカウンタにphpを使用しているので、その辺の設定を追加した程度であとはデフォルトの設定のままです。

i. Apacheの設定ファイル

設定16. /etc/apache2/apache2.conf
#~中略~
ServerName www.skucky.com
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
DirectoryIndex index.html index.php
#~中略~

ii. バーチャルホストの設定

次に、バーチャルホストの設定というものをやります。平たく言えばWEBサイトのホームディレクトリをどのパスにするかやログの設定などをお好みに合わせて設定しているだけです。

設定17. /etc/apache2/sites-available/skucky.conf
#~中略~
<VirtualHost *:>
ServerAdmin kakizawa@skucky.com
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SetEnvIf Remote_Addr "192.168.1." nolog
SetEnvIf Request_URI "default.ida" worm nolog
SetEnvIf Request_URI "root.exe" worm nolog
SetEnvIf Request_URI "cmd.exe" worm nolog
SetEnvIf Request_URI "Admin.dll" worm nolog
SetEnvIf Request_URI "mem_bin" worm nolog
SetEnvIf Request_URI "srcipts" worm nolog
SetEnvIf Request_URI "awstats" worm nolog
SetEnvIf Request_URI "stats" worm nolog
SetEnvIf Request_URI "mambo" worm nolog
SetEnvIf Request_URI "modules" worm nolog
SetEnvIf Request_URI "MSOffice/cltreq.asp" worm nolog
SetEnvIf Request_URI "vti_bin" worm nolog
SetEnvIf Remote_Addr 60.35 robot nolog
SetEnvIf Remote_Addr 65 robot nolog
SetEnvIf Remote_Addr 66.94.224.0/19 robot nolog
SetEnvIf Remote_Addr 66.98 robot nolog
SetEnvIf Remote_Addr 66.196 robot nolog
SetEnvIf Remote_Addr 66.249 robot nolog
SetEnvIf Remote_Addr 68.142 robot nolog
SetEnvIf Remote_Addr 202.160.176 robot nolog
SetEnvIf Remote_Addr 209.237 robot nolog
CustomLog /var/log/apache2/worm.log combined env=worm
CustomLog /var/log/apache2/robot.log combined env=robot
CustomLog /var/log/apache2/access.log combined env=!nolog
</VirtualHost>
#~中略~

iii. Basic認証の設定

我が家の自宅サーバーでは監視カメラも利用しており、撮影した動画はBasic認証でセキュリティを保持しています。まぁ、他人様に見られてもどうってことない庭先の映像が映っているだけですけどね。でも不特定多数の人に自由に見られるのは少し心配と言う事もあるので、簡易的なセキュリティ対策としてBasic認証の設定だけしています。

設定18. /etc/apache2/sites-available/auth-basic.conf
<Directory /var/www/webcam>
        AuthType Basic
        AuthName "Basic Autentication"
        AuthUserFile /etc/apache2/.htpasswd
        require valid-user
</Directory>

.htpasswdファイルは実際にBasic認証させるユーザー、パスワードを指定して下記の通り実行すれば作成できる。

コマンド5. .htpasswdの作成
quark:~# htpasswd -c -b /etc/apache2/.htpasswd ユーザ名 パスワード

もう一つ今回の自宅サーバー更改で難航したのが、アクセスカウンタの表示でした。phpの出力結果がどうにも表示できず、色々試してみたのですが、なかなか表示されず、恐らくApacheの設定ファイル上の問題だったと記憶していますが、灯台下暗し的な根本的な設定が欠けていたのが原因だったかと思います。もう1か月くらい前の話なので、よく覚えていないです、はい。

とりあえず、以上の設定でDNS、メール、WEBサーバの設定が完了し、ある程度サーバっぽく動作させることができると思います。

▲TOP


Valid XHTML 1.0 Strict


Copyright(C)2002-2021 skucky.com
webmaster@skucky.com