let’s encryptの定期更新

Arch Linuxでは、標準ではcronがインストールされていない。
cronieまたはfcronをインストールすればよいが、標準にしたがって、timerで、let’s encryptの定期更新。

# cd /etc/systemd/system
# vi certbot.timer
[Unit]
Description=Run certbot on 2nd day bimonthly
[Timer]
OnCalendar=*-01,03,05,07,09,11-02 03:00:00
RandomizedDelaySec=60min
Persistent=true
[Install]
WantedBy=timers.target

# vi certbot.service
[Unit]
Description=bimonthly certbot
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew –quiet –agree-tos –max-log-backups 9

# systemctl start certbot.timer
# systemctl status certbot.timer
# systemctl enable certbot.timer
# systemctl list-timers –all

ログは、logrotateではなく自前で管理しており、 /var/log/letsencrypt/に1000までログができるので、オプションで制限する。
ヘルプ表示は、certbot -h all。
強制実行で確認する。
# systemctl start certbot.service

3か月前には更新できたcertbot renewで以下のエラーが発生する。
Attempting to renew cert (domain.name.com ) from /etc/letsencrypt/renewal/domain.name.com.conf produced an unexpected error: Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/domain.name.com/fullchain.pem (failure)

解決のために、/etc/httpd/conf/extra/httpd-vhosts.confを編集して、以下を追加。
<VirtualHost:80>
ServerName domain.name.com
</VirtualHost>

/etc/httpd/conf/httpd.confを編集して、rewriteモジュールをコメントアウト。
LoadModule rewrite_module modules/mod_rewrite.so

# httpd -t ; syntax check
# systemctl restart httpd
# certbot renew –dry-run; 動作確認
# stemctl daemon-reload; ファイルを修正した場合

いつの間にか期限前30日だと更新されない設定になったので、2か月ごとの更新だと期限切れになるので、強制更新に変更。
/etc/systemd/system/certbot.serviceを変更。
ExecStart=/usr/bin/certbot renew –force-renewal –quiet –agree-tos –max-log-backups 9

shadowsocks-libev

shadowsocksのインストールは簡単だが、obfsを使えない。shadowsocksRは標準パッケージがない。
libev+simple-obfsに挑戦。

# pacman -S shadowsocks-libev simple-obfs

サービスファイルを作成
# cat > /etc/systemd/system/shadowsocks-libev.service
[Unit]
Description=Shadowsocks-libev Default Server Service
Documentation=man:shadowsocks-libev(8)
After=network.target
[Service]
Type=simpleEnvironment
File=/etc/sysconfig/shadowsocks-libev
User=nobody
Group=nobody
LimitNOFILE=32768
ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

設定ファイルを作成
# mkdir /etc/shadowsocks
# cat > /etc/shadowsocks-libev/config.json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“local_port”:1080,
“password”:”passpass”,
“timeout”:300,
“method”:”chacha20-ietf”,
“plugin”: “obfs-server”,
“plugin_opts”: “obfs=tls”
}

サービスファイルを修正したら、リロード
# systemctl daemon-reload
# systemctl start shadowsocks-libev
# systemctl enable shadowsocks-libev

アンドロイドのクライアントをインストール
Shadowsocks offered by Max Lv
Simple Obfuscation offered by Max Lv

linuxのクライアントでは、ss-localがsocks5 proxyとなる。
# ss-local -c config.json -v
設定は、サーバーとほぼ同じでよいが、”plugin”: “obfs-local”とプラグインを変える。
seamonkeyのEdit/Preference/Advances/Proxies/を開き、
Manual poxy configurationを選び、Advancedを開き、
Socks Proxy: localhost, Port: 1080を入力し、
Socks v5とUse for resolving hostnameを選ぶ。

ssh over shadowsocksの場合は、ss-tunnelを使ってポートフォワード。
# ss-tunnel -c config.josn -v -L server.com:22
# ssh -p 1080 user@localhost
複数のサーバと接続するとサーバ情報が一致しないのでエラーとなり接続できない。~/.ssh/known_hostsの該当するサーバを削除するか、ssh -o ‘StrictHostKeyChecking no’で接続する。

ブラウザとsshだけならこれでよいが、本格的に使うなら、ss-redirとiptablesで設定が必要。