*環境RedHat 7.3 在網上越來越多的hacker 的出現, 越來越多的高手出現的情況下.如何才能確保自己可以保存一份完整的log 呢?稍微有點概念的hacker 都知道,進入系統后的第一見事情就是去清理log, 而發現入侵的最簡單最直接的方法就是去看系統紀錄文件.現在我們來說說如何設定一個安全的log服務器. 想想看,如果入侵者無法連接服務器,又如何能改您的log 呢?現在我們來學習如何設定一個無ip 的log 服務器. 現在,來介紹一下如何用Snort 來做三件事情∶ Stealth sniffer stealth NIDS porbe stealth logger 這一切都是用在一臺沒有ip 的服務器上面的. NIDS 是Network Intrusion Dectection Server 的簡稱,也就是說入侵檢測服務器. 為什么要stealth 呢? 在internet 中運行任何一種服務,都是有一定的危險的.不管是http 也好, ftp 也好, telnet 也好,總之都會有機會被hack 入侵. stealth logger 的獨特性可以讓我們在接收資料的同時,不發送任何的資料.這樣外界的電腦(被hack 入侵的電腦)就根本無法去更改loger server 所收到的信息.也就是說保證了我們信息的完整性,以及原始性. 為了確保log 服務器的安全,最好不要將log 服務器連接在網路中.也就是說,當您需要檢查logger 服務器上得東西的時侯,您需要到電腦前,打開屏幕.而不是遠端login 進來.但是,如果說您一定要連接網路的話的話,那么請用兩個的介面來做.也就是說兩片網卡.并且注意,第一, IP forwarding 一定要關閉.第二就是,用來做stealth logger 的介面是沒有ip 的一張網卡,這張網卡必須不能跟另外一個有ip 的網卡在同一網路下面. 設定 首先當然是確定您的網卡安裝無誤,并且可以被kernel 抓到.然后把網卡所需要的module 寫到/etc/modules.conf 文件中. 現在我們來設定一個沒有ip 的網卡介面. 編輯文件/etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 USERCTL=no ONBOOT=yes BOOTPROTO= BROADCAST= NETWORK= NETMASK= IPADDR= 存檔后,用ifconfig 來active 我們的eth0 介面. 初試stealth 這里我們用到了snort 這個程式.. 現在我們運行 snort -dvi eth0 這里-d 的選項告訴snort 對資料進行decode (解碼) -v 告訴snort 將結果顯示在屏幕上面 -i 則是指定所需要的interface 可以用-C 選項告訴snort 只顯示ASCII 部份. 忽略hexadecimal 資料. $snort -dviC eth0 Log directory= /var/log/snort Initializing Network Interface eth0 kernel filter, protocol ALL, TURBO mode (63 frames), raw packet socket --== Initializing Snort ==-- Decoding Ethernet on interface eth0 --== Initialization Complate ==-- -*> Snort! <*- Version 1.8.4 (Build 99) By Martin Roesch (roesch@sourcefire.com, www.snort.org) ...... ...... NIDS(入侵偵測) 入侵檢測本身是一件很復雜的事情. snort 本身也提供了強大的入侵檢測的功能. 這里我只做一個簡單的介紹,好讓大家有一個概念.如果真正實體去做一個NIDS 的話.需要些更復雜的動作.例如設定更完善的rules, 定時更新snort.conf 中所定義的rules (當新的攻擊方式出現以后,要及時更新) 首先,我們需要更改一下/etc/snort/snort.conf 具體需要參照您自己的機器來設定. #設定log 存放的地方 config logdir: /var/log/snort #設定網路 var HOME_NET 192.168.1.0/24 var EXTERNAL_NET any var SMTP $HOME_NET var HTTP_SERVERS $HOME_NET var SQL_SERVERS $HOME_NET var DNS_SERVERS 192.168.1.250/32 var RULE_PATH ./ #設定preprocessors preprocessor frag2 preprocessor stream4: detect_scans preprocessor stream4_reassemblt preprocessor portscan: $HOME_NET 4 3 portscan.log #設定output output database: log, mysql, user=root dbname-snort host=localhost #rules alert tcp $HOME_NET 7161 -> $EXTERNAL_NET any (msg: "MISC Cisco Catalyst Remote Access"; flags: SA; reference:arachnids, 129; reference:cve, CVE-1999-0430; classtype:bad-unknow; sid:513; rev:1;) #設定patch , 這些都是些附加的rules 的文件 include $RULE_PATH/bad-traffic.rules include $RULE_PATH/exploit.rules include $RULE_PATH/scan.rules include $RULE_PATH/ftp.rules #這些rule 其實還有很多.您可以自己去寫,也可以找人家寫好的下載拿來用. 現在讓我們把snort 跑起來∶ snort -c /etc/snort/snort.conf -D -i eth0 現在snort NIDS 的模式跑起來了. 在default 的情況下∶ alerts 會放在/var/log/snort/alert 中 port-scanning 會放在/var/log/snort/portscan.log 當您真正跑NIDS 的時侯,需要把snort 以daemon 的模式來跑. 如果您安裝的是rpm 的東西,那么rpm 文件中已經包含了一個snortd 的文件,并且會幫您安裝在/etc/rc.d/init.d/ 下面. 當您設定好snort 的configure 文件以后,只要用chkconfig 把snortd 打開就可以了: 加入snortd chkconfig --add snortd 打開snortd chkconfig snortd on 或者 chkconfig --level 3 snortd on 這里的level 請自行更改到您所跑的runlevel 您可以用cat /etc/inittab | grep id 來看自己在哪個 runlevel 上面. cat /etc/inittab | grep id id:5:initdefault: 這里就是說跑在run level 5 上面. 設定服務器 我們需要對服務器做一些設定,讓服務器把log 送到我們的logger 服務器去. 首先,我們需要設定/etc/syslog.conf 把log 送到一個有效的,但是不存在的ip 下面.例如我們的網路是192.168.1.0/24 其中并沒有192.168.1.123 這臺機器,也就是說這個ip 實際上是空的.我們就把log 指向這里.您可以指向任意一個空的有效ip. vim /etc/syslog.conf 加入 *.info @192.168.1.123 如果您的系統是用syslog-ng 的話 vim /etc/syslog-ng/syslog-ng.conf destination d_loghost { udp(ip(192.168.123) port (514)); }; filter f_info { level(info); }; log {filter(f_info); destination(d_loghost);}; 我們還需要加入static ARP entry 才可以. 如果您的網路只是接了記個Hub 而已, 那么ARP 地址一樣可以好象ip 一樣,設定成虛構的. 如果您有連結switch, 您需要加入log 服務器的真實MAC 地址. 我們這里加入我們logger 服務器的真實MAC 地址就可以了. arp -s 192.168.1.123 000:B7B:BF:95 在Logger 服務器設定snort /etc/snort/snort.conf var EXTERNAL_NET any #等于snort -d config dump_payload #等于snort -C config dump_chars_only #設定log 存放的path config logdir: /var/log/snort # frag2 所做的動作就是把fragmented 給我們re-assembly preprocessor frag2 log udp 192.168.1.1/32 any -> 192.168.1.123/32 514 (logto: "logged-packets";) 最后一行需要稍微解釋一下∶ 我們這里把snort 來做packet logger. 也就是說,并不是把所有的東西都寫入到/var/log/snort/alert 中.而是log any packets with match the rule without writing an alert. udp: 是說,我們這里用udp 的protocol. system log 通常都是使用udp 的. 192.168.1.1/32: 就是只我們的服務器啦,也就是送log 的機器. 如果您是從整個一個網路段中收log 也可以用192.168.1.0/24. any: any source port 任何port ->: 這個是direction operator 大家都知道的 192.168.1.123/35 514 就是我們給出的那個空ip 啦, port 514 如果沒有指定logto: 的話, log 會分別保存在不同的文件中. 而指定logto 的話,就會把log 全部存放到我們指定的文件中,看起來方便多了. 更安全的保存log 就可以更安全的保護服務器。snort 的功能實際上非常的強大, 這里只是一個簡單的介紹而已。 |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信