kazeno memo

メモとか

Debian StretchにSELinuxを入れる

DebianをインストールしたけどSELinuxが入っていなかったので導入します。

導入

Debianの公式WIKIに導入方法が載っているのでこれに従う。
SELinux/Setup - Debian Wiki

# apt install selinux-basics selinux-policy-default auditd
# selinux-activate
# reboot
この後何回か再起動を繰り返すので待ちましょう。

確認

WIKIでは"check-selinux-installation"コマンドで確認しろって書いてありますが、Stretchではエラーが出るようなので、別のコマンドで確認します。

# sestatus
SELinux status:				enabled
SELinuxfs mount:			/sys/fs/selinux
SELinux root directory:			/etc/selinux
Loaded policy name:			default
Current mode:				permissive
Mode from config file:			permissive
Policy MLS status:			enabled
Policy deny_unknown status:		allowed
Max kernel policy version:		30

こんな感じで有効になっていると表示されていればOKです。

UnboundでLAN内の名前解決をしてみる

Debian Stretch上でUnboundを使ってみます。

やる事としては、
ローカル用にdomain1.tld,domain2.tldのA,MXレコードを追加する。
LAN内(192.168.0.0/24)から参照出来るようにする。

APT

# apt update
# apt install unbound

Unboundの設定

悪いインターネットさんの「unbound.confの雛形 IPv4+IPv6」を参考にしました。

/etc/unbound/unbound.conf

server:
        verbosity: 0		#No Log
        interface: ::0		#IPv6
        interface: 0.0.0.0	#IPv4

        access-control: 0.0.0.0/0 refuse
        access-control: ::0/0 refuse
        access-control: 127.0.0.0/8 allow
        access-control: ::1/128 allow
        access-control: 192.168.0.0/24 allow	# your IPv4 LAN
        access-control: fc00::/7 allow		# your IPv6 LAN

        #INCLUDE FILES (in server:)
        include: /etc/unbound/include/local.zone

forward-zone:
        name: "."
        forward-addr: 2001:4860:4860::8888	# IPv6 Google public DNS#1
        forward-addr: 2001:4860:4860::8844	# IPv6 Google public DNS#2
        forward-addr: 8.8.8.8			# IPv4 Google public DNS#1
        forward-addr: 8.8.4.4			# IPv4 Google public DNS#2
server:
verbosity 0でログを取らない
interface 応答するインターフェイスの指定
access-control refuseで拒否、allowで許可
include 追加で読み込む設定ファイルorディレクト

この設定だと、localhostとLAN内からの問い合わせにのみ応答し、それ以外からの問い合わせは拒否されます。
また、includeはディレクティブごとに複数指定出来ます。
公開されているサーバで使う場合はオープンリゾルバにならないように注意しましょう。

forward-zone:
name フォワード(転送)するドメインを指定、"."で全てのドメイン
forward-addr フォワード先のDNSを指定

つまり、後述するゾーンファイルで設定を行うドメイン以外は、全て「forward-addr:」で指定したDNSで名前解決されます。
今回はGoole Public DNSを使っていますが、ISPの提供しているDNSなどを設定しても良いです。

ゾーンファイル

# mkdir /etc/unbound/include

このファイルへローカル向けのDNSレコードを記述します。
/etc/unbound/include/local.zone

local-data: "domain1.tld. IN A 192.168.1.11"
local-data: "mail.domain1.tld. IN A 192.168.1.10"
local-data: "domain1.tld. IN MX 10 mail.domain1.tld."

local-data: "domain2.tld. IN A 192.168.1.11"
local-data: "domain2.tld. IN MX 10 mail.domain1.tld."

ドメインの後には、「.」を付ける必要があるので注意してください。

ポート開放

ここではFirewalldでtcp/udpの53番ポートを開けます。

# firewall-cmd --permanent --zone=public --add-service=dns
# firewall-cmd --reload
# firewall-cmd --list-all #サービスにdnsが追加されているか確認

起動

そのままだとエラーが出て自動起動出来ないらしいので、unbound.serviceを編集します。
/lib/systemd/system/unbound.service

After=network-online.target

Afterのnetwork.targetをnetwork-online.targetへ変えています。

起動する

# systemctl start unbound
# systemctl enable unbound

とりあえずこれでUnboundが起動出来ているはずです。
nslookupでテストしてみます。

# nslookup domain1.tld 127.0.0.1

ゾーンファイルで設定したIPアドレスが表示されたら正常に動作しています。

