Roundcubeのアップデート

以前、Roundcubeのインストール記事を書きましたが手動アップデートが面倒なのでUbuntuのレポジトリのパッケージでアップデートしました。

まずデータベースの設定を次のようにします。(config.inc.phpの指示通りにします)

dpkg-reconfigure roundcube-core

データーベースのセットが終わったらhttp://<roundcube host>/installerにアクセスしてsanity checkをします。ただしデータベースは除きます。つぎの設定はダブっているかも知れませんが参考に載せておきます。メールサーバとデーターベースが同じ場合<IP>部分はlocalhostとします。

$ mysql -u root -p

mysql> CREATE DATABASE roundcubemail;
mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcube'@'<IP>' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON client_data.* TO 'roundcube'@'<IP>'IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;  
mysql> quit
$ mysql -u roundcube -h <IP> -p roundcubemail < /usr/share/webapps/roundcube/SQL/mysql.initial.sql

メールのチェックしたところジャンクメール扱いになっていました。メールサーバの再設定が必要ですがそのうちやるつもりです。

X-Microsoft-Antispam-Mailbox-Delivery: abwl:0;wl:0;pcwl:0;kl:0;iwl:0;dwl:0;dkl:0;rwl:0;ucf:0;jmr:0;ex:0;auth:1;dest:J;OFR:SpamFilterAuthJ;ENG:(5062000261)(5061607266)(5061608174)(4900095)(4920089)(6375004)(4950130)(4990090)(9140004);RF:JunkEmail;

OpenWrtの証明書を作成する

必須ではないもののOpenWrtのダッシュボードのSSL化に挑戦してみました。お手軽ツールのXCAでルート証明及びサーバ証明書を作ってインストールしてみましたがだめなようです。PCで作った鍵と証明書をダッシュボードのuHTTPdから’Remove configuration for certificate and key’ボタンを押してすでにある証明書&鍵を消してインストールしますscp等使ってインストールします。鍵をDERに変換してないとWWWサーバが死にます。 さらにブラウザから確認してみると証明書は有効だがセキュアじゃないそうです。

インストール

opkg update && opkg install openssl-util luci-app-uhttpd luci-ssl-openssl

失敗例
正しい例

追記:

FreeRadiusで作った証明書をベースに作成してみました。ChromeではだめでしたがFirefoxではうまくいきました。CAがFreeRadiusのままですがこれもテンプレートを使って書き換えれば済みます。でも面倒なのでそのまま使います。CAはブラウザにもインストールしておきました。

openssl rsa -in gateway.luci.openwrt.pem -outform DER -out gateway.luci.openwrt.key
cat gateway.luci.openwrt.crt ca.crt > gateway.luci.openwrt.chain.crt
openssl verify -CAfile ca.crt gateway.luci.openwrt.chain.crt

成功したのでこれをXCAのテンプレートとして再度XCAで作成しました。

Certification Authorityの設定:

countryName: JP
stateOrProvinceName: Somewhere
localityName: Unknown
organizationName: OpenWrt
commonName: OpenWrt Certificate Authority
emailAddress: admin@openwrt
X509v3 Basic Constrains(Critical): Certification Authority
Key identifier: Subject Key Identifier, Authority Key Identifier
X509v3 Key Usage: n/a
X509v3 Extended Key Usage: n/a

Server Certificateの設定:

commonName: gateway.luci.openwrt
X509v3 Basic Constrains(Critical): Not defined
Key identifier: Subject Key Identifier, Authority Key Identifier
X509v3 Subject Alternative Name: DNS:gateway.luci.openwrt, IP:192.168.1.1
X509v3 Key Usage(Critical): Digital Signature, Key Encipherment
X509v3 Extended Key Usage: TLS Web Server Authentication, Tls Web Client Authentication
Chrome
Firefox

参考:

OpenWrtでWeb Proxyをセットアップする(NEW)

以前OpenWrtでWeb Proxyサーバのセットアップの記事を書きましたが、VPNをセットアップしたら一部のサイトで問題があり、Webプロキシを導入してみました。基本的にTorのときと考え方は同じです。Webプロキシを挟むことで通信がスムーズになります。

一番良いのはsquidですがマシンパワーとストレージが必要なので選択肢から外れます。のこりはTinyproxyとPolipoです。先日、TorのセットアップでPolipoを入れましたが思いのほか快適に動作します。Tinyproxyはpsで見るとプロセスがちょっとあり過ぎでできれば遠慮したい感じです。

21867 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
21868 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
21869 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
21890 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
21892 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
21893 nobody    4624 S    /usr/sbin/tinyproxy -c /var/etc/tinyproxy.conf
...

