各種サーバ/ツールの導入手順をまとめました。尚、外部からアクセスするためには、ダイナミックDNS(以下、DDNS)サービスが利用可能な事と、ルータのポート開放を正しく行っておく必要があります。
別ページで解説した。
Ubuntuでは、SSHサーバのパッケージ名は「openssh-server」だが、サービス名は「ssh」なので注意する。
$ sudo apt install openssh-server $ sudo systemctl enable ssh $ sudo systemctl status ssh
設定ファイル「/etc/ssh/sshd_config」を必要に応じて変更する。デフォルト設定でrootのログインはパスワード認証禁止になっているのでこのままでも運用可能だが、セキュリティー対策として接続ポートを変更する場合は、以下の項目を変更する。
port 22 ← 任意のポートへ変更する
別ページで解説した。
「Logwatch」をaptでインストールすると、依存パッケージとしてPostfixもインストールされるが、個別にremoveできなくなるので、先にPostfixを導入しておく。
$ sudo apt install postfix (途中表示される設定画面では「設定なし」を選択して進める)
設定ファイルのテンプレートは「/etc/postfix/main.cf.proto」にあり、これをコピー/リネーム(main.cf)しても良いが、今回は最低限の設定とするため、以下の内容で新規に設定ファイルを作成した。
要点として、サーバーPC自身(localhost)からと同一LAN内からの送信を受け付けるようにし、ログ配信などで必要な外部への送信は、OP25B対策も兼ねてリレーサーバへ転送する事とする。
$ sudo nano /etc/postfix/main.cf
#### 同一LAN内とlocalhostからのみ配送を受け付ける compatibility_level = 3.8 smtpd_banner = General SMTP Server ← 固定文字列を指定しておく myhostname = HOST_NAME.DDNS_NAME.example.jp ← 「HOST_NAME」はDDNS側へ登録したMX/Aレコード mydomain = DDNS_NAME.example.jp ← DDNS名 myorigin = PC_NAME.localdomain ← サーバPCの実名 mydestination = $myhostname, $myorigin, localhost ← 配信を受け付けるメールサーバ名 mynetworks = 192.168.xxx.0/24, 127.0.0.0/8 ← サーバPCと同一ネットワークを指定する inet_interfaces = all inet_protocols = ipv4 mail_spool_directory = /var/mail alias_maps = hash:/etc/aliases #### #### OP25B対策 # 以下はMyDNSで提供されるリレーサーバ(SMTP認証なしで接続可能/登録ユーザのみ利用可能) relayhost = [auth.gate-on.net]:587 # # 以下はASAHIネットで提供されるメールサーバ(SMTP認証が必要/契約ユーザのみ利用可能) #relayhost = [mail.asahi-net.or.jp]:25 #smtp_sasl_auth_enable = yes #smtp_sasl_password_maps = hash:/etc/postfix/auth_info #smtp_sasl_security_options = noanonymous #smtp_sasl_mechanism_filter = plain, login, digest-md5, cram-md5 # # 以下はASAHIネットで提供されるリレーサーバ(SMTP認証なしで接続可能/契約ユーザのみ利用可能) #relayhost = [op25b.asahi-net.or.jp]:25 ####
SMTP認証が必要なサーバへリレーする場合は、上記該当箇所のコメント(#)を外して、認証情報を記入したファイルを以下の内容で作成する。
$ sudo nano /etc/postfix/auth_info
[mail.asahi-net.or.jp]:25 USERNAME:PASSWORD ← 契約情報を指定する
認証情報をDB化する。
$ sudo postmap /etc/postfix/auth_info
インストール時にsystemdへ登録されているので、起動して設定を反映する。
$ sudo systemctl start postfix
root宛のメールを一般ユーザへ転送するため以下を実行する。
$ sudo nano /etc/aliases
postmaster: root root: USER1 ← 転送する一般ユーザ名を指定する # 外部へ送信する場合 #root: USER2@example.net ← 転送するメールアドレスを指定する
$ sudo newaliases
続いて、メール受信サーバであるdovecotをインストールする。プロトコルはPOP3が利用できれば良いので「dovecot-pop3d」をインストールする。
$ sudo apt install dovecot-pop3d
プレーンテキストでの認証を可能とするため、設定ファイルへ以下を追記する。
$ sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no auth_mechanisms = plain login
インストール時にsystemdへ登録されて自動起動しているので、再起動で設定を反映する。
$ sudo systemctl restart dovecot
ここまでの設定で、メールが送信/受信できるようになった。
mailコマンドをインストールして、メールの送信テストを行う。
$ sudo apt install bsd-mailx $ mail root (root宛のメールがUSER1へ転送されるかのテスト) Subject: TEST [Enter] root宛のメール送信テスト [Ctrl-D] Cc: [Enter]
外部アドレスへの送信テストは以下の通り。
$ mail USER2@example.net -r USER1@HOST_NAME.DDNS_NAME.example.jp Subject: TEST [Enter] 外部アドレスへの送信テスト [Ctrl-D] Cc: [Enter]
メール配信テストで、エラーのためメール送信されない場合、以下のコマンドで確認/メンテンナンスを実行する。
メールキューの確認 $ sudo postqueue -p メールキューの削除 $ sudo postsuper -d キューID メールキューの全削除 $ sudo postsuper -d ALL
別PCのメールクライアントから受信テストを実施する。
Thunderbirdの設定例メール受信できれば動作確認完了。
最後にLogwatchをインストールする。
$ sudo apt install logwatch
「/etc/cron.daily」へ「00logwatch」が設置され、1日1回root宛にメール送信される。
テスト送信する場合は以下を実行する(1日経たないとメールは作成されない)。
$ sudo logwatch --output mail
パッケージの更新確認を自動化するため「CRON-APT」を採用する。
$ sudo apt install cron-apt
「/etc/cron.d/cron-apt」で午前4時に自動実行される。
設定ファイルへ以下を追記する。
$ sudo nano /etc/cron-apt/config
# When to send email about the cron-apt results. # Value: # error (send mail on error runs) # upgrade (when packages are upgraded) # changes (mail when change in output from an action) # output (send mail when output is generated) # always (always send mail) # never (never send mail) # (else never send mail) MAILON="upgrade" # The email address to send mail to. MAILTO="root" # When to log the cron-apt results to syslog. # Value: # error (syslog on error runs) # upgrade (when packages is upgraded) # changes (syslog when change in output from an action) # output (syslog when output is generated) # always (always syslog) # never (never syslog) # (else never syslog) SYSLOGON="upgrade"
デフォルト設定ではパッケージのダウンロードだけ実行されるが、アップグレードも実行する場合は、以下のファイルを修正する。
$ sudo nano /etc/cron-apt/action.d/3-download
dist-upgrade -y -o APT::Get::Show-Upgraded=true ←「-d」オプションを削除する
Ubuntuでは、DHCPサーバのパッケージ名は「isc-dhcp-server」となる。
$ sudo apt install isc-dhcp-server
DHCPを提供するインターフェースを指定する。
$ sudo nano /etc/default/isc-dhcp-server
INTERFACESv4="enp1s0" ← インターフェース名は「ip a」で確認する
設定ファイルへ以下を追記し、重複箇所をコメントアウトする。
$ sudo nano /etc/dhcp/dhcpd.conf
ddns-update-style none; authoritative; default-lease-time 43200; ← デフォルトリース時間 12時間 max-lease-time 86400; ← 最大リース時間 24時間 subnet 192.168.xxx.0 netmask 255.255.255.0 { range 192.168.xxx.100 192.168.xxx.200; ← 割り当て範囲 option domain-name-servers 8.8.8.8,192.168.xxx.254; ← 複数のDNSサーバを指定する場合は「,」で区切る option domain-name "example.localdomain"; option routers 192.168.xxx.254; option broadcast-address 192.168.xxx.255; }
リスタートして設定を反映させる。
$ sudo systemctl restart isc-dhcp-server
外部公開するサーバを運用するため、日本語でダイナミックDNS (以降、DDNS)サービスを提供している「MyDNS.JP」へ登録する。MyDNS.JPはIPv6へ対応しているが、現時点ではIPv4環境を前提とする。
MyDNS.JP
https://www.mydns.jp/
IPアドレスの通知方法として、代表的なDDNSクライアントであるDiCE (CUI版)を試したが、64bit環境では動作しないため、導入は断念。
定期的(15分に一度)にMyDNS.JPへIPアドレスを通知するコマンドを、crontabで登録する。MyDNS.JP公式サイトで紹介されている方法と少し異なるが、基本的な考え方は同一である。以下では、実行結果を保管しない(結果的にメール送信もされない)ようコマンドを記述した。
$ sudo crontab -e
# MyDNS.JPへIPアドレスを通知する。 */15 * * * * curl -u マスターID:パスワード https://ipv4.mydns.jp/login.html >/dev/null
編集した内容は「/var/spool/cron/crontabs/root」へ保存される。
方法1でも問題ないが、IPアドレスが変わっていなくても15分毎に通知が行われるのは、DDNSサーバへ負荷が掛かりそうで心配だ。そこで、MyDNS.JP専用の通知スクリプトを作成し、IPアドレスの監視と通知を自動化した。動作要件は以下のとおり。
Python3.10.xから、base64モジュールのencodestring()メソッドが非推奨(廃止)になったため、新版では該当部分を修正してある。旧版も公開しておくので、自環境に合った方を利用してほしい。
ライセンス: GPL (GNU General Public License)
作成した通知スクリプトはMyDNS.JP専用だが、通知部分を修正すれば他のDDNSサービスでも対応可能なはずだ。以下、利用手順を示す。
「ddnsclient.zip」を作業ディレクトリで解凍後、「mydns.py」内のコメントを参考にして初期設定値を編集する。
「現在のIPアドレスを取得するためのURL」はリリース時点でコメント内のものが利用可能だが、他にも「最初に表示されるIPアドレスが自宅ルータのグローバルアドレス」というレイアウトになっている確認ページであれば利用可能なので、各自で試してみて欲しい。
とは言え、本来は自前で確認ページを用意する方が望ましいため、以下の手順で確認ページを作成/設置する。
$ nano check_ip.php
<?php echo $_SERVER["REMOTE_ADDR"]; ?>
用意したページへアクセスして、自宅ルータのグローバルIPアドレスが表示されている事を確認後、以下の手順で通知スクリプトを設置する。
$ sudo mkdir /opt/ddnsclient ← 設置先のディレクトリを作成する $ sudo cp 作業ディレクトリ/mydns.py /opt/ddnsclient $ sudo chmod 700 /opt/ddnsclient/mydns.py ← 実行権限の付加とroot以外はアクセス拒否
以下の手順で動作テストを行う。
$ sudo /opt/ddnsclient/mydns.py -v [sudo] USER1 のパスワード: ← パスワードを入力する 20xx/04/10 01:23:45: Notified. ← 起動通知 20xx/04/10 01:24:45: Registered IP address = 10.1.1.1 ← 起動通知しても1分くらいではDNSへ反映されない 20xx/04/10 01:24:45: Current IP address = 123.xxx.12.34 20xx/04/10 01:24:45: IP address changed! ← IPアドレスの変化を検出した 20xx/04/10 01:24:45: Notified. ← 通知された ^C ← [Ctrl+C]で停止
動作確認できたので、本番用に「IP_CHECK_INTERVAL = 10」などへ変更しから、systemd用ユニットファイルを作成する。
$ sudo nano /etc/systemd/system/ddnsclient.service
[Unit] Description=DDNS Client for MyDNS.JP After=network-online.target [Service] Type=simple ExecStart=/opt/ddnsclient/mydns.py ExecStop=/bin/kill -TERM $MAINPID ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
systemdへ登録して起動する。
$ sudo systemctl daemon-reload $ sudo systemctl enable ddnsclient $ sudo systemctl start ddnsclient
フリーで利用でき、高機能な「SoftEther VPN」を採用する。
SoftEther VPN プロジェクト
http://ja.softether.org/
公式サイトから「SoftEther VPN Server」「Linux」「Intel x64 / AMD64 (64bit)」で検索して、作業ディレクトリへDLする。
※古いバージョンだとビルドに失敗するため「Ver 4.28, Build 9669, beta」以降のバージョンを利用する。
ビルドを実行するために必要なパッケージを導入する。
$ sudo apt install gcc make
DLしたファイルを展開し、ビルドを実行する。
$ cd 作業ディレクトリ $ tar xvf softether-vpnserver-xxxx-linux-x64-64bit.tar.gz $ cd softether-vpnserver-xxxx-linux-x64-64bit/vpnserver $ make $ cd ../ $ sudo chown -R root:root vpnserver $ sudo mv vpnserver /opt
設定ファイル「vpn_server.config」が用意できる場合は「/opt/vpnserver」へコピーしておく。
systemd用ユニットファイルを作成する。
$ sudo nano /etc/systemd/system/vpnserver.service
[Unit] Description=SoftEther VPN Server After=network-online.target [Service] Type=forking ← 「Type」は必ず「forking」を指定する(これ以外だと起動できない) ExecStart=/opt/vpnserver/vpnserver start ExecStop=/opt/vpnserver/vpnserver stop KillMode=control-group Restart=on-failure [Install] WantedBy=multi-user.target
systemdへ登録して起動する。
$ sudo systemctl daemon-reload $ sudo systemctl enable vpnserver $ sudo systemctl start vpnserver
設定ファイルがない場合は、コマンドライン管理ユーティリティの「vpncmd」やWindows版GUI管理ツールで設定する。
公式サイトから「SoftEther VPN Client」「Linux」「Intel x64 / AMD64 (64bit)」で検索して、作業ディレクトリへDLする。
※古いバージョンだとビルドに失敗するため「Ver 4.28, Build 9669, beta」以降のバージョンを利用する。
DLしたファイルを展開し、ビルドを実行する。
$ cd 作業ディレクトリ $ tar xvf softether-vpnclient-xxxx-linux-x64-64bit.tar.gz $ cd softether-vpnclient-xxxx-linux-x64-64bit/vpnclient $ make $ cd ../ $ sudo chown -R root:root vpnclient $ sudo mv vpnclient /opt
一度、vpnclientを端末から起動して、vpncmdを使ってリモート設定を有効にする。
$ sudo /opt/vpnclient/vpnclient start $ sudo /opt/vpnclient/vpncmd (snip) vpncmd プログラムを使って以下のことができます。 1. VPN Server または VPN Bridge の管理 2. VPN Client の管理 3. VPN Tools コマンドの使用 (証明書作成や通信速度測定) 1 - 3 を選択: 2 接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。 何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。 接続先のホスト名または IP アドレス: [Enter] VPN Client "localhost" に接続しました。 VPN Client>RemoteEnable ← 全て小文字でも良い RemoteEnable コマンド - VPN Client サービスのリモート管理の許可 コマンドは正常に終了しました。 VPN Client>exit
以降は、Windows版のリモート管理ツールを利用して、リモートから仮想LANカードの追加【注】と仮想HUBへの接続設定が可能になる。
【注】「nic1」を指定すれば、仮想デバイス「vpn_nic1」が作成される。
一旦、vpnclientを終了する。
$ sudo /opt/vpnclient/vpnclient stop
設定ファイル「vpn_client.config」が用意できる場合は「/opt/vpnclient」へコピーしておく。
仮想LANカードへIPアドレスを設定するため、起動用シェルスクリプトを作成する。
$ sudo nano /opt/vpnclient/start_vpnclient.sh
#!/bin/sh /opt/vpnclient/vpnclient start sleep 3 ip a add 192.168.yyy.1/24 dev vpn_nic1
$ sudo chmod +x /opt/vpnclient/start_vpnclient.sh
systemd用ユニットファイルを作成する。
$ sudo nano /etc/systemd/system/vpnclient.service
[Unit] Description=SoftEther VPN Client After=network-online.target [Service] Type=forking ← 「Type」は必ず「forking」を指定する(これ以外だと起動できない) ExecStart=/opt/vpnclient/start_vpnclient.sh ExecStop=/opt/vpnclient/vpnclient stop KillMode=control-group Restart=on-failure [Install] WantedBy=multi-user.target
systemdへ登録して起動する。
$ sudo systemctl daemon-reload $ sudo systemctl enable vpnclient $ sudo systemctl start vpnclient