第3回 SELinuxのお行儀を監視する――MRTG/Nagios編


面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/8/29

 今回から2回にわたり、SELinuxを導入したシステムを監視する際のTipsについて説明しましょう。引き続き、第1回の環境(CentOS 4.4+Plone用にカスタマイズしたSELinux)を基に解説を行います。なお前回まではCentOS 4.4でしたが、現在はyum updateを行ったことによりディストリビューションのバージョンはCentOS 4.5となっています。

 「SELinuxはトラブルの元」は都市伝説です

 ちまたではSELinuxが正常なシステム稼働にあまり良くない影響を及ぼしているという考えが浸透してきており、諸処でLinuxサーバの監視がうまくいっていないときには、「取りあえずSELinuxを無効にしてみてはどうか」という話が出ることがあります。これは果たして本当なのでしょうか?

 そこで今回は、代表的な運用監視ツールであるMRTG(Multi Router Traffic Grapher)やNagiosを取り上げて、本当にSELinuxによりシステムが動作しなくなるのかを検証してみました。今回検証を行ったシステムを図1に示します。

図1 今回検証したシステムの構成

 今回は、すでに監視システムが存在している環境を想定し、SELinuxで保護されているZope/Ploneのマシンを新たに監視対象とするようなケースを考えます。

 結論を先に示すと、今回調べた監視ツール上でCentOS 4.5の設定ファイルどおりに行う限りにおいては、SELinuxが影響を与えるということはありませんでした。ですので、皆さんSELinuxを悪者にしないでくださいね。

 SNMP+MRTGによる監視

 まずシステムの監視といって思いつく代表的なものは、SNMP+MRTGによる監視でしょう。SNMPやMRTGの設定内容などの詳しい説明は、以下の記事を参考にしてください。

【参考記事】
第7回 障害の兆候を見逃さないためのサーバ監視 http://www.atmarkit.co.jp/flinux/rensai/root07/root07c.html

第8回 MRTGによるサーバ監視システムの構築
http://www.atmarkit.co.jp/flinux/rensai/root08/root08a.html

 まず、snmpdやそのほかSNMPのテストのためのツールを使用するために、net-snmpパッケージをインストールしましょう。以下、インストール作業は監視対象となるクライアント側(図1のマシンA)で行います。SELinuxが有効な状態で、rootユーザーで、

# yum install net-snmp*

とすることにより、net-snmpパッケージおよびツール類をまとめてインストールできます。

 SELinuxでのsnmp.confファイルのコンテキストを確認してみましょう。CentOS 4.5では、snmp.confファイルに“snmpd_etc_t”という特別なコンテキストを割り当てています。ls -lZ /etc/snmp/snmp.confの出力結果は、以下のようになります。

[root@plone2 snmp]# ls -lZ /etc/snmp/snmpd.conf
-rw-r--r--  root root system_u:object_r:snmpd_etc_t   /etc/snmp/snmpd.conf

 それではsnmp.confファイルを編集しましょう。今回はlocalhostとmynetworkの2つに分けるため、リスト1のように設定しました。

com2sec local localhost private
com2sec mynetwork 192.168.231.0/24 public
group   MyROGroup    v1          mynetwork
group   MyROGroup    v2c        mynetwork
group   MyRWGroup    v1          local
group   MyRWGroup    v2c        local
view     all                  included     .1 80
view     systemview     included     .1.3.6.1.2.1.1
view     systemview     included     .1.3.6.1.2.1.25.1.1
access MyROGroup     ""       any    noauth   exact   all  none  none
access MyRWGroup     ""       any    noauth   exact   all  all  none
disk / 10000
リスト1 snmp.confファイルの設定

 セキュリティ名local(localhost:127.0.0.1)に対してprivate、セキュリティ名public(192.168.231.0/24)に対してpublicというコミュニティ名の設定を行っています。こちらは適宜環境に合ったものに修正してください。

 snmp.confファイルの編集が終わったら、

# service snmpd start

としてsnmpdを立ち上げてみましょう。“ps axZ”でプロセスのコンテキストを確認すると、snmpd_tというsnmpd専用のドメインで動作していることが分かります。これにより、snmpdに脆弱性が発見された場合でも、被害がほかのドメインに波及しなくなります。

SELinuxが有効の状態
[root@plone2 snmp]# getenforce
Enforcing

---------------------------------------------
snmpdデーモンがsnmpd_tドメインで動作していることが分かる
[root@plone2 snmp]# ps axZ | grep snmp
root:system_r:snmpd_t       19562 ? S      0:00       /usr/sbin/snmpd -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a
リスト2 snmpdが動作しているドメインを確認

 iptablesでパケットフィルタリングを行っている場合には、system-config-securitylevelなどのツールを用いて、必要なNICに対してSNMP/UDPの通信を許可しましょう。実運用環境では、監視セグメント用に個別にNICを用意していると思われますので、そのNICでSNMP/UDPの通信を許可します。

 この状態で、図1の監視サーバからsnmpwalkを用いて監視対象のクライアントにアクセスすると、きちんとMIBツリーの情報を取得できていることが分かります。

[omok@nagios ~]$ snmpwalk -c public -v 2c plone2 system
SNMPv2-MIB::sysDescr.0 = STRING: Linux plone2 2.6.9-55.0.2.EL #1 Tue Jun 26 14:08:18 EDT 2007 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (178694) 0:29:46.94
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: plone2
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (5) 0:00:00.05
SNMPv2-MIB::sysORID.1 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.4 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.6 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.7 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.8 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.9 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module to describe generic objects for network interface sub-layers
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.7 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.8 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.9 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (5) 0:00:00.05
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (5) 0:00:00.05
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (5) 0:00:00.05
リスト3 MIBツリーの情報を取得できていることが確認できる

 SNMP+MRTGの結果

 こうしてsnmpdがクライアントできちんと動作していますので、監視サーバでMRTGを設定し、クライアントの、

  • ネットワークトラフィック
  • CPU使用率
  • メモリ使用率
  • ディスク使用率

をグラフにして出力してみました。

図2 SELinuxをMRTGで監視した結果のグラフ

 結果として、SELinuxをクライアント上で有効にしていても、MRTGでこれらのグラフを監視サーバ上に出力する際には問題は生じませんでした。

1/3

Index
SELinuxのお行儀を監視する――MRTG/Nagios編
Page1
「SELinuxはトラブルの元」は都市伝説です
SNMP+MRTGによる監視
SNMP+MRTGの結果
  Page2
SNMP+MRTGでSELinuxが問題になる場合
Nagios+NRPEによる監視
  Page3
Nagios Pluginsのインストール
NRPEのインストール
nrpe.cfgファイルの編集
Nagiosサーバ上での設定ファイルの変更
Nagios+NRPEシステムでの結果


スイッチ・オン! SELinux 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間