それでPolipo一択となりセットアップしてみました。

/etc/config/polipo

config polipo 'daemon'
        option daemonise '1'
        option pidFile '/var/run/polipo.pid'

config polipo 'general'
        option enabled '1'
        option proxyAddress '0.0.0.0'
        option chunkHighMark '1048576'
        option dnsQueryIPv6 'happily'
        option dnsUseGethostbyname 'reluctantly'
        list allowedClients '192.168.1.0/26'
        list allowedClients '192.168.2.0/25'
        list allowedClients '10.8.0.0/24'
        option logSyslog '1'

config polipo 'cache'

config polipo 'pmm'

(※)syslogをインストールしないとログ出力しません。ただしこの設定をオフにするとエラーがあると標準出力します。

Firefoxの設定

Network Settings->Configure Proxy Access to the Internet->Manual proxy configuration

  • HTTP Proxy (PolipoのWeb Proxyのアドレス)Port: 8123
  • Use this proxy server for all protocolsをチェック
Polipo使用前
Polilo起動時

Polipoの状況見るにはブラウザからアクセス出来ます。

http://(PolipoのIP):8123/polipo/status?
http://(PolipoのIP):8123/polipo/config?

Tor + PolipoをAndroid フォンに導入する

以前Torをルーターに入れてましたが接続があまりよくありませんでした。Torはかなりリソースを消費するのでルーターには荷が重すぎます。

OpenWrtのアップグレードのついでに入れてみたのですが使える状況にありませんでした。そこで考えをめぐらしてみると、以前Windows PhoneにAndroidを入れたことを思い出して、ホコリを被っているNokia 520にTorを入れてみることにしました。一昔のスマホでもルーターの性能を遥かに上回る能力があり十分期待に答えてくれそうです。ただし弱点はネットワークのパーミッション絡みでインストールが難しいのと接続方法が限られることです。

準備
AndroidにCoreElecでも使ったentwareをインストールします。方法は次のサイトの通りでOKですが、sshアプリがインターネットを参照できなかったので、adb shellで作業します。あるいは以前私が設定した方法、「Android: SSHデーモンを有効にする」でも可です。インストール先は私の場合は/dataにしています。

Torのインストール
環境が少しおかしかったので次のように追加して変更しました。
/opt/etc/init.d/rc.func

export PATH=$PATH:/opt/bin:/opt/sbin
export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib

まず作業環境を整えてからTorPolipoをopkgパッケージマネージャーを使って入れていきます。

cd /opt/etc
. ./profile
opkg update && opkg install polipo tor

各設定ファイルを編集します。次のサイトを参考に設定しています。

私の設定例です。

/opt/etc/polipo/config

proxyAddress = "0.0.0.0"    # IPv4 only
allowedClients = 127.0.0.1, 192.168.10.0/25
socksParentProxy = "127.0.0.1:9050"
socksProxyType = socks5

/opt/etc/tor

SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.
#SOCKSPort 192.168.10.3:9100 # スマホのアドレスです。テスト用の設定です
SOCKSPolicy accept 192.168.10.0/25
SOCKSPolicy accept 127.0.0.1/32
SOCKSPolicy reject *
DataDirectory /data/var/lib/tor
DNSPort 53

テスト
polipotorを立ち上げて参考のサイト同様に接続のテストをしてみます。

1.Torの接続テスト

curl --socks5 127.0.0.1:9050 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

2.他のPCからTor接続テスト

curl --socks5 192.168.10.3:9100 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

3.Tor DNSサーバの接続テスト

nslookup welcome.opendns.com localhost

結果:

root@fame:/ # nslookup welcome.opendns.com
Server: 8.8.4.4
Address 1: 8.8.4.4 google-public-dns-b.google.com

Name: welcome.opendns.com
Address 1: 146.112.59.9

root@fame:/ # nslookup welcome.opendns.com localhost
Server: 127.0.0.1
Address 1: 127.0.0.1 localhost

Name: welcome.opendns.com
Address 1: 146.112.59.9

4.HTTPプロキシのpolipoの接続テスト
アンドロイド機から

curl --proxy 127.0.0.1:8123 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

リモートPCから

curl --proxy 192.168.10.3:8123 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

自動起動
次のファイルに755パーミッションつけてブート時に自動起動したいプログラムを書きます。
/data/local/userinit.sh

#!/system/bin/sh
sleep 3
/system/bin/mount -o rw,remount /
sleep 3
mkdir -p /opt /bin
sleep 1
ln -sf /system/bin/sh /bin/sh
sleep 1
mount --bind /data/entware /opt
sleep 3
/system/bin/mount -o ro,remount /
sleep 3
daemon_list='S28polipo S35tor S60netdata'
for n in $daemon_list; do
    sleep 3
    [ -f /opt/etc/init.d/$n ] && /opt/etc/init.d/$n start
