panda大学習帳外伝

勝利の方程式の解き方。

メインページ | panda大学習帳 | 第三倉庫(仮) | 用語集📒 | 本サイトについて | プライバシーポリシー


OpenVPNのためのSELinuxポリシーを変更する際にポリシー名を”openvpn”にしたところ、変更に失敗した件。

最終更新日: Sun Dec 6 13:10:51 2020 +0900

はじめに

panda大学習帳のWebサーバのFedoraのバージョンを32に変更してしばらくたってからのこと。

スマホから上記サーバにログインしてipコマンドを実行してみたところ…

[panda@pandanote.info ~]$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
(中略)
4: ens5: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 9c:a3:ba:05:2e:bb brd ff:ff:ff:ff:ff:ff
    altname enp0s5
( ゚д゚) ・・・

なんか、OpenVPN用のインタフェースがいつの間にか起動しなくなっていたようです。

そこで、なんでそうなるのか原因を調べつつ、OpenVPNサーバが起動するように再度設定を行うこととしました。

スポンサーリンク

ログファイルの確認

問題が発生したときにはまずログの確認です。

まず、/var/log/messagesの中身を確認します。

すると…

Jun 21 00:00:00 pnr systemd[1]: Starting OpenVPN service for server...
Jun 21 00:00:01 pnr audit[1074387]: AVC avc:  denied  { write } for  pid=1074387 comm="openvpn" name="openvpn-status.log" dev="dm-0" ino=17093069 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:openvpn_etc_t:s0 tclass=file permissive=0
Jun 21 00:00:01 pnr systemd[1]: openvpn-server@server.service: Main process exited, code=exited, status=1/FAILURE
Jun 21 00:00:01 pnr systemd[1]: openvpn-server@server.service: Failed with result 'exit-code'.

いきなりビンゴのようです!!

SELinuxに邪魔されているようです…

audit2allowでポリシーファイルを作成

ここまでの作業はソファに寝つつ、スマホ(Zenfone4(ZE554KL))を使って作業していましたが、ここからは複雑なコマンドを入力せねばならないので、PCの前に移動です。

↑がここからの作業を行うPC(端末)になります。

うまくいかなかった例

早速、root権限で以下のコマンドを実行です。

「これにて一件落着!!」と思われたのですが…

[root@pandanote.info panda]# grep avc /var/log/audit/audit.log | audit2allow -M openvpn
[root@pandanote.info panda]# semodule -i openvpn.pp
libsemanage.semanage_direct_install_info: Overriding openvpn module at lower priority 100 with module at priority 400.
Failed to resolve typeattributeset statement at /var/lib/selinux/targeted/tmp/modules/400/openvpn/cil:1
semodule:  Failed!

設定に失敗してしまいました。

初めて見るエラーメッセージですね。

うまくいった例

失敗した原因を追究するために、Google先生にお伺いを立ててみます。

すると、「既にあるポリシーと同じ名前のポリシーを使おうとするとエラーになるよ。」というありがたい情報がありました。

そこで、root権限でポリシー名を変更し、再度以下のコマンドを実行してみました。

[root@pandanote.info panda]# grep avc /var/log/audit/audit.log | audit2allow -M openvpn_pandanote
[root@pandanote.info panda]# semodule -i openvpn_pandanote.pp

エラーメッセージが表示されず、コマンドが終了していきました。

動作の確認

/var/log/messagesを見る限り、OpenVPNはsystemdで起動されるもののようですので、ちょっと待ってから、ipコマンドを実行してみると…

[root@pandanote.info panda]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
(中略)
4: ens5: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 9c:a3:ba:05:2e:bb brd ff:ff:ff:ff:ff:ff
    altname enp0s5
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
    link/none
    inet 192.168.ppp.qqq peer 192.168.ppp.rrr/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::7b0d:10d4:1789:6eb4/64 scope link stable-privacy
       valid_lft forever preferred_lft forever

(一部改変しています。)

OpenVPN用のインターフェースが(再び)有効になりました!! 😀

pingも通るようです。



まとめ

audit2allowコマンドの引数に指定したポリシー名が既存のものと被るのは想定外だったので、以後気をつけます。

参考文献

リンク

OpenVPN設定外伝: 設定でハマったところn選 | Fedora31からFedora32へのupgrade – WordPressまわりでちょっと作業が必要だった件。 | メインページ | panda大学習帳 | 第三倉庫(仮) | 用語集📒 | 本サイトについて | プライバシーポリシー


スポンサーリンク