在Linux服務器上如何開啓安全的SNMP代理

在各種Linux分發版中,大多數都已經默認集成了snmpd,比如在suse10中,你可以這樣開啓snmpd:
  
  suse10:~ # /etc/init.d/snmpd start
  
  如果沒有默認安裝,你要做的就是自己來編譯snmpd,按照下邊的步驟,非常簡單。
  
  編譯和安裝

  對於Linux平臺,我們推薦使用Net-SNMP,它實現了標準的SNMP協議,並且包括了代理程序以及各種SNMP工具。
  
  http://net-snmp.sourceforge.net/
  
  首先需要下載Net-SNMP的源代碼,選擇當前最新的版本5.4.2.1,地址如下:
  
  http://sourceforge.net/projects/net-snmp/files/net-snmp/5.4.2.1/
  
  接下來對下載的源代碼包進行解壓縮,如下
  
  ./configure –prefix=/usr/local/snmp –with-openssl=/usr/ –with-mib-modules=ucd-snmp/diskiomakemake installsuse10:~ # tar xzvf net-snmp-5.4.2.1.tar.gz
  
  然後通過configure來生成編譯規則,如下:
  
  suse10:~ # cd net-snmp-5.4.2.1
  suse10:~ # ./configure —-prefix=/usr/local/snmp —-with-openssl=/usr/ ––with-mib-modules=ucd-snmp/diskio
  
  注意這裏的—-with-mib-modules=ucd-snmp/diskio選項,它可以讓服務器支持磁盤I/O監控。
  
  接下來,開始編譯和安裝
  
  suse10:~ # make
  suse10:~ # make install
  
  到現在爲止,我們已經有了可以運行的SNMP代理程序,它位於/usr/local/snmp/sbin/snmpd,在啓動它之前,我們還要進行一些必要的設置。
  
  設置安全的驗證方式
  將SNMP代理程序暴露給網絡上的所有主機是很危險的,爲了防止其它主機訪問你的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗證機制。SNMP支持不同的驗證機制,這取決於不同的SNMP協議版本,目前支持v2c和v3兩個版本,其中v2c版本的驗證機制比較簡單,它基於明文密碼和授權IP來進行身份驗證,而v3版本則通過用戶名和密碼的加密傳輸來實現身份驗證,我們建議使用v3,當然,只要按照以下的介紹進行配置,不論是v2c版本還是v3版本,都可以保證一定的安全性,你可以根據情況來選擇。
  
  注意一點,SNMP協議版本和SNMP代理程序版本是兩回事,剛纔說的v2c和v3是指SNMP協議的版本,而Net-SNMP是用來實現SNMP協議的程序套件,目前它的最新版本是剛纔提到的5.4.2.1。
  
  v2c
  
  先來看如何配置v2c版本的SNMP代理,我們來創建snmpd的配置文件,默認情況下它是不存在的,我們來創建它,如下:
  
  suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
  
  然後我們需要創建一個只讀帳號,也就是read-only community,在snmpd.conf中添加以下內容:
  
  rocommunity ixdba 61.189.220.66
  
  注意,這裏的“rocommunity”表示這是一個只讀的訪問權限,ixdba只可以從你的服務器上獲取信息,而不能對服務器進行任何設置。
  
  緊接着的“ixdba”相當於密碼,很多平臺喜歡使用“public”這個默認字符串。這裏的“ixdba”只是一個例子,你可以設置其它字符串作爲密碼。
  
  最右邊的“61.189.220.66”代表指定的監控點IP,這個IP地址是監控專用的監控點,這意味着只有監控有權限來訪問你的SNMP代理程序。
  
  所以,以上這段配置中,只有“ixdba”是需要你進行修改的,同時添加服務器的時候,需要提供這個字符串。
  
  v3c
  
  當然,我們建議您使用v3c版本來進行身份驗證。對於一些早期版本的Linux分發版,其內置的SNMP代理程序可能並不支持v3c,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。
  
  v3c支持另一種驗證方式,要創建一個v3c的帳號,我們同樣修改以下配置文件:
  
  suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
  
  然後添加一個只讀帳號,如下:
  
  rouser ixdba auth
  
  可以看到,在v3c中,“rouser”用於表示只讀帳號類型,隨後的“ixdba”是指定的用戶名,後邊的“auth”指明需要驗證。
  
  接下來,我們還要添加“ixdba”這個用戶,這就是v3c中的特殊機制,我們打開以下配置文件:
  
  suse10:~ # vi /var/net-snmp/snmpd.conf
  
  這個文件會在snmpd啓動的時候被自動調用,我們需要在它裏邊添加創建用戶的指令,如下:
  
  createUser ixdba MD5 mypassword
  
  這行配置的意思是創建一個名爲“ixdba”的用戶,密碼爲“mypassword”,並且用MD5進行加密傳輸。這裏要提醒的是,密碼至少要有8個字節,這是SNMP協議的規定,如果小於8個字節,通信將無法進行。
  
  值得注意的是,一旦snmpd啓動後,出於安全考慮,以上這行配置會被snmpd自動刪除,當然,snmpd會將這些配置以密文的形式記錄在其它文件中,重新啓動snmpd是不需要再次添加這些配置的,除非你希望創建新的用戶。
  
  以上配置中的用戶名、密碼和加密方式,在監控添加服務器的時候需要添加。
  
  啓動SNMP代理程序
  經過配置後,現在可以啓動snmpd,如下:
  
  /usr/local/snmp/sbin/snmpd
  
  如果要關閉,則可以直接kill這個進程,如下:
  
  killall -9 snmpd
  
  增強的安全機制
  有了以上的驗證機制,你就可以放心的使用SNMP代理了。但是,如果你的SNMP代理程序版本較低,可能會有一些別有用心的破壞者利用一些固有的漏洞進行破壞,比如發送較長的數據導致SNMP代理程序內存泄漏或者拒絕服務等,爲此,你還可以使用防火牆(iptables)來進行增強的安全過濾。
  
  在Linux中,我們用iptables來實現防火牆,一般情況下,除了流入指定端口的數據包以外,我們應該將其它流入的IP數據包拋棄。你可能已經配置了一定的防火牆規則,那麼只要增加針對SNMP的規則即可。
  
  SNMP代理程序默認監控在udp161端口,爲你的iptables增加以下規則:
  
  
  iptables -A INPUT -i eth0 -p udp -s 61.189.220.66 --dport 161 -j ACCEPT

  注意,在以上的dport選項之前,是兩個“-”符號,由於排版顯示的問題,這裏可能會不正常。另外,在以上設置中,假設你的服務器外網網卡是eth0,你可以根據實際情況來修改。
  這樣一來,只有指定的專用監控器可以發送UDP數據包到你的服務器的161端口,與SNMP代理程序進行通信。
    
  填寫完後,點擊提交按鈕,這時候使用這些信息來嘗試連接你的SNMP監控代理,需要一些時間,這一步非常重要。
  
  不妙,如果你填寫的信息無法連接到服務器的SNMP代理程序,這時候,請你仔細檢查之前介紹的那些配置,以及防火牆策略,也許你沒有開放udp161端口。

發佈了4 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章