done

ブラウザの設定

Manual proxy configuration

  • HTTP Proxy 192.168.10.3 Port:8123
  • SSL Proxy  192.168.10.3 Port:8123
  • FTP Proxy 192.168.10.3 Port:8123
IP Details for 185.104.120.3

設定をもとに戻すとこうなります。

DNSサーバの変更
スマホのwifiのマニュアル設定でDNSサーバを変更してもスマホのみでシステムのDNSサーバは変わりません。 rootでアクセスしてもパーミッションの関係で修正できません。Solid Explorer File Managerというものを入れて/etc/resolv.confを編集するとうまくいきました。’nameserver 127.0.0.1‘とします。Tor DNSがインストールされているのでそれをデフォルトとします。

1|root@fame:/ # nslookup welcome.opendns.com
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost

Name:      welcome.opendns.com
Address 1: 146.112.59.9

エキストラ

– WIFIの接続問題

放っておくとWiFiが切れるので次のアプリを入れてみました。

-接続の可視化

entwareでiftopをインストールします。

– 手持ちの機種にも入れてみる

いちおう出来るみたいです。

– Tor on Android

アンドロイドのみなら試してませんがこちらの方が簡単のようです。

-Desktopの場合
ufwで調整してみたところうまくいきませんでした。/etc/ufw/before.rulesに設定を次のように追加してみました。(*filterの前におきます)

*nat 
:PREROUTING ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A OUTPUT -p udp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:9053 
-A OUTPUT -p tcp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:9053 
COMMIT

あまりiptablesについて分かっていないのでufwの設定は諦めてシェルスクリプトで対応しました。

#!/bin/sh
iptables -t nat -A OUTPUT -p udp -d 127.0.0.1  --dport 53 -j DNAT --to-destination 127.0.0.1:9053
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1  --dport 53 -j DNAT --to-destination 127.0.0.1:9053

なぜTorのDNSポートを9053にしたかというとroot以外は1024以下のポートを割り当てることが出来ないからです。それでポートフォワーディングしてるわけですがufwではなぜか出来ませんでした。なにか設定方法があると思いますが調べる気力もないのでそのままです。

OpenWrtでWPA2-Enterprise(EAP-PEAP/MSCHAPv2)の構築(NEW)

OpenWRT 18.06.1になって設定が大幅に変わり修正が必要になりますが、性能が大幅に強化されて結果的に良くなりました。以前トラベルルータにWPA2-Enterprise(EAP-PEAP/MSCHAPv2)を構築したのですが、セキュリティの問題が若干残されていました。今回セットアップしたところ不具合は解消されていて、セットアップも滞りなく済みました。

このコンパクトなルータにFreeRadiusを入れてWPA2-Enterpriseを使えるようにしてセキュリティを強化します。コンパクトさゆえにいろいろと制約がありファームウェアをカスタマイズすることから始めます。OpenWrtの標準仕様はwpad-miniでWPA2が使えません。そこでフルバージョンのwpadパッケージをインストールするのですが、squashfsに組み込まれているためwpad-miniを消すことが出来ません。となると限りあるストレージを余計に使ってしまいます。そこでパッケージを最適化してファームウェアを作り直します。

FreeRADIUSのセットアップに必要なパッケージ

まず、FreeRADIUSのパッケージをインストールします。

opkg update
opkg install freeradius3 freeradius3-common freeradius3-democerts freeradius3-mod-always freeradius3-mod-attr-filter freeradius3-mod-chap freeradius3-mod-detail freeradius3-mod-eap freeradius3-mod-eap-mschapv2 freeradius3-mod-pap freeradius3-mod-eap-peap freeradius3-mod-eap-tls freeradius3-mod-exec freeradius3-mod-expiration freeradius3-mod-expr freeradius3-mod-files freeradius3-mod-digest freeradius3-mod-logintime freeradius3-mod-unix
opkg install freeradius3-mod-mschap freeradius3-mod-passwd freeradius3-mod-preprocess freeradius3-mod-radutmp freeradius3-mod-realm freeradius3-utils

(※注:13 FEB 2019)現在、一部パッケージが欠損しているので旧バージョンからlibtalloc_2.1.7-2_mipsel_24kc.ipkをインストールします。

次にopensslコマンドを使えるようにパッケージをインストールします。またWPAエンタープライズを使用するにはwpadが必要です。

opkg install openssl-util libopenssl
opkg remove wpad-mini
opkg install wpad