resolv.confとか

このままではOSがUnboundへDNSの問い合わせをしてくれないので、resolv.confを編集します。
/etc/resolv.conf

nameserver 127.0.0.1
nameserver ::1

既存の「nameserver」を削除して、これを追加してください。

また、DNSの設定は/etc/network/interfacesにも記述しておくべきらしいので、こちらも編集します。
/etc/network/interfaces

iface enp0s3 inet static
~~~~~~~~~~
  dns-nameservers 127.0.0.1

iface enp0s3 inet6 auto
~~~~~~~~~~
  dns-nameservers ::1

ifaceディレクティブの最後に「dns-nameservers IPアドレス」と追加します。

終わり

後はRebootすれば自動でUnboundが立ち上がっていると思います。

正常に動作しているかどうか確認します。

# systemctl status unbound

実際に問い合わせが行えるか確認します。

# nslookup domain1.tld

ちなみに、次のコマンドでUnboundの設定ファイルの内容が正しいかどうか確認することが出来ます。

# unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

終わり

OVHのVPSへDebianを手動インストール(debootstrap & LUKS)

元ネタ Setting up my server: re-installing on an encripted LVM

OVHのVPSはカスタムISOをアップロードできないので、Debianを暗号化パーティションへインストールすることが出来ません。
そこで、リカバリモードからディスクを暗号化して、そこにdebootstrapを使って手動でDebianをインストールしていきます。

起動後のディスク暗号化解除はDropbearを使いSSH経由で行うので、記号を含んだランダムなパスワードを設定出来ます。


Rescue mode

事前にRescue modeを起動しておきます。(OSはDebian)
コントロールパネルの「Reboot in rescue mode」から起動できます。
起動までに3分位かかるようです。
起動が完了したら、SSHのパスワードが書かれたメールが届きます。

partition構成

sdaがVPSのメインディスクです。
(実際にはレスキューモードのDebianがsda、VPSのディスクがsdbになっているので注意。)

sda
├sda1  			/boot
└sda2			LVM physical volume
  └VG_01		LVM volume group
    ├vg0		swap
    └vg1		/ (debian root)

参考(LVMについて)
3. LVM(Logical Volume Manager)(第2章ディスク管理〜上級:基本管理コースII)

インストール後のポイント

インストール完了後、起動してもsshdfirewallの設定は出来ていません。
そのためコントロールパネルのVNCからそれらの設定をする必要があります。
なので、管理者ユーザーのパスワードは簡単なものにしておいたほうが良いです。

ここからは実際に作業を行っていきます。
パーティションの操作などは後戻りが出来ない場合があるため、自己責任でお願いします。

1.apt

# apt update
# apt install cryptsetup lvm2 debian-archive-keyring debootstrap

2.パーティショニング

# fdisk /dev/sda
>o MBRテーブル作成
>n パーティションを新規作成

sda1,2ともにプライマリ(基本パーティション)で作成しました。
パーティションタイプは両方83(Linux)
sda1(/boot)には必ず起動フラグを付けましょう。

3.フォーマット

sda1(/boot)をext4でフォーマット(-Lはラベル)

# mkfs.ext4 -L boot /dev/sda1

4.LVMのセットアップ

4-1.sda2を暗号化

# cryptsetup -s 512 -c aes-xts-plain64 luksFormat /dev/sda2
Are you sure? (Type uppercase yes): YES ##実行するか?と聞かれるので大文字でYESと入力
Enter LUKS passphrase:	パスワードを入力
Verify passphrase:		パスワードの確認

4-2.UUIDを控えておく(のちのち必要)

# cryptsetup luksDump /dev/sda2 | grep UUID:

4-3.LVMボリュームグループを作成

# cryptsetup luksOpen /dev/sda2 VG_01
# pvcreate /dev/mapper/VG_01
# vgcreate vg0 /dev/mapper/VG_01

4-4.LVM論理ボリュームを作成

# lvcreate -n swap -l 1G vg0
# lvcreate -n root -l 100%FREE vg0
  • nはラベル
  • lは容量(K,M,G単位で指定できる。100%FREEで空いている全領域)

4-5.論理ボリュームをフォーマット

# mkfs.ext4 -L root /dev/mapper/vg0-root
# mkswap -L swap /dev/mapper/vg0-swap

5.マウント

作業ディレクトリ「/target」下にマウント

