各種サーバー/ツールの導入手順をまとめました。尚、外部からアクセスするためには、ダイナミックDNS(以下、DDNS)サービスが利用可能な事と、ルーターのポート開放やファイヤーウォールを正しく設定しておく必要があります。
WAN側からアクセスできるよう、HGWへ静的IPマスカレード設定を行う。尚、PPPoE接続時は、後述する「ファイアウォール」設定のみ行えばOK。
PPPoE接続(後述)すると、HGWでのフィルター(静的IPマスカレード)設定が適用されないため、サーバーPC側でファイアウォールを稼働させる。
ufwを有効にする。
$ sudo ufw enable
ルールを追加する。
$ sudo ufw allow from 192.168.xxx.0/24 $ sudo ufw allow 22 $ sudo ufw allow 25 $ sudo ufw allow 80 $ sudo ufw allow 443 $ sudo ufw allow 5555
設定を有効化する。
$ sudo ufw reload
状態とルールを表示する。
$ sudo ufw status verbose 状態: アクティブ ロギング: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) 新しいプロファイル: skip To Action From -- ------ ---- Anywhere ALLOW IN 192.168.xxx.0/24 22 ALLOW IN Anywhere 25 ALLOW IN Anywhere 80 ALLOW IN Anywhere 443 ALLOW IN Anywhere 5555 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6) 25 (v6) ALLOW IN Anywhere (v6) 80 (v6) ALLOW IN Anywhere (v6) 443 (v6) ALLOW IN Anywhere (v6) 5555 (v6) ALLOW IN Anywhere (v6)
光回線がDS-Lite (IPv4 over IPv6)に対応したため、自宅サーバーを運用するために必要な任意のポート開放ができなくなった。そこで、自宅サーバーのみPPPoE接続して、グローバルIPアドレスを取得する事にする。
PPPoE接続に必要なパッケージをインストールする。
$ sudo apt install pppoe pppoeconf 以下の追加パッケージがインストールされます: ifupdown 提案パッケージ: rdnssd xdialog 以下のパッケージが新たにインストールされます: ifupdown pppoe pppoeconf
設定ファイル作成ツールを起動する。
$ sudo pppoeconf このプログラムを続けると、設定ファイル │ /etc/ppp/peers/dsl-provider、/etc/network/interfaces、/etc/ppp/*-secrets は変更されます。「はい」と答える前に、バックアップコピーがあることを確認してください。 設定を続けますか? <はい> 一般的なダイヤルアッププロバイダを使っているほとんどの人は、'noauth' オプションと 'defaultroute' オプションを設定に選び、'nodetach' オプションを削除するのがよいでしょう。 あなたの設定ファイルを確認して、これらの設定を必要に応じて変更しますか? <はい>
以下、画面の指示に従ってISP接続情報などの入力を進める。
以上で、接続情報ファイル「/etc/ppp/peers/dsl-provider」が作成される。
この状態だと、PPPoE接続する際のコマンドが「sudo pon dsl-provider」となり分かりにくいので、シンボリックリンクを設定する。
$ sudo ln -s /etc/ppp/peers/dsl-provider /etc/ppp/peers/ISP_NAME
以降、PPPoE接続時のコマンドは「sudo pon ISP_NAME」、切断時は「sudo poff」を実行する。
「pon」コマンドでppp0デバイスを作成するとppp0がデフォルトルートになるはずだが、うまくゆかないため以下を実行する。
pon設定ファイルを修正する。
$ sudo nano /etc/ppp/peers/dsl-provider
「defaultroute」をコメントアウト
ponコマンド実行時に自動実行されるスクリプトを作成する。
$ sudo nano /etc/ppp/ip-up.d/99-local
#!/usr/bin/bash ip route add default dev ppp0 metric 1
作成したスクリプトに実行権限を付与する。
$ sudo chmod +x /etc/ppp/ip-up.d/99-local
これで、ponコマンド実行時に、ppp0デバイスがデフォルトルートになる。
PPPoE接続をsystemdで管理するため、ユニットファイルを作成する。
$ sudo nano /etc/systemd/system/pppoe.service
[Unit] Description=PPPoE Client for ISP_NAME After=network-online.target [Service] Type=forking ExecStart=/usr/bin/pon ISP_NAME ExecStop=/usr/bin/poff SuccessExitStatus=5 ← poff時のステータスエラー回避 KillMode=control-group Restart=on-failure [Install] WantedBy=multi-user.target
systemdへ登録して自動起動設定を行う。
$ sudo systemctl daemon-reload $ sudo systemctl enable pppoe
手動起動コマンド $ sudo systemctl start pppoe 動作確認コマンド $ sudo systemctl status pppoe 手動停止コマンド $ sudo systemctl stop pppoe PPPoEデバイスの確認 $ ip a show ppp0 デフォルトルートの確認 $ ip r
外部公開するサーバーを運用するため、日本語でダイナミックDNS (以降、DDNS)サービスを提供している「MyDNS.JP」へ登録する。MyDNS.JPはIPv6へ対応しているが、現時点ではIPv4環境を前提とする。
MyDNS.JP
https://www.mydns.jp/
定期的(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_v3_x_x.zip」を作業フォルダで解凍後、「mydns.py」内のコメントを参考にして、初期設定値を編集する。
「現在のIPアドレスを取得するためのURL」はリリース時点でコメント内のものが利用可能だが、他にも「最初に表示されるIPアドレスが自宅ルーターのグローバルアドレス」というレイアウトになっているサイトであれば利用可能なので、各自で試してみて欲しい。
とは言え、本来は自前で確認ページを用意する方が望ましいため、以下の手順で確認ページを作成/設置する。
$ nano check-ip.php
<?php echo $_SERVER["REMOTE_ADDR"]; ?>
用意したURLへブラウザでアクセスして、自宅ルーターのグローバル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] 管理者パスワード: ← パスワードを入力する 2099/07/10 19:55:50: Initial notice. 2099/07/10 19:55:50: Notified. ← 起動通知した 2099/07/10 19:55:50: Notified IP address = 12.34.56.78 ← 起動通知したIPアドレス 2099/07/10 19:55:50: Registered IP address = 10.1.1.1 ← 通知直後はDNSへ反映されていない 2099/07/10 19:55:50: Current IP address = 12.34.56.78 ← 現在の実IPアドレス 2099/07/10 19:55:50: IP address changed! ← IPアドレスの変化を検出した 2099/07/10 19:55:51: 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 ← 通常接続時 After=pppoe.service ← PPPoE接続時 [Service] Type=simple ExecStart=/opt/ddnsclient/mydns.py ExecStop=/usr/bin/kill -TERM $MAINPID ExecReload=/usr/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
別ページで解説した。
SSHサーバーのパッケージ名は「openssh-server」だが、サービス名は「ssh」なので注意する。
$ sudo apt install openssh-server $ sudo systemctl enable ssh $ sudo systemctl status ssh
デフォルト設定でrootのログインはパスワード認証禁止になっているのでこのままでも運用可能だが、セキュリティー対策として接続ポートを変更する場合は、設定ファイルを変更する。
$ sudo nano /etc/ssh/sshd_config
port 22 ← 任意のポートへ変更する
サービスを再起動する。
$ sudo systemctl daemon-reload $ sudo systemctl restart ssh
「Logwatch」「CRON-APT」など、メール配信を伴うサービスがあるため、メール送受信環境を構築しておく。
$ sudo apt install postfix (途中表示される設定選択画面では「設定なし」を選択して進める)
「/etc/postfix/main.cf.proto」を参考に、設定ファイル「main.cf」を作成する。
要点として、サーバーPC自身(localhost)からと同一LAN内からのメール送信を受け付けるようにし、ログ配信などで必要な外部への送信は、OP25B対策も兼ねてリレーサーバーへ転送する事とする。
$ sudo nano /etc/postfix/main.cf
# Global Postfix configuration file. This file lists only a subset # of all parameters. For the syntax, and for a complete parameter # list, see the postconf(5) manual page (command: "man 5 postconf"). # COMPATIBILITY # # The compatibility_level determines what default settings Postfix # will use for main.cf and master.cf settings. These defaults will # change over time. compatibility_level = 3.8 # SHOW SOFTWARE VERSION OR NOT # # The smtpd_banner parameter specifies the text that follows the 220 # code in the SMTP server's greeting banner. Some people like to see # the mail version advertised. By default, Postfix shows no version. #### smtpd_banner = RINA 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 ← 配信を受け付けるメールの@から後ろ部分 # 同一LAN内と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 USER_NAME:PASSWORD ← 契約情報を指定する
認証情報をDB化する。
$ sudo postmap /etc/postfix/auth_info
インストール時にsystemdへ登録されているので、起動して設定を反映する。
$ sudo systemctl start postfix
メール転送用エイリアスを登録する。
$ sudo nano /etc/aliases
postmaster: root root: USER1 ← 転送元と転送先のユーザー名を指定する USER2: USER1 ← 転送元と転送先のユーザー名を指定する # 外部へ送信する場合 #root: USER99@example99.net ← 転送するメールアドレスを指定する
追加したエイリアスを反映させる。
$ sudo newaliases
メール受信プロトコルは「POP3」が利用できれば良いので「dovecot-pop3d」をインストールする。
$ sudo apt install dovecot-pop3d
プレーンテキストでの認証を可能とするため、設定ファイルへ以下を追記する。
$ sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no ← コメントを外して「no」へ変更する auth_mechanisms = plain login ← 「login」を追加する
インストール時にsystemdへ登録されて自動起動しているので、再起動で設定を反映する。
$ sudo systemctl restart dovecot
ここまでの設定で、メールの送受信ができるようになった。
mailコマンドをインストールして、メールの送信テストを行う。
$ sudo apt install bsd-mailx $ mail root (root宛のメールがUSER1へ転送されるかのテスト) Subject: TEST [Enter] root宛のメール送信テスト [Enter] [Ctrl-D] Cc: [Enter]
外部アドレスへの送信テストは以下の通り。
$ mail USER99@example99.net -r USER1@HOST_NAME.DDNS_NAME.example.jp Subject: TEST [Enter] 外部アドレスへの送信テスト [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 link」で確認する
設定ファイルへ以下を追記し、重複箇所をコメントアウトする。
$ 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 192.168.xxx.zzz,8.8.8.8; ← 複数のDNSサーバーを指定する場合は「,」で区切る
option domain-name "example.localdomain";
option routers 192.168.xxx.zzz;
option broadcast-address 192.168.xxx.255;
}
リスタートして設定を反映させる。
$ sudo systemctl restart isc-dhcp-server
別ページで解説した。
デフォルトでは、snapをインストールできないため、以下を実行する。
$ sudo nano /etc/apt/preferences.d/nosnap.pref
全行をコメントアウトする
snapをインストールする。
$ sudo apt install snapd
別ページで解説した。