秘密鍵と証明書のインストール

opensslの使い方は過去の記事にいくつか書きましたが、今回は検索したサイトを参考に作成してみました。

openssl ecparam -out ecca.param -name secp384r1
openssl req -nodes -newkey ec:ecca.param -days 3650 -x509 -sha256 -keyout ecca.key -out ecca.crt
openssl req -nodes -newkey ec:ecca.crt -days 3650 -sha256 -keyout serverec.key -out serverec.csr

mkdir ./demoCA/
mkdir ./demoCA/newcerts
touch ./demoCA/index.txt
echo 01 > ./demoCA/serial

openssl ca -extensions v3_ca -days 3650 -out serverec.crt -in serverec.csr -cert ecca.crt -keyfile ecca.key
cat serverec.crt serverec.key > serverec.pem
openssl dhparam -out dhparam.pem 2048
cp ecca.crt serverec.pem dhparam.pem /etc/freeradius3/certs

秘密鍵と証明書をインストールしたら証明書のテストをしてみます。

openssl x509 -in serverec.crt -text
openssl verify -CAfile ecca.crt serverec.pem

Freeradiusの設定

/etc/freeradius3/mods-available/eap

eap {
        default_eap_type = peap
        timer_expire     = 60
        ignore_unknown_eap_types = no
        cisco_accounting_username_bug = no
        max_sessions = ${max_requests}
        tls-config tls-common {
                private_key_file = ${certdir}/serverec.pem
                certificate_file = ${certdir}/serverec.pem
                ca_file = ${cadir}/ecca.crt
                dh_file = ${certdir}/dhparam.pem
                ca_path = ${cadir}
                cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA256:ECDHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;"
                ecdh_curve = "secp384r1"
                cache {
                        enable = no
                        max_entries = 255
                }
                verify {
                        tmpdir = /tmp/run
                        client = "/usr/bin/openssl verify -CAfile $ca_file %{TLS-Client-Cert-Filename}"
                }
                ocsp {
                        enable = no
                        override_cert_url = yes
                        url = "http://127.0.0.1/ocsp/"
                }
        }
        peap {
                tls = tls-common
                default_eap_type = mschapv2
                copy_request_to_tunnel = yes
                use_tunneled_reply = yes
                virtual_server = "inner-tunnel"
        }
        mschapv2 {
                send_error = no
        }
}

/etc/freeradius3/mods-available/mschap

mschap {
        use_mppe = yes
        require_encryption = yes
        require_strong = yes
}

/etc/freeradius3/clients.conf

client localhost {
        ipaddr = 127.0.0.1
        proto = *
        secret = testing123
        require_message_authenticator = yes
        shortname = localhost
}

/etc/freeradius3/proxy.conf

proxy server {
        default_fallback = no
}
home_server localhost {
        type = auth
        ipaddr = 127.0.0.1
        port = 1812
        secret = testing123
        response_window = 20
        zombie_period = 40
        revive_interval = 120
        status_check = status-server
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        max_outstanding = 65536
        coa {
                irt = 2
                mrt = 16
                mrc = 5
                mrd = 30
        }
        limit {
              max_connections = 16
              max_requests = 0
              lifetime = 0
              idle_timeout = 0
        }
}
home_server_pool my_auth_failover {
        type = fail-over
        home_server = localhost
}
realm example.com {
        auth_pool = my_auth_failover
}
realm LOCAL {
}

/etc/freeradius3/radiusd.conf

prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = /var/log
raddbdir = /etc/freeradius3
radacctdir = /var/db/radacct
name = radiusd
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir   = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib/freeradius3
pidfile = ${run_dir}/${name}.pid
correct_escapes = true
max_request_time = 30
cleanup_delay = 5
max_requests = 16384
hostname_lookups = no
log {
        destination = files
        colourise = yes
        file = ${logdir}/radius.log
        syslog_facility = daemon
        stripped_names = no
        auth = no
        auth_badpass = no
        auth_goodpass = no
        msg_denied = "You are already logged in - access denied"
}
checkrad = ${sbindir}/checkrad
security {
        allow_core_dumps = no
        max_attributes = 200
        reject_delay = 1
        status_server = yes
}
proxy_requests  = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
        start_servers = 5
        max_servers = 32
        min_spare_servers = 3
        max_spare_servers = 10
        max_requests_per_server = 0
        auto_limit_acct = no
}
modules {
        $INCLUDE mods-enabled/
}
instantiate {
}
policy {
        $INCLUDE policy.d/
}
$INCLUDE sites-enabled/

/etc/freeradius3/mods-config/files/authorize (users -> mods-config/files/authorize)

