labunix's blog

labunixのラボUnix

Fortigateのsnmp/snmptrap/alert mailをdebian Wheezyで受信する。

■Fortigateのsnmp/snmptrap/alert mailをdebian Wheezyで受信する。

■基本的な設定については以下を参照

 2012/01/10 Debian Lenny + MRTGでCPU、メモリ、ディスク監視
 http://d.hatena.ne.jp/labunix/20120110

 2012/05/26 Squeezeでsnmpトラップの送受信テスト
 http://d.hatena.ne.jp/labunix/20120526

 2012/11/08 SNMPトラップでメールを送信(Squeeze)
 http://d.hatena.ne.jp/labunix/20121108

■待ち受けIP/Portの設定の確認

$ sudo grep "^[as].*Addr" /etc/snmp/snmptrapd.conf /etc/snmp/snmpd.conf 
/etc/snmp/snmptrapd.conf:snmpTrapdAddr udp:0.0.0.0:162
/etc/snmp/snmpd.conf:agentAddress  udp:127.0.0.1:161,udp:172.31.31.254:161

■コミュニティ名はpublicとします。

$ sudo grep "^[ar].*[Cc]ommunity" /etc/snmp/snmptrapd.conf /etc/snmp/snmpd.conf 
/etc/snmp/snmptrapd.conf:authCommunity log,execute,net public
/etc/snmp/snmpd.conf:rocommunity public  localhost

■snmp、snmptrapの確認

$ netstat -an | grep "16[12]"
udp        0      0 172.31.31.254:161       0.0.0.0:*
udp        0      0 127.0.0.1:161           0.0.0.0:* 
udp        0      0 0.0.0.0:162             0.0.0.0:*

■uptimeの取得
 表示の方法がコマンドごとに異なるが、
 いずれも「/proc/uptime」を参照している。

$ man proc 2>/dev/null | grep -A 1 /proc/uptime
       /proc/uptime
              このファイルは システム起動時から経過した時間 () と アイドル (idle) しているプロセスが消費した時間 ()2 つの数を含む。

$ snmpwalk -c public -v 1 localhost .iso.3.6.1.2.1.25.1.1.0;cat /proc/uptime ;uptime
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (111521321) 12 days, 21:46:53.21
1115213.22 1102413.57
 23:41:09 up 12 days, 21:46,  3 users,  load average: 0.00, 0.01, 0.05

■「Test Message」の送信

$ snmptrap -v 1 -c public localhost .1.3.6.1.4.1.8072.99999 localhost \
    6 1 '' .1.3.6.1.4.1.8072.99999.1 s "Test Message" 2> /dev/null

$ sudo grep "Test" /var/log/syslog | sed s/": "/"\n"/g | tail -3
[127.0.0.1]:53214->[127.0.0.1]) TRAP, SNMP v1, community public#012#011iso.3.6.1.4.1.8072.99999 Enterprise Specific Trap (1) Uptime
12 days, 21:59:48.30#012#011iso.3.6.1.4.1.8072.99999.1 = STRING
"Test Message"

■snmptrapを受信したらroot宛にメールを送る設定を追加。

$ sudo grep ^traphandle /etc/snmp/snmptrapd.conf 
traphandle default /usr/bin/mail -s "SNMP Trap Mail" root@`hostname -f`
$ sudo /etc/init.d/snmpd restart

■MIB検索機能の確認
 デフォルトである「mibs :」はコメントアウト。
 debianではmibsの検索先は事前に決まっているので、
 カスタムMIBを追加後に追記するのは「MIBS all」のみ。

$ sudo grep mibs /etc/snmp/snmp.conf 
#mibs :

$ snmptranslate -TB Cpu
UCD-SNMP-MIB::ssCpuRawSoftIRQ

■Fortigate側のsnmp設定
 ※「set」文に改行を追加しているので、設定に使う場合は注意。

$ echo -e "show system interface internal\nshow system snmp community\nshow system snmp sysinfo" | \
    ssh admin@172.31.31.251 2>/dev/null | \
    sed s/"av-virus\|av-bypass\|ha-member-up"/"\n\t&"/g | sed s/"^.*# "//g
config system interface
    edit "internal"
        set vdom "root"
        set ip 172.31.31.251 255.255.255.0
        set allowaccess ping https ssh snmp http telnet
        set type physical
        set snmp-index 1
    next
end

config system snmp community
    edit 1
        set events cpu-high mem-low log-full intf-ip vpn-tun-up vpn-tun-down ha-switch ha-hb-failure ips-signature ips-anomaly 
	av-virus av-oversize av-pattern av-fragmented fm-if-change bgp-established bgp-backward-transition 
	ha-member-up ha-member-down ent-conf-change av-conserve 
	av-bypass av-oversize-passed av-oversize-blocked ips-pkg-update ips-fail-open faz-disconnect wc-ap-up wc-ap-down
            config hosts
                edit 1
                    set interface "internal"
                    set ip 172.31.31.254 255.255.255.255
                next
            end
        set name "public"
    next