# mkdir /target
# mount /dev/mapper/vg0-root /target
# mkdir /target/boot
# mount /dev/sda1 /target/boot
# swapon /dev/mapper/vg0-swap

6.debootstrap

# debootstrap --arch amd64 stretch /target http://debian.mirrors.ovh.net/debian

--archは環境に合わせて指定
OVHを使っていない場合はミラーを"http://httpredir.debian.org/debian"などに設定する。

7.chroot

chrootで作業していく

# mount -o bind /dev /target/dev
# mount -t proc proc /target/proc
# mount -t sysfs sys /target/sys
# XTERM=xterm-color LANG=C.UTF-8 chroot /target /bin/bash


8.各種設定

8-1.crypttab

# nano /etc/crypttab

VG_01 UUID=XXXX-XXXX-XXXX-XXXX none luks

UUIDは「4-2.UUIDを控えておく」で控えておいたもの

8-2.fstab

# nano /etc/fstab

# file system	mount point	type	option				dump	pass
LABEL=root		/			ext4	errors=remount-ro	0		1
LABEL=boot		/boot		ext4	rw,nosuid,nodev		0		2
LABEL=swap		none		swap	sw					0		0

参考 https://www.debian.org/releases/stable/mips/apds03.html.ja#idm3749

8-3.mtab

/etc/mtabに依存しているツールのためにシンボリックリンクを作成

# ln -sf /proc/mounts /etc/mtab

9.ネットワーク周り

9-1.interfaces

9-1-1.DHCPの場合

# nano /etc/network/interfaces (以下を追記)
(ens3の設定が存在する場合はコメントアウトする。)

auto ens3
iface ens3 inet dhcp
iface ens3 inet6 auto
	dhcp 1
iface ens3 inet6 dhcp
9-1-2.手動(static)で設定する場合

# nano /etc/network/interfaces (以下を追記)
(ens3の設定が存在する場合はコメントアウトする。)

auto ens3
iface ens3 inet static
	address xxx.xxx.xxx.xxx/32
	gateway xxx.xxx.xxx.aaa
	pre-up /sbin/ip addr flush dev ens3 || true
iface ens3 inet6 static
	address xxxx:xxxx:xxxx:xxxx::1/128
	gateway aaaa:aaaa:aaaa:aaaa::1
	post-up /sbin/ip -6 route add aaaa:aaaa:aaaa:aaaa::1 dev ens3
	post-up /sbin/ip -6 route add default via aaaa:aaaa:aaaa:aaaa::1
	pre-down /sbin/ip -6 route del aaaa:aaaa:aaaa:aaaa::1 dev ens3
	pre-down /sbin/ip -6 route del default via aaaa:aaaa:aaaa:aaaa::1

IPv4Address=xxx.xxx.xxx.xxx
IPv4Gateway=xxx.xxx.xxx.aaa
IPv6Address=xxxx:xxxx:xxxx:xxxx::1
IPv6Gateway=aaaa:aaaa:aaaa:aaaa::1

IPv6使わないならinet6を追加しない

IPアドレス/ゲートウェイの確認方法

IPアドレスとサブネットを表示
# ip a

デフォルトゲートウェイを表示
>||
# ip route list		#IPv4
# ip -6 route list	#IPv6

参考 Configuring IPv6 on dedicated servers | OVH Guides

9-2.sysctl.conf

IPv6を手動で設定した場合に必要(DHCPの場合はスキップ)
# nano /etc/sysctl.conf (以下を追記)

# Disable IPv6 autoconf 
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.ens3.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.ens3.accept_ra = 0

9-3.resolv.conf

# nano /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

9-4.hostname

# nano /etc/hostname
# hostname [ホストネーム]
# nano /etc/hosts
127.0.1.1 ホストネーム

10.タイムゾーン

# echo -e '0.0 0 0.0\n0\nUTC' > /etc/adjtime
# dpkg-reconfigure tzdata	#タイムゾーンの設定

11.APTミラー

# nano /etc/apt/sources.list (以下を上書き)

deb http://debian.mirrors.ovh.net/debian stretch main contrib non-free
deb http://debian.mirrors.ovh.net/debian stretch-updates main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free

# nano /etc/apt/apt.conf.d/02recommends
推奨パッケージを無効化

APT::Install-Recommends "False";
# apt update

12.Dropbear

SSHキーペアを作成しておく

12-1.公開鍵の設定

# mkdir -p /etc/dropbear-initramfs
# nano /etc/dropbear-initramfs/authorized_keys
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-rsa xxxxxxxxxxxx...