"testuser" Cleartext-Password := "pass123"

/etc/freeradius3/sites-available/default

server default {
authorize {
        preprocess
        mschap
        suffix
        eap {
                ok = return
        }
        expiration
        logintime
}
authenticate {
        Auth-Type MS-CHAP {
                mschap
        }
        eap
}
preacct {
        preprocess
        acct_unique
        suffix
        files
}
accounting {
        attr_filter.accounting_response
}
session {
        radutmp
}
pre-proxy {
}
post-proxy {
        eap
}
}

/etc/freeradius3/sites-available/inner-tunnel

server inner-tunnel {
listen {
       ipaddr = 127.0.0.1
       port = 18120
       type = auth
}
authorize {
        mschap
        suffix
        update control {
                &Proxy-To-Realm := LOCAL
        }
        eap {
                ok = return
        }
        files
        expiration
        logintime
}
authenticate {
        Auth-Type MS-CHAP {
                mschap
        }
        eap
}
session {
        radutmp
}
pre-proxy {
}
post-proxy {
        eap
}
} # inner-tunnel server block

LD_LIBRARY_PATH=/usr/lib/freeradius3 radiusd -Xでテストしてみます。

OpenWrtの設定

/etc/config/wireless

config wifi-iface
        option device 'radio0'
        option mode 'ap'
        option ssid 'OpenWrt'
        option network 'lan'
        option encryption 'wpa2+ccmp'
        option auth_server '127.0.0.1'
        option auth_secret 'testing123'
        #option acct_server '127.0.0.1'
        #option acct_secret 'testing123'
        option auth_port '18120'

ネットワークを再起動してアクセスします。

この設定例でアクセスするユーザー/パスワードはtestuser/pass123です。CAがなくても動きますが違うCAを割り当てるとエラーになります。

(7) Received Access-Request Id 174 from 127.0.0.1:35223 to 127.0.0.1:1812 length 215
(7)   User-Name = "testuser"
(7)   Called-Station-Id = "AA-BB-CC-DD-EE-88:OpenWrt"
(7)   NAS-Port-Type = Wireless-802.11
(7)   Service-Type = Framed-User
(7)   NAS-Port = 1
(7)   Calling-Station-Id = "AA-BB-CC-DD-EE-BD"
(7)   Connect-Info = "CONNECT 54Mbps 802.11g"
(7)   Acct-Session-Id = "DF7CBB543A644BB1"
(7)   Attr-186 = 0x000fac04
(7)   Attr-187 = 0x000fac04
(7)   Attr-188 = 0x000fac01
(7)   Framed-MTU = 1400
(7)   EAP-Message = 0x0219001119800000000715030300020230
(7)   State = 0xac4603eaae5f1a4f6f28de953f47432f
(7)   Message-Authenticator = 0x658b7dd98aa402d4019b914b4fe15e74
(7) session-state: No cached attributes
(7) # Executing section authorize from file /etc/freeradius3/sites-enabled/inner-tunnel
(7)   authorize {
(7)     [chap] = noop
(7)     [mschap] = noop
(7) suffix: Checking for suffix after "@"
(7) suffix: No '@' in User-Name = "testuser", looking up realm NULL
(7) suffix: No such realm "NULL"
(7)     [suffix] = noop
(7)     update control {
(7)       &Proxy-To-Realm := LOCAL
(7)     } # update control = noop
(7) eap: Peer sent EAP Response (code 2) ID 25 length 17
(7) eap: Continuing tunnel setup
(7)     [eap] = ok
(7)   } # authorize = ok
(7) Found Auth-Type = eap
(7) # Executing group from file /etc/freeradius3/sites-enabled/inner-tunnel
(7)   authenticate {
(7) eap: Expiring EAP session with state 0xac4603eaae5f1a4f
(7) eap: Finished EAP session with state 0xac4603eaae5f1a4f
(7) eap: Previous EAP request found for state 0xac4603eaae5f1a4f, released from the list
(7) eap: Peer sent packet with method EAP PEAP (25)
(7) eap: Calling submodule eap_peap to process data
(7) eap_peap: Continuing EAP-TLS
(7) eap_peap: Peer indicated complete TLS record size will be 7 bytes
(7) eap_peap: Got complete TLS record (7 bytes)
(7) eap_peap: [eaptls verify] = length included
(7) eap_peap: <<< recv TLS 1.2  [length 0002] 
(7) eap_peap: ERROR: TLS Alert read:fatal:unknown CA
(7) eap_peap: ERROR: TLS_accept: Failed in unknown state
(7) eap_peap: ERROR: SSL says: error:14094418:lib(20):func(148):reason(1048)
(7) eap_peap: ERROR: SSL_read failed inside of TLS (-1), TLS session failed
(7) eap_peap: ERROR: TLS receive handshake failed during operation
(7) eap_peap: ERROR: [eaptls process] = fail
(7) eap: ERROR: Failed continuing EAP PEAP (25) session.  EAP sub-module failed
(7) eap: Sending EAP Failure (code 4) ID 25 length 4
(7) eap: Failed in EAP select
(7)     [eap] = invalid
(7)   } # authenticate = invalid
(7) Failed to authenticate the user
(7) Using Post-Auth-Type Reject
(7) Post-Auth-Type sub-section not found.  Ignoring.
(7) Delaying response for 1.000000 seconds

