如何设定安全log服务器呢?

发表于:2007-05-26来源:作者:点击数: 标签:
环境 RedHat 7.3 在网上越来越多的 hacker 的出现, 越来越多的高手出现的情况下.如何才能确保自己可以保存一份完整的 log 呢?稍微有点概念的 hacker 都知道,进入系统后的第一见事情就是去清理 log, 而发现入侵的最简单最直接的方法就是去看系统纪录文件.现
环境 RedHat 7.3
在网上越来越多的 hacker 的出现, 越来越多的高手出现的情况下.如何才能确保自己可以保存一份完整的 log 呢?稍微有点概念的 hacker 都知道,进入系统后的第一见事情就是去清理 log, 而发现入侵的最简单最直接的方法就是去看系统纪录文件.现在我们来说说如何设定一个安全的 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 这个程式.如果您的电脑中没有这个程式,可以到 www.snort.org 下载.
现在我们运行
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 Aclearcase/" target="_blank" >ccess";
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 00:D0:B7:DB: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 的功能实际上非常的强大, 这里只是一个简单的介绍而已.如果您对这些东西有兴趣。可以去 www.snort.org/docs/ 下面看到非常多的有用的文件。


原文转自:http://www.ltesting.net