実際の理由は不明もルータを変更したところ、ポートフォワーディングを設定してもIPSEC/L2TPでのVPN接続ができなかった。 そこでwireguardを使ってのvpnを設定しなおした。
参考としたサイト
'https://chirashi.twittospia.com/技術/windowsでwireguardを設定する方法/2021-02-26/ 'https://qiita.com/naomori/items/1ee1a314cbdd3010f3ee 'https://asiavp.net/guide/windows/wireguard/
環境
サーバー: raspberry pi (buster) 外部端末: タブレットPC(windows10) ルータ使用: NAT転送(ポートフォワーディング)使用
なお、下記手順中のxxxxxxx,yyyyy,zzzzz,vvvvv, aaaaa, mydomain, 192.168.123.200, 192.168.123.100は自分の環境や設定したい値に合わせること。
サーバー側設定
sudo apt update
sudo apt upgrade
sudo apt install wireguard
mkdir wgkeys
cd wgkeys
umask 077
wg genkey > server_private.key
wg pubkey > server_public.key < server_private.key
wg genkey > client_private.key
wg pubkey > client_public.key < client_private.key
cd
sudo nano /etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo wg-quick down wg0
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo ufw allow aaaaa/udp
wg0.confの内容は
[Interface]
# virtual IP address for server
Address = 192.168.123.200/24
# port for wireguard . any number available
ListenPort = aaaaa
# server_private.key
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxx
# nat mantra
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# client_public.key
PublicKey = yyyyyyyyyyyyyyyyyyyyyyyyyyy
# virtual IP address in VPN for client
# allowed virtual IP
AllowedIPs = 192.168.123.100/32
タブレット側設定
windows用wireguardソフトをwireguardサイト からダウンロード
次にwindows上でnotepadか何かを使ってconfファイルを作成する。ここではwg1.confとする。
[Interface]
# client_private.key
PrivateKey = zzzzzzzzzzzzzzzzzzzzzzzzzzz
# virtual IP for client
Address = 192.168.123.100/24
[Peer]
# server_public.key
PublicKey = vvvvvvvvvvvvvvvvvvvvvvvvv
# set virtual IP address for VPN server as allowed IPs
AllowedIPs = 192.168.123.200/32,192.168.123.0/24
# set url and port
Endpoint = mydomain:aaaaa
windows用wireguardソフトをインストール&起動し、上記confファイルを読ませる。
その後は、有効化や無効化で制御可能
その他
ルータでポートaaaaa/udpをポート転送できる様にする。
投稿ナビゲーション
LAN内専用のメールサーバーは構築していたが、LAN外からメールを受信できれば、用途が広がる。 そこで、sslをサポートし、また帰宅後も再度PCでメールを見れるようにIMAP形式のメールサーバーを構築する。 なお、外部からメール受信には外部メールサービスを使うpush方式と、自ら見に行くpull方式があるが、まずはpull方式とした(gmailサーバー等をリレーしない)
※まだ、おかしいところがあるかも。いったんメモとして公開する。
構築イメージ
参考としたサイト
How to set up a mail server on your Raspberry Pi?
(Roundcubeを使う部分は実装せずにすました。 また、ENNABLE IMAPSの箇所で一部設定変更)
OpenSSL で SSL 自己証明書を発行する手順 先の参考サイトではdovecot.pemを使うとなっていたが、それだとエラーになったため。自己証明書ではなく本当はletsencryptを使うのが良いが、別のサーバーでテストしていたため自己証明書で行った。
インストールとテンプレート準備
sudo apt install postfix
sudo nano /etc/postfix/main.cf
sudo apt install mailutils
sudo apt install dovecot-imapd
sudo maildirmake.dovecot /etc/skel/Maildir
sudo maildirmake.dovecot /etc/skel/Maildir/.Drafts
sudo maildirmake.dovecot /etc/skel/Maildir/.Sent
sudo maildirmake.dovecot /etc/skel/Maildir/.Spam
sudo maildirmake.dovecot /etc/skel/Maildir/.Trash
sudo maildirmake.dovecot /etc/skel/Maildir/.Templates
ssl用自己証明書作成
makedir ssls sudo openssl genrsa 4096 > ssls/server.key openssl req -new -key ssls/server.key > ssls/server.csr openssl x509 -req -days 365 -signkey ssls/server.key < ssls/server.csr >ssls/server.crt
3つ目のserver.csrを作成するところで出てくる質問には例えば以下の様に答える JP 都道府県名 区名/市名/郡名 など 組織名等 単に改行 ドメイン名(例: example.com) その後の質問は改行でかまわない
場所移動 sudo cp ssls/* /etc/dovecot/private
postfixの設定
ポート番号の設定、ドメイン名の設定、ネットワークの指定等を行う
sudo nano /etc/postfix/main.cf
myhostname = example.com
mydomain = example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
inet_protocols = ipv4
home_mailbox = Maildir/
# 以下追加
mailbox_command =
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname,
check_helo_access hash:/etc/postfix/helo_access
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
sudo nano /etc/postfix/helo_access
aaa.bb.cc.ddd REJECT # aaa.bb.cc.ddd はexample.comのIPアドレス
# example.com REJECT
smtp.example.com REJECT
mail.example.com REJECT
sudo nano /etc/postfix/master.cf
587 inet n - y - - smtpd #smtpを587にした
sudo service postfix restart で、postfixを起動
dovecotの設定
sudo nano /etc/dovecot/dovecot.conf
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = ~/Maildir
sudo nano /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes ssl_cert = </etc/dovecot/private/server.crt ssl_key = </etc/dovecot/private/server.key ssl_min_protocols = TLSv1.2
ssl = yes
ssl_cert = </etc/dovecot/dovecot.pem # private/ を消すことに注意
ssl_key = </etc/dovecot/private/dovecot.pem # .keyを.pemにすることに注意
ssl_min_protocols = TLSv1.2
sudo service dovecot restart でdovecotを再起動
自分証明書だとおこられるかも。letsencryptので行う必要ありか。
テスト及び実行
※ 下記部分は「自己証明書作成」部分を行った場合は不要
printf '\0%s\0%s' 'testuser' 'password' | openssl base64
cd /etc/dovecot
sudo openssl req -new -x509 -nodes -config /usr/share/dovecot/dovecot-openssl.cnf -out dovecot.pem -keyout private/dovecot.pem -days 365
メーラー側の設定
protocol imap4 smtp認証 しない ssl imap4 sslを使用 smtp sslを使用しない smtp ポート番号 587 IMAP ポート番号 993 コードはutf-8にする。(文字化けするので) 2021/3/31追記
自己証明書なので信頼できないといわれるが、許可して受け入れると受信可能となる。
※ smtp側を開けていないとほとんどのメーラが使えない。 windowsだとSylpheedは使えた。 androidだとOpen Mailが使えた(おそらくK-9 Mailも)。 2021/3/31 追記
その他エラー対策
/var/log/mail.err や /var/log/syslogにエラーが出ているのでうまくいかないとき、コマンドでの直接のエラーメッセージの他にここをみてチェック
もし、 key too smallの様なメッセージが出た場合は /etc/ssl/openssl.cnf 中の CipherString = DEFAULT@SECLEVEL=2 の値を1にしてみる
もし、 /dev/urandomでエラーになった場合は、 /usr/share/dovecot/dovecot-openssl.cnf 中のRANDFILE = /dev/urandom部分をコメントアウトしてみる。 ついでにkey長を4096にするのが良い
投稿ナビゲーション
背景
raspberry piのサーバーを変更したので、それまでサーバー用として使用してraspberry piを別用途で再利用しようとした。 ただ、OSがwheezyと旧かったのでOSも一新しようとした。raspberry pi 4でHDD起動ができたので、HDD起動しようとした(それまでは HDDは/varの配下用にしていた)。 トライしたが失敗した。 いろいろ調べると、2Bのv1.2以上、3A+、3B、3B+、4Bでないと無理な様で、手持ちのものはver1.1であった。
※v1.2のものもあった(涙)2021/3/23
それで、SHDCカードでブートだけ行い、それ以降はHDDを使うようにした(/var から進化)。
参考にしたサイト
このサイト https://jyn.jp/raspberrypi-usb-boot/ が非常に有効だった。 ほとんど、そのままでできた。
そのままではできなかった部分は、「データをコピー (rsync)」 のところで、/ を /mntにコピーする様になっていたので、 /の下にmntがあるため再帰的にmntが作られ止まらなくなってしまった。 また、/sys の配下が多数エラーになってしまった。
最終的には、それらの部分を除外して実行し、それらの部分はディレクトリ作成だけ行った。
実際のコマンドイメージ(rsync部分だけ)
sudo rsync -aHAX --progress /bin /mnt
sudo rsync -aHAX --progress /dev /mnt
sudo rsync -aHAX --progress /home /mnt
sudo rsync -aHAX --progress /opt /mnt
sudo rsync -aHAX --progress /bin /mnt
sudo rsync -aHAX --progress /root /mnt
sudo rsync -aHAX --progress /bin /mnt
sudo rsync -aHAX --progress /sbin /mnt
sudo rsync -aHAX --progress /usr /mnt
sudo rsync -aHAX --progress /boot /mnt
sudo rsync -aHAX --progress /etc /mnt
sudo rsync -aHAX --progress /lib /mnt
sudo rsync -aHAX --progress /srv /mnt
sudo rsync -aHAX --progress /var /mnt
### 下記は不要かも #####
sudo mkdir /mnt/lost+found
sudo mkdir /mnt/media
sudo mkdir /mnt/proc
sudo mkdir /mnt/sys
sudo mkdir /mnt/sys/block
sudo mkdir /mnt/sys/bus
sudo mkdir /mnt/sys/class
sudo mkdir /mnt/sys/dev
sudo mkdir /mnt/sys/devices
sudo mkdir /mnt/sys/firmware
sudo mkdir /mnt/sys/fs
sudo mkdir /mnt/sys/kernel
sudo mkdir /mnt/sys/module
sudo mkdir /mnt/sys/power
投稿ナビゲーション
WordPressを運用しているとどこにアクセスが多いか気になる。一方、スパムが多い。 それで、アクセスログ解析を行いたいが、関係ないアクセスログも多い。 そこで、アクセスログの削減を行うとともに、アクセスのトップ10をメール通知する様にした。
前提条件
apacheをweb serverとして使っている lan内メールサーバーが構築済み (raspberry pi OS : ubuntuやdebianでも同じと思う)
ログ削減
lan内からのアクセスやcssファイル等の読み込みはログに残さないようにする。
/etc/apache2/sites-enabled/000-default.conf 及び /etc/apache2/sites-enabled/default-ssl.conf のCustomlog 部分を以下の様に編集する。
# CustomLog ${APACHE_LOG_DIR}/access.log combined
SetEnvIf Remote_Addr 127.0.0.1 nolog
SetEnvIf Remote_Addr 192.168.0. nolog
SetEnvIf Remote_Addr 192.168.2. nolog
SetEnvIf Request_URI "\.(gif|jpg|png|css|js|ico)$" nolog
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
もし、JPG等大文字のものがログに現れた場合は、SetEnvIF部分をSetEnvIfNoCaseに換える。
注:スペルミスがありましたので修正しました(no_log => nolog) 2021/03/20
再起動 sudo systemctl restart apache2
top10作成及びメール文作成用のシェルの準備
以下のシェルスクリプト(mytools/webtop10.sh)を作成
#!/bin/bash
echo from: wp_server@ktanimoto.net
echo to: wp_server@ktanimoto.net
echo subject: raspi web server accecc top10
echo Content-Type: text/plain;charset="UTF-8"
echo
echo ------ access IP top 10 ----------
cat /var/log/apache2/access.log |cut -f 1 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ----- access page top10 -----------
cat /var/log/apache2/access.log |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ------- actual access top 10 -----------
cat /var/log/apache2/access.log |grep 200 |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
cronの設定
rootが所有者になる様にしてcron設定ファイルを作成する(webtop10とここではする)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
50 7 * * * pi /home/pi/mytools/webtop10.sh | sendmail -i -t
投稿ナビゲーション
あるraspberry piにpostfixとdovecotで簡易的なメールサーバーを構築した。 それで、別のraspberry piマシンからも定期連絡等のメールを送れるようにする。
手法
メールを送るだけなので軽量な方法で行う。 簡単な調査だと、ssmtpを使うのが簡単そうであり、これをインストールして実現する。
インストールと設定
メールサーバーとポート番号の指定を、sudo nano /etc/ssmtp/ssmtp.conf にて行う
mailhub=192.168.0.232:587
メール送信テスト
以下のテスト用ファイルを作成する。 testmail.txt とする。
from: pi@localhost
to: receiver_name@mydomain
subject: hello-test-from-ssmtp
Content-Type: text/plain;charset="UTF-8"
this is test mail by ssmtp
次のコマンドでテストする。
cat testmail.txt | sendmail -i -t
メーラーで受信を確認。受信できていた。
あとは、シェル作成とcron設定
(2021/03/19 追記) 以下のファイル myhealth.sh を作成する
echo from: pi@localhost
echo to: wp_server@ktanimoto.net
echo subject: dns vpn daily report
echo Content-Type: text/plain;charset="UTF-8"
echo
date
echo
echo ------ memory usage -------
free -h
echo
echo ----- device usage --------
df -h
echo
/etc/cron.d/myhealth をsudo nanoで作成する(rootが所有者になるようにする)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
15 */12 * * * pi bash /home/pi/mytools/myhealth.sh | sendmail -i -t
最後の行でbashの後に空白がなかったので追加(2021/3/20)
投稿ナビゲーション