end

config system snmp sysinfo
    set status enable
end

■これで取得出来るようになる。

$ snmpwalk -v 1 -c public 172.31.31.251 | wc -l
897

$ snmpwalk -c public -v 1 172.31.31.251 .iso.3.6.1.2.1.47.1.1.1.1.10.1
iso.3.6.1.2.1.47.1.1.1.1.10.1 = STRING: "FortiGate-80C v5.00.5,build0252b252,131031"

■このOIDの値はLinuxには無い。

$ snmpget -v 1 -c public 172.31.31.251 .iso.3.6.1.2.1.47.1.1.1.1.10.1
iso.3.6.1.2.1.47.1.1.1.1.10.1 = STRING: "FortiGate-80C v5.00.5,build0252b252,131031"

$ snmpget -v 1 -c public 127.0.0.1 .iso.3.6.1.2.1.47.1.1.1.1.10.1
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: iso.3.6.1.2.1.47.1.1.1.1.10.1

■FortigateのWeb管理画面から以下にMIBのダウンロードリンクがある。
 [システム]->[設定]->[SNMP]

FortiGate SNMP MIB
Download FortiGate MIB ファイル
Download Fortinet Core MIB ファイル

■「grep Version」で検索して「fgSysVersion」だろうと思う。

$ grep -A 7 "^fgSysVersion " FORTINET-FORTIGATE-MIB.mib
fgSysVersion OBJECT-TYPE
    SYNTAX      DisplayString (SIZE(0..128))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION 
        "Firmware version of the device"
    ::= { fgSystemInfo 1 }

■MIB情報を追加する。

$ sudo mkdir /usr/share/snmp/mibs/vender; \
  sudo mv FORTINET-*.mib /usr/share/snmp/mibs/vender/;

$ snmptranslate -TB fgSysVersion
Unable to find a matching object identifier for "fgSysVersion"

$ snmptranslate -m +FORTINET-FORTIGATE-MIB -TB fgSysVersion
FORTINET-FORTIGATE-MIB::fgSysVersionIps
FORTINET-FORTIGATE-MIB::fgSysVersionAv
FORTINET-FORTIGATE-MIB::fgSysVersion

■これで、「MIBS all」すれば読み込めるところまで来た。
 snmp/snmpd/snmptrapdのいずれにも影響しないので、再起動は要らない。

$ echo "MIBS all" | sudo tee -a /etc/snmp/snmp.conf
MIBS all

$ snmptranslate -TB fgSysVersion 2>&1 | grep ^FORTI
FORTINET-FORTIGATE-MIB::fgSysVersionIps
FORTINET-FORTIGATE-MIB::fgSysVersionAv
FORTINET-FORTIGATE-MIB::fgSysVersion

■「MIB all」をコメントアウトすれば元に戻る。

$ sudo sed -i s/"MIBS all"/"#&"/ /etc/snmp/snmp.conf; \
  echo "# Not MIBS all"; \
  snmptranslate -TB fgSysVersion 2>&1 | tail -3; \
  sudo sed -i s/"#MIBS all"/"MIBS all"/ /etc/snmp/snmp.conf; \
  echo "# MIB all"; \
  snmptranslate -TB fgSysVersion 2>&1 | tail -3
# Not MIBS all
Unable to find a matching object identifier for "fgSysVersion"
# MIB all
FORTINET-FORTIGATE-MIB::fgSysVersionIps
FORTINET-FORTIGATE-MIB::fgSysVersionAv
FORTINET-FORTIGATE-MIB::fgSysVersion

■トラップのチェックオンにした内容は以下すべて。

CPU高負荷
メモリ不足
ハードディスク空き容量不足
インターフェースIPアドレス変更
VPNトンネルアップ
VPNトンネルダウン
WiFiコントローラーAPアップ
WiFiコントローラーAPダウン

HAクラスタのステータス変化
HAハートビート障害
HAメンバーアップ
HAメンバーダウン

ウィルス検知
ファイルパターン一致による検知
分割されたEmailを検知
大きすぎるファイル/Emailを検知
大きすぎるファイル/Emailをブロック
大きすぎるファイル/Emailをパス
AVバイパスの発生

BGP Established
BGP Backward Transition

IPSアノマリ検知
IPS攻撃検知
IPSパッケージの更新
IPSネットワークキューオーバーフロー

System enters conserve mode
System configuration is changed
FortiAnalyzer切断

■alert-emailも設定しておく。

$ echo -e "show system email-server\nshow alertemail setting" | ssh admin@172.31.31.251 2> /dev/null | sed s/"^.*# "//g
admin@172.31.31.251s password: 
config system email-server
    set reply-to "FGT-UTM@myhome.local"
    set server "172.31.31.254"
end

config alertemail setting
    set username "FGT-UTM@myhome.local"
    set mailto1 "labunix@myhome.local"
    set filter-mode threshold
    set severity notification
end