エキストラ:

openvpnのインストール

opkg install openvpn-mbedtls

ダッシュボードのopenvpnの設定はバグがあって使えないので/etc/openvpnに設定を一式入れます。あとはデーモンを起動するだけです。

参考:

OpenWRT 18.06.1へアップグレード

今まで使っていたOpenWRT  (Chaos Calmer 15.05.1)のアップデートの必要性は感じていたのですが、快適に動いていたのでなかなか踏み切れずにいました。アップグレードするとかなりの確率で調整に時間がかかるからです。今回のアップグレードで学んだことは、クリーンインストールすることでした。というのも設定を引き継いでアップグレードしたところルーターの動きが怪しくなって文鎮化しました。そうなるとセーフモードという奥の手を使って直さなければならず余計な手間がかかります。

(※注)17 FEB 2019現在OpenWRT 18.06.2です。

今回のアップグレードで変えたこと

ネットワークアドレスの変更

ネットワークアドレスを27から26に拡張しました。これで62台分のIPが確保できました。2年前は30台分のIPで十分だと考えていましたが、最近のいろんな製品がネットワーク化してアドレスが足りなくなってきたので、アドレス空間を倍に増やしました。将来的にはタップモードでVPN接続して外部からプライベートLANとして使うような余裕のある使い方を考えています。

IKEv2(strongSwan)とWPA2(FreeRadius)の証明書の更新

3年の期限でセットアップしてから2年経過して1年を残すのみとなり、ついでに更新しました。今回はどちらともルート証明書の有効期間を10年、クライアントとサーバは3年の有効期限を設定しました。ルート証明書の更新は手間かかるので10年位がちょうどよいと思います。クライアントとサーバーはルート証明書&鍵があれば楽に増産できます。

ちょっと嵌ったことは、ルーターのIKEv2の鍵長が4Kだと動きません。2Kにしています。Windows 7は問題なくikev2をインストールできました。mmcの画面で、最初にPersonalに鍵と証明書のPKCS#12のコンボセットをインストールしてそこからルート証明書をドラッグしてルート証明書フォルダーに移動したほうが簡単です。macOSはApple Configurator2を使ってインストールします。それをテンプレート化して使い回しが出来ます。Linuxはユーザ鍵の形式とパスワード化がディストリビューションごとに微妙に異なっていてちょっと面倒です。

メッシュネットワークの再構築

パッケージを見ていたらwpad-meshをいうものがあって、supplicantでセキュリティが構築できると考えて、いろいろ弄ってみたところ無駄でした。おそらく新しい機種がでSAE supportがあるものでないと使えないようです。私の機種では動かなかったので従来通りtincを使ってセキュリティ確保しています。本来なら10〜20MB/s出るところ1MB/sしか出ませんが安定しています。

ThinkPadのドライバーのアップデート

つねづね遅いと思ってて検索したらオプションが2つありました。そこでWIFIドライバを入れ替えました。b43-fwcutterからbroadcom-sta-dkmsにしてリブートします。

b43-fwcutterを使った場合
broadcom-sta-dkmsを使った場合

一番上の項目みると速度が5倍以上違います。

 


参考:
Broadcom wireless

 

 

Music Player Daemon(MPD)とMPC

メディアサーバとしてよく知られているものにEmbyとPlexがあります。これらのメディアサーバは動画はもちろん音楽再生もできますが、普段音楽を聴くならもっとお手軽に使えたほうがいいのでMPDをインストールしてみます。MPDは初期のLinuxの時代から馴染みのある古いアプリケーションです。ほかのミュージックプレーヤーとの違いはMPDはデーモン、すなわちサーバーとして使います。サーバーということは当然、クライアント用アプリケーションも必要になります。mpdのインストールが済んだら/etc/mpd.confを編集します。

今回、mpdがサーバー機能があるということでネットワークでも使えように設定を進めていきます。

musicディレクトリの設定

music_directory         "/var/lib/mpd/music"

playlistのディレクトリの設定