公開鍵の前のオプションは「cryptroot-unlock」コマンドのみ実行可能にするもの。
今後authorized_keys,/etc/crypttabなどを変更することがあれば、その都度必ず「update-initramfs -u」コマンドを実行すること。

12-2.apt

# apt install makedev cryptsetup lvm2 ssh dropbear busybox ssh initramfs-tools locales linux-image-amd64 grub-pc kbd console-setup

インストールの途中でGrubのインストール先を聞かれるので(sda1,2ではなく)sdaを選択する

12-3.initrdの中身を確認

# zcat /boot/initrd.img-* | cpio -t conf/conf.d/cryptroot \
  etc/lvm/lvm.conf etc/dropbear/\* root\*/.ssh/authorized_keys \
  sbin/dropbear | sort
実行すると以下のように出力されるはず
conf/conf.d/cryptroot
etc/dropbear/config
etc/dropbear/dropbear_dss_host_key
etc/dropbear/dropbear_ecdsa_host_key
etc/dropbear/dropbear_rsa_host_key
etc/lvm/lvm.conf
root-l2oUNW/.ssh/authorized_keys
sbin/dropbear

12-4.cryptrootの中身を確認

# zcat /boot/initrd.img-* | cpio -i --to-stdout conf/conf.d/cryptroot

これらの設定が正確ならGrubの設定に移る

13.Grub

13-1.DHCPの場合

# nano /etc/default/grub

GRUB_CMDLINE_LINUX="ip=:::::ens3:dhcp"

13-2.手動(static)の場合

# nano /etc/default/grub

GRUB_CMDLINE_LINUX="ip=xxx.xxx.xxx.xxx::xxx.xxx.xxx.aaa:255.255.255.255"

サブネットマスクは/32みたいに省略しないこと
xxx.xxx.xxx.xxxはIPアドレス
xxx.xxx.xxx.aaaはゲートウェイ

13-3.Grubをアップデート

# update-grub2

14.その他の設定

14-1.fsckを自動実行 お好みで(ファイルシステムのチェック/修復)

有効にしてもいいけど起動に時間がかかる
# nano /etc/default/rcS (以下を追記)

FSCKFIX=yes

14-2.各種ツールのインストール

# apt install less ntpdate sudo

14-3.管理者ユーザを設定

# adduser ユーザ名
# adduser ユーザ名 sudo	#(sudoグループに追加)
# adduser ユーザ名 adm	#(admグループに追加(/var/logなどが閲覧できる?)
# passwd ユーザ名			#(簡単なものを設定しておく)
# passwd root

15.chrootを終了

# exit #(chrootから抜ける)
# umount /target/{dev,proc,sys,boot}
# umount /target
# swapoff -a
# lvchange -an /dev/mapper/vg0-*
# cryptsetup luksClose VG_01

umount出来ない場合

lsofで"/target"を使用中のプロセスを表示させる。
# lsof | grep '/target/'

/target/bin/bashが使用中なのでキルする。
# kill -9 bashのpid

アンマウント
# umount /target

後はコントロールパネルから再起動する。
起動後SSHでLuksを解除した後、コントロールパネルのVNCからログインして、SSHとかfirewallを設定する。

起動時にSSHでLuksの解除が出来ない場合

リカバリモードでもう一度設定し直してください。
手順

# apt update
# apt install lvm2 cryptsetup
# cryptsetup luksOpen /dev/sda2 VG_01
# vgchange -aay (LVMボリュームを自動検出)
# mkdir /target
# mount /dev/mapper/vg0-root /target
# mount -o bind /dev /target/dev
# mount -t proc proc /target/proc
# mount -t sysfs sys /target/sys
# chroot /target mount -a (fstabを自動で読み込んでマウント(上手くいかないなら手動で)
# XTERM=xterm-color LANG=C.UTF-8 chroot /target /bin/bash

これで作業環境は整ったので、initrdの生成、Grubの編集などをやり直してください。

GPG公開鍵の検索・インポートとか

OSのISOとかダウンロードする時、GPGの電子署名ファイル(.sig/.asc)はあるけど公開鍵がどこにあるか分からない時がある。
そういう時にはまず、verifyをする。

gpg --verify foobar.asc
gpg: Signature made xxx xxx xx xx:xx:xx xxxx
gpg:                using RSA key XXXXXXXXXXXXXXXX
gpg: Can't check signature: No public key

