逆风翱翔 發表於 2012-7-7 18:04:55

设定安全log服务器呢(RedHat)的方法

*环境RedHat 7.3<br />&nbsp;在网上越来越多的hacker 的出现, 越来越多的高手出现的情况下.如何才能确保自己可以保存一份完整的log 呢?稍微有点概念的hacker 都知道,进入系统后的第一见事情就是去清理log, 而发现入侵的最简单最直接的方法就是去看系统纪录文件.现在我们来说说如何设定一个安全的log服务器.<br />&nbsp;想想看,如果入侵者无法连接服务器,又如何能改您的log 呢?现在我们来学习如何设定一个无ip 的log 服务器.<br />&nbsp;现在,来介绍一下如何用Snort 来做三件事情∶<br />&nbsp;Stealth sniffer<br />&nbsp;stealth NIDS porbe<br />&nbsp;stealth logger<br />&nbsp;这一切都是用在一台没有ip 的服务器上面的. NIDS 是Network Intrusion Dectection Server 的简称,也就是说入侵检测服务器.<br />&nbsp;为什么要stealth 呢?<br />&nbsp;在internet 中运行任何一种服务,都是有一定的危险的.不管是http 也好, ftp 也好, telnet 也好,总之都会有机会被hack 入侵. stealth logger 的独特性可以让我们在接收资料的同时,不发送任何的资料.这样外界的电脑(被hack 入侵的电脑)就根本无法去更改loger server 所收到的信息.也就是说保证了我们信息的完整性,以及原始性. 为了确保log 服务器的安全,最好不要将log 服务器连接在网路中.也就是说,当您需要检查logger 服务器上得东西的时侯,您需要到电脑前,打开屏幕.而不是远端login 进来.但是,如果说您一定要连接网路的话的话,那么请用两个的介面来做.也就是说两片网卡.并且注意,第一, IP forwarding 一定要关闭.第二就是,用来做stealth logger 的介面是没有ip 的一张网卡,这张网卡必须不能跟另外一个有ip 的网卡在同一网路下面.<br />&nbsp;设定<br />&nbsp;首先当然是确定您的网卡安装无误,并且可以被kernel 抓到.然后把网卡所需要的module 写到/etc/modules.conf 文件中.<br />&nbsp;现在我们来设定一个没有ip 的网卡介面.<br />&nbsp;编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0<br />&nbsp;vim /etc/sysconfig/network-scripts/ifcfg-eth0<br />&nbsp;DEVICE=eth0<br />&nbsp;USERCTL=no<br />&nbsp;ONBOOT=yes<br />&nbsp;BOOTPROTO=<br />&nbsp;BROADCAST=<br />&nbsp;NETWORK=<br />&nbsp;NETMASK=<br />&nbsp;IPADDR=<br />&nbsp;存档后,用ifconfig 来active 我们的eth0 介面.<br />&nbsp;初试stealth<br />&nbsp;这里我们用到了snort 这个程式..<br />&nbsp;现在我们运行<br />&nbsp;snort -dvi eth0<br />&nbsp;这里-d 的选项告诉snort 对资料进行decode (解码)<br />&nbsp;-v 告诉snort 将结果显示在屏幕上面<br />&nbsp;-i 则是指定所需要的interface<br />&nbsp;可以用-C 选项告诉snort 只显示ASCII 部份. 忽略hexadecimal 资料.<br />&nbsp;$snort -dviC eth0<br />&nbsp;Log directory= /var/log/snort<br />&nbsp;Initializing Network Interface eth0<br />&nbsp;kernel filter, protocol ALL, TURBO mode<br />&nbsp;(63 frames), raw packet socket<br />&nbsp;--== Initializing Snort ==--<br />&nbsp;Decoding Ethernet on interface eth0<br />&nbsp;--== Initialization Complate ==--<br />&nbsp;-*&gt; Snort! &lt;*-<br />&nbsp;Version 1.8.4 (Build 99)<br />&nbsp;By Martin Roesch (roesch@sourcefire.com,<br />&nbsp;www.snort.org)<br />&nbsp;......<br />&nbsp;......<br />&nbsp;NIDS(入侵侦测) 入侵检测本身是一件很复杂的事情. snort 本身也提供了强大的入侵检测的功能. 这里我只做一个简单的介绍,好让大家有一个概念.如果真正实体去做一个NIDS 的话.需要些更复杂的动作.例如设定更完善的rules, 定时更新snort.conf 中所定义的rules (当新的攻击方式出现以后,要及时更新)<br />&nbsp;首先,我们需要更改一下/etc/snort/snort.conf 具体需要参照您自己的机器来设定.<br />&nbsp;#设定log 存放的地方<br />&nbsp;config logdir: /var/log/snort<br />&nbsp;#设定网路<br />&nbsp;var HOME_NET 192.168.1.0/24<br />&nbsp;var EXTERNAL_NET any<br />&nbsp;var SMTP $HOME_NET<br />&nbsp;var HTTP_SERVERS $HOME_NET<br />&nbsp;var SQL_SERVERS $HOME_NET<br />&nbsp;var DNS_SERVERS 192.168.1.250/32<br />&nbsp;var RULE_PATH ./<br />&nbsp;#设定preprocessors<br />&nbsp;preprocessor frag2<br />&nbsp;preprocessor stream4: detect_scans<br />&nbsp;preprocessor stream4_reassemblt<br />&nbsp;preprocessor portscan: $HOME_NET 4 3 portscan.log<br />&nbsp;#设定output<br />&nbsp;output database: log, mysql, user=root<br />&nbsp;dbname-snort host=localhost<br />&nbsp;#rules<br />&nbsp;alert tcp $HOME_NET 7161 -&gt; $EXTERNAL_NET any<br />&nbsp;(msg: &quot;MISC Cisco Catalyst Remote Access&quot;;<br />&nbsp;flags: SA; reference:arachnids, 129;<br />&nbsp;reference:cve, CVE-1999-0430;<br />&nbsp;classtype:bad-unknow; sid:513; rev:1;)<br />&nbsp;#设定patch , 这些都是些附加的rules 的文件<br />&nbsp;include $RULE_PATH/bad-traffic.rules<br />&nbsp;include $RULE_PATH/exploit.rules<br />&nbsp;include $RULE_PATH/scan.rules<br />&nbsp;include $RULE_PATH/ftp.rules<br />&nbsp;#这些rule 其实还有很多.您可以自己去写,也可以找人家写好的下载拿来用.<br />&nbsp;现在让我们把snort 跑起来∶<br />&nbsp;snort -c /etc/snort/snort.conf -D -i eth0<br />&nbsp;现在snort NIDS 的模式跑起来了. 在default 的情况下∶<br />&nbsp;alerts 会放在/var/log/snort/alert 中<br />&nbsp;port-scanning 会放在/var/log/snort/portscan.log<br />&nbsp;当您真正跑NIDS 的时侯,需要把snort 以daemon 的模式来跑. 如果您安装的是rpm 的东西,那么rpm 文件中已经包含了一个snortd 的文件,并且会帮您安装在/etc/rc.d/init.d/ 下面. 当您设定好snort 的configure 文件以后,只要用chkconfig 把snortd 打开就可以了:<br />&nbsp;加入snortd<br />&nbsp;chkconfig --add snortd<br />&nbsp;打开snortd<br />&nbsp;chkconfig snortd on<br />&nbsp;或者<br />&nbsp;chkconfig --level 3 snortd on<br />&nbsp;这里的level 请自行更改到您所跑的runlevel<br />&nbsp;您可以用cat /etc/inittab | grep id 来看自己在哪个<br />&nbsp;runlevel 上面.<br />&nbsp;cat /etc/inittab | grep id<br />&nbsp;id:5:initdefault:<br />&nbsp;这里就是说跑在run level 5 上面.<br />&nbsp;设定服务器 我们需要对服务器做一些设定,让服务器把log 送到我们的logger 服务器去. 首先,我们需要设定/etc/syslog.conf 把log 送到一个有效的,但是不存在的ip 下面.例如我们的网路是192.168.1.0/24 其中并没有192.168.1.123 这台机器,也就是说这个ip 实际上是空的.我们就把log 指向这里.您可以指向任意一个空的有效ip.<br />&nbsp;vim /etc/syslog.conf<br />&nbsp;加入<br />&nbsp;*.info @192.168.1.123<br />&nbsp;如果您的系统是用syslog-ng 的话<br />&nbsp;vim /etc/syslog-ng/syslog-ng.conf<br />&nbsp;destination d_loghost { udp(ip(192.168.123)<br />&nbsp;port (514)); };<br />&nbsp;filter f_info { level(info); };<br />&nbsp;log {filter(f_info); destination(d_loghost);};<br />&nbsp;我们还需要加入static ARP entry 才可以. 如果您的网路只是接了记个Hub 而已, 那么ARP 地址一样可以好象ip 一样,设定成虚构的. 如果您有连结switch, 您需要加入log 服务器的真实MAC 地址.<br />&nbsp;我们这里加入我们logger 服务器的真实MAC 地址就可以了.<br />&nbsp;arp -s 192.168.1.123 000:B7B:BF:95<br />&nbsp;在Logger 服务器设定snort<br />&nbsp;/etc/snort/snort.conf<br />&nbsp;var EXTERNAL_NET any<br />&nbsp;#等于snort -d<br />&nbsp;config dump_payload<br />&nbsp;#等于snort -C<br />&nbsp;config dump_chars_only<br />&nbsp;#设定log 存放的path<br />&nbsp;config logdir: /var/log/snort<br />&nbsp;# frag2 所做的动作就是把fragmented 给我们re-assembly<br />&nbsp;preprocessor frag2<br />&nbsp;log udp 192.168.1.1/32 any -&gt; 192.168.1.123/32 514<br />&nbsp;(logto: &quot;logged-packets&quot;;)<br />&nbsp;最后一行需要稍微解释一下∶ <br />&nbsp;我们这里把snort 来做packet logger. 也就是说,并不是把所有的东西都写入到/var/log/snort/alert 中.而是log any packets with match the rule without writing an alert.<br />&nbsp;udp: 是说,我们这里用udp 的protocol. system log 通常都是使用udp 的.<br />&nbsp;192.168.1.1/32: 就是只我们的服务器啦,也就是送log 的机器. 如果您是从整个一个网路段中收log 也可以用192.168.1.0/24.<br />&nbsp;any: any source port 任何port<br />&nbsp;-&gt;: 这个是direction operator 大家都知道的<br />&nbsp;192.168.1.123/35 514 就是我们给出的那个空ip 啦, port 514<br />&nbsp;如果没有指定logto: 的话, log 会分别保存在不同的文件中. 而指定logto 的话,就会把log 全部存放到我们指定的文件中,看起来方便多了.<br />&nbsp;更安全的保存log 就可以更安全的保护服务器。snort 的功能实际上非常的强大, 这里只是一个简单的介绍而已。
頁: [1]
查看完整版本: 设定安全log服务器呢(RedHat)的方法