playlist_directory      "/var/lib/mpd/playlists"

db(データベース)ディレクトリの設定

db_file                 "/var/lib/mpd/tag_cache"

logディレクトリの設定

log_file                "/var/log/mpd/mpd.log"

pidファイルのディレクトリ

pid_file                "/run/mpd/pid"

stateファイルのディレクトリ

state_file              "/var/lib/mpd/state"

user(ユーザ)の設定

user                    "mpd"

上記で設定したディレクトリを作成してはuserが読み書きできるようにパーミッションを変更します。

chown -R mpd: /var/lib/mpd/* /var/log/mpd /var/run/mpd

Ubuntuなどではmpdのgroupがないのでつぎのようになります。ディストリビューションにより設定が微妙に異なります。

chown -R mpd:users /var/lib/mpd/* /var/log/mpd /var/run/mpd

ネットワークの設定はすべてのIPからアクセスできるように設定します。IPアドレスを指定しても良いです。

bind_to_address                 "0.0.0.0"

ネットワークからサーバ検索出来るようにします。

zeroconf_enabled                "yes"
zeroconf_name                   "Music Player"

パスワードを設定します。パスワードを設定しないと第三者から簡単にアクセスされます。

password                       "*pass*@read,add,control,admin"

オーディオ出力の設定はpulseaudioにします。今はalsaは廃れているので選択肢から外しています。

audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "127.0.0.1"             # optional
#       server          "remote_server"         # optional
#       sink            "remote_server_sink"    # optional
}

pulseaudio側でも設定が必要になります。
/etc/pulse/default.pa

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

pulseaudioを再起動します(私の環境では音がならなかったのでリブートしました)

$ pulseaudio --kill
$ pulseaudio --start # または start-pulseaudio-x11 /kde

httpストリーム用に設定します。

audio_output {
        type            "httpd"
        name            "My HTTP Stream"
        encoder         "vorbis"                # optional, vorbis or lame
        port            "8000"
        bind_to_address "0.0.0.0"               # optional, IPv4 or IPv6
#       quality         "5.0"                   # do not define if bitrate is defined
        bitrate         "128"                   # do not define if quality is defined
        format          "44100:16:1"
        max_clients     "0"                     # optional 0=no limit
        always_on       "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
        tags            "yes" # httpd supports sending tags to listening streams.
}

ビジュアル化するためとコントロールで使用する設定です。

audio_output {
    type                    "fifo"
    name                    "my_fifo"
    path                    "/tmp/mpd.fifo"
    format                  "44100:16:2"
}

デーモンを起動にちょっと難があり、ネットワークソケットがうまく扱えなくて再起動のときにエラーが起きるときがあります。

systemctl stop mpd.service
systemctl stop mpd.socket
systemctl disable mpd.socket

としてmpdのソケットを外します。

firewallの設定は80、6600、8000ポートを開けます。ufwの設定例では次のようにルールを追加します。
/etc/ufw/user.rules

-A ufw-user-input -p tcp --dport 80 -j ACCEPT
-A ufw-user-input -p udp --dport 80 -j ACCEPT
-A ufw-user-input -p tcp --dport 6600 -j ACCEPT
-A ufw-user-input -p tcp --dport 8000 -j ACCEPT
-A ufw-user-input -p udp --dport 8000 -j ACCEPT

CoreELEC(LibreELEC)の場合

アドオンでmpdをインストールします。一度起動すると設定ファイルが作成されます。

ディレクトリリスト:

/storage/.kodi/userdata/addon_data/service.multimedia.mpd/config/mpd.conf
/storage/.config/system.d/service.multimedia.mpd.service
/storage/.kodi/userdata/addon_data/service.multimedia.mpd/log/mpd.log

Kodiがalsaデバイスを使っているのでhttpストリーミングのみにしています。

以上でmpdデーモンの設定は完了です。

クライアントはコマンドライン、ターミナル用、GUI用の3タイプが選べます。コマンドラインはmpcを使います。ターミナル、GUIのアプリケーションはいろいろありますが、よく使われるのは、ターミナル用にncmpcpp、GUI用はcantataです。

音楽ファイルを所定の場所にインストールしたらクライアントアプリを立ち上げます。操作方法はプロジェクトのサイトにドキュメントがあるのでそれを見て操作します。音楽データベースの作成、プレイリストの追加をします。これでクライアントの設定は完了です。

ncmpcppではちょっとしたビジュアルモードあり、’8’を押すとビジュアルモードに切り替わります。

つぎにリモートPCからアクセスしてリモートPCに音楽を流してみます。
コマンドラインから

mpc add http://{mpd server}:8000
mpc play

ブラウザからもアクセスできます。VLCプレーヤーなどからはつぎのようにします。

http://{mpd server}:8000/mpd.ogg

逆にリモートPCからサーバーにアクセスする場合、ncmpcppを使います。

ncmpcpp -h {mpd server}

GUIクライアント、cantataの例です。

ympdはWebインターフェースのクライアントです。entwareのパッケージから員インストールします。 mpc add <host>:8000でリモートPCに鳴らすことができます。このうぇbインターフェースのデフォルトポートは8080ですがKodiのポートと重ならないようにずらしています。

CoreELEC2:~/.config/system.d # ympd -h0.0.0.0 --webport 80 --user nobody -w0.0.0.0:8001
MPD Connecting to 0.0.0.0:6600
MPD connected.

トラブルシュート:

$ pulseaudio --kill
$ pulseaudio --start # または start-pulseaudio-x11 /kde

追記:
pulseaudioとの兼ね合いでClient側はユーザ権限でmpdを起動したほうが安定します。
もし音がでなくなったらClient側のmpdを再起動します。


参考:

ウェブサイトをダークモードにする

macOS Mojaveがダークモードになったことに関連してウェブ画面もダークにしないとどうもバランスが悪いということで設定してみました。Firefoxはダークモードもしくはナイトモードのアドオンがあるのですが、できれば使いたくないのでcss/javascriptを追加できるアドオンあるのでインストールしました。

  • Custom Style Script (Inject desired CSS or JS)

このアドオンをインストールしてCSSかJavascriptに追加します。

CSS:

html, img, video{
  -webkit-filter: invert(1) hue-rotate(180deg);
  filter: invert(1) hue-rotate(180deg);
}
body {
  background: black;
}

Javascript:

javascript:!function(d){d.head.appendChild(d.createElement('style')).innerText='html,img,video{-webkit-filter:invert(1)hue-rotate(180deg);filter:invert(1)hue-rotate(180deg)}body{background:#000}'}(document);

URLの欄は”*”にします。

だいたいOKですがYahooの画像が一部反転するのはなぜ?


追記:

通常のサイトをナイトモードもしくはダークモードにするのは反転すればいいという単純な話ではなくデザイン的なセンスが必要のようです。上記のスクリプトだと例外的な不具合がどうしても出てきます。結局、つぎのアドオンをインストールしました。

  • Dark Background and Light Text – Firefox
  • Midnight Lizard – Chrome

CSS scriptによる効果

アドオンによる効果


追記2:

prefers-color-scheme: darkというCSSを策定中のようです。これがすべてもブラウザに対応すればきれいなDark Modeになりそうです


追記3:

ついでにNew Tabページが醜いのでそれもカスタマイズしてみます。Chromeだとスピードダイヤルは消せませんがつぎのオプションが可能です。

  • chrome://flags/#ntp-ui-md
  • chrome://flags/#ntp-icons
  • chrome://flags/#ntp-custom-links
  • chrome://flags/#ntp-backgrounds

Firefoxは設定でスピードダイヤルを消すことができます。


追記4:

ダークモードでQRコードが読み取れないという問題があります。やはりボタン等で切り替える仕組みが必要です。


参考:

(旧)macOSで印刷

Mojaveインストールの総仕上げとして印刷の設定をしました。LinuxのおなじみのCUPSなので設定は同じです。パッケージを探してみたのですが古いものしかありませんが動作はします。私のモノクロレーザープリンターの設定手順です。

Ricoh SP4000のドライバーをダウンロードする。(RPDL IV)

pxlmono、Foomatic-RIPパッケージをインストールする。

GSをインストールする(GSは相性がありGhostscript-9.19が良いらしいのでそれを使いました)

テスト印刷でエラーがあったので調べました。

tail -f /var/log/cups/error_log

sh: gs: command not found

検索してみると次のように編集すると使えるようになります。

/etc/cups/cups-files.conf

sudo launchctl stop org.cups.cupsd

Wineのエクセルは32ビット版CUPSライブラリがないと動かないらしいので、オンラインのMS エクセルを使うと良いでしょう。PDFに変換してそれを印刷します。

 

macOS MojaveをWindows PCにインストール

macOS Mojaveのインストールは前バージョンのHigh Sierraを同じですが、Clover Configuratorが使えなくなっている箇所があり別の方法で設定します。

この新しい設定方法ではグラフィックスとオーディオを設定することができます。この方法でサウンドは出るようになったのですがデュアルディスプレイは残念ながらできませんでした。Intel FB-Patcherというツールを使ってEFIにあるconfig.plistに書き込みます。

書き込みができたらXcodeのplistエディターで編集します。