当然ながら公開鍵がないのでエラーが出る。

次に鍵サーバから公開鍵を検索する。

gpg --keyserver pgp.mit.edu --search-keys XXXXXXXXXXXXXXXX

keyserverは指定しなくても良い。
search-keysには、verify時に表示される「using RSA key XXX.......」を指定する。
RSA keyの他にもメールアドレスなどでも検索可能。

検索結果が表示されるので、目的の鍵の数字を指定してインポート出来る。

再度verifyすると無事成功する。

dockerイメージ・コンテナを全部削除する

練習用で作ったコンテナが邪魔になったので

イメージより先にコンテナを削除しないとエラーが出ます。

コンテナ

docker rm `docker ps -a -q

イメージ

docker rmi `dokcer images -q`

終わり

DebianをVirtualBoxへインストールした後にやること

DebianVirtualboxへインストールした後にやっておく事とか。

EFIファイルの設定

EFIを有効にしてインストールした場合のみ必要。

# mkdir /boot/efi/EFI/boot/
# cp /boot/efi/EFI/grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

EFIでは起動後に/EFI/boot/bootx64.efiがロードされるが、デフォルトではbootx64.efiが作成されていない為。

パッケージ

# apt install linux-headers-amd64 gcc make perl sudo

linux-headers-amd64 gcc make perlはGuest Additionsで必要。

Guest Additionsの導入

Guest Additions CDを挿入する。

# cd /media/cdrom
# sh ./VBoxLinuxAdditions.run

sudoの設定

# visudo

visudoは安全にsudoの設定ファイルを編集出来るやつ。

hoge ALL=(ALL) ALL

hogeはユーザ名

NOPASSWDでパスワードの入力をスキップ出来る

hoge ALL=NOPASSWD: /sbin/reboot
hoge ALL=NOPASSWD: /sbin/poweroff
hoge ALL=NOPASSWD: /usr/bin/apt
hoge ALL=NOPASSWD: /usr/bin/apt-get

ただ、このままではrebootの前にsudoを付けなければ実行できないので、エイリアスを設定する。

$ vi ~/.bash_aliases
alias reboot="sudo reboot"
alias poweroff="sudo poweroff"
alias apt="sudo apt"
alias apt-get="sudo apt-get"

エイリアスを適用する。

source ~/.bash_aliases

ホームディレクトリ以下を英語にする

$ LANG=C xdg-user-dirs-gtk-update

「Don't ask me this again」にチェックしておく。

シャットダウン時に「A stop job is running for」と表示されて、待たされる場合

# /etc/systemd/system.conf
DefaultTimeoutStopSec=10s

以上
多分これで良いと思う。

Nginx & MyDNS.jpな環境でLet's Encryptの自動更新

証明書発行&自動更新を行う。

Nginxの導入は各自で行ってください。

必要なもの

PHP

MyDNSが提供しているDirectEditで必要。
https://www.rem-system.com/centos-nginx-php/
このサイトを参考に導入した。

Certbot

Let'sEncryptが提供している証明書取得・更新用のツール。
まずEPELリポジトリを導入しておく

$ sudo yum install epel-release

certbotのインストール

$ sudo yum install certbot
DirectEdit

MyDNSが提供しているLet'sEncrypt用のDNS認証自動化ツール。
https://github.com/disco-v8/DirectEdit/
READMEを参考に導入する。
ここでは、Nginxデフォルトのドキュメントルートへファイルを配置する。
デフォルトでなくても、ドキュメントルートであればなんでも良い。

$ cd /usr/share/nginx/html/ ##ドキュメントルートへ移動
$ sudo wget 'https://github.com/disco-v8/DirectEdit/archive/master.zip' -O mydns.zip
$ sudo unzip ./mydns.zip
$ cd ./mydns/
$ sudo chmod 700 ./*.php
$ sudo chmod 600 ./*.conf

DirectEditの設定

DirectEditの設定ファイル"txtedit.conf"に、MyDNS.jpのアカウント情報とドメインを追加する。

~~~~~~
    $MYDNSJP_MASTERID  = 'ユーザ名';
    $MYDNSJP_MASTERPWD = 'パスワード';
    $MYDNSJP_DOMAIN = 'ドメイン';
~~~~~~

複数ドメインの場合

ドキュメントルート
    └ mydns/
            ├ ドメイン1.com/
            │      ├txtregist.php
            │      ├txtdelete.php
            │      └txtedit.conf
            └ ドメイン2.com/
                   ├txtregist.php
                   ├txtdelete.php
                   └txtedit.conf

こんな感じでファイルを配置してそれぞれの"txtedit.conf"に、必要な情報を追加する。

Certbotで証明書発行

次のコマンドでは"ドメイン1.com"の証明書&ワイルドカード証明書を取得出来る。
まずは、"--dry-run"オプションで上手くいくか確認。

$ sudo certbot certonly --manual \
$ --preferred-challenges=dns \
$ --manual-auth-hook /usr/share/nginx/html/mydns/txtregist.php \
$ --manual-cleanup-hook /usr/share/nginx/html/mydns/txtdelete.php \
$ -d ドメイン1.com -d *.ドメイン1.com \
$ --server https://acme-v02.api.letsencrypt.org/directory \
$ --agree-tos -m 連絡用メールアドレス \
$ --manual-public-ip-logging-ok
$ --dry-run

成功すると
IMPORTANT NOTES:
- The dry run was successful.
と出る。
失敗したならオプションとかDirectEditの設定を見直す。

次は、"--dry-run"を取って実際に証明書を発行する。

$ sudo certbot certonly --manual \
$ --preferred-challenges=dns \
$ --manual-auth-hook /usr/share/nginx/html/mydns/txtregist.php \
$ --manual-cleanup-hook /usr/share/nginx/html/mydns/txtdelete.php \
$ -d ドメイン1.com -d *.ドメイン1.com \
$ --server https://acme-v02.api.letsencrypt.org/directory \
$ --agree-tos -m 連絡用メールアドレス \
$ --manual-public-ip-logging-ok

成功すると
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
てな感じで、証明書の保存場所が表示される。

場所はデフォルトでは"/etc/letsencrypt/live/ドメイン1.com/"
複数のファイルが生成されるのでNginxに設定する。

オプションの解説

certonly				証明書を取得するだけ(サーバへの設定は手動)
--manual				認証を手動で行う
--preferred-challenges=dns		DNSを使った認証を行う
--manual-auth-hook			DNSへ認証コードを登録するときに使用するスクリプトを指定
--manual-cleanup-hook			登録した認証コードを削除するときに使用するスクリプトを指定
-d					ドメイン名(複数指定/ワイルドカード可能)
-m					連絡用のメールアドレス指定(失効前などにメールを送ってくれる。変更可能)
--server				ワイルドカード証明書の発行に対応ているサーバを明示的に指定している
--agree-tos				利用規約に同意
--manual-public-ip-logging-ok		証明書発行を要求したIPの公開を許可

NginxにSSL証明書を設定する

設定ファイルに次のように追加。

$ ssl_certificate /etc/letsencrypt/live/ドメイン1.com/fullchain.pem;
$ ssl_certificate_key /etc/letsencrypt/live/ドメイン1.com/privkey.pem;
##設定によっては以下も追加
$ ssl_trusted_certificate /etc/letsencrypt/live/ドメイン1.com/chain.pem;

Cronで証明書を自動更新&MyDNSへIPを自動通知

$ sudo crontab -e

でviが開くので設定追加
(以下はあくまで例)

#MyDNSへIP通知
*/10 * * * * curl -4 -o /dev/null "https://ユーザ名:パスワード@www.mydns.jp/login.html"
#Let'sEncrypt自動更新
* * 1 * * certbot renew --renew-hook "systemctl restart nginx" --renew-hook "systemctl restart postfix" --renew-hook "systemctl restart dovecot" -q >> /var/log/certbot-renew.log

MyDNSの方
10分ごとにcurlを使ってIPv4アドレスのみを通知している。
IPv6も通知したい場合は"-4"を取る。

Let'sEncryptの方
一日ごとに証明書の更新を試行する。
"--renew-hook"は更新に成功した場合、指定したコマンドを実行する。複数指定することも可能。
"-q"は詳細を出力。
">> /var/log/certbot-renew.log"で出力を保存。

VLCのYoutube再生リストプラグインが使えない

タイトルの通り
Youtube playlist - addons.videolan.org
が最新版のVLC(3.0.4)で使えなくなった。

VLC 3.0.2 not playing youtube playlists : VLC
パッチを作ってくださった方がいるようなのでそれを使う。

VLC 3.x compatibility patch for 149909-playlist_youtube.lua · GitHub
導入方法は「C:\Program Files\VideoLAN\VLC\lua\playlist」へ追加すればOK
オリジナルは削除する。