OpenVPNとSELinuxのお話

OpenVPNの使用ポートをデフォルトから変更して起動しようとすると失敗。

なんで?と思ってOpenVPNのログを見ると

TCP/UDP: Socket bind failed on local address [undef]: Permission denied

なんかパーミッションエラー・・・

Socket bindでパーミッション・・・? と考えること数分。
SELinuxが有効のままということに気付いた。

オーソドックスに「SELinuxを無効」–> 「OpenVPN起動」 –> \(^o^)/ ・・・

これじゃぁおもしろくない。
よりセキュリティを高く運用するためには、SELinuxが有効のままのほうがいい。

というわけで、まずはSELinuxのポリシーで許可されているポートを検索。

# semanage port -l | grep openvpn
bash: semanage: コマンドが見つかりません

・・・orz・・・

CentOS 6からはSELinux用のコマンドラインツールであるsemanageは別途インストールが必要。
では必要なパッケージを探す。

# yum provides /usr/sbin/semanage
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
policycoreutils-python-2.0.83-19.24.el6.x86_64 : SELinux policy core python utilities
Repo : base
Matched from:
Filename : /usr/sbin/semanage
policycoreutils-python-2.0.83-19.24.el6.x86_64 : SELinux policy core python utilities
Repo : installed
Matched from:
Other : Provides-match: /usr/sbin/semanage

こんな感じで出てくるので、「policycoreutils-python」が必要ということがわかる。
で、さくっとインストール。

# yum -y install policycoreutils-python

インストールできたら、再度挑戦!

# semanage port -l | grep openvpn
openvpn_port_t tcp 1194
openvpn_port_t udp 1194

やっぱり制限されてましたね。
で、ポートを追加したい場合は以下のような感じでコマンドを実行。

# semanage port -a -t openvpn_port_t -p udp 11194
(少し時間がかかりますが、焦らず待ちましょう・・・)

再度SELinuxのポリシーで許可されているポートを検索。

# semanage port -l | grep openvpn
openvpn_port_t tcp 1194
openvpn_port_t udp 11194, 1194

この例の場合、udp 11194 が追加されているのがわかるはず。

最後にOpenVPNを再起動して、正常に起動することを確認。

コメントを残す