两台Linux主机连在一个局域网中,Ubuntu10.04ip=10.20.133.31;Fedora9ip=10.20.133.32。最近看Netfilter/iptables的问题,发现iptables是默认不产生任何log的,但是iptables有一个机制可以主动产生log,而且可以自己定义的log的级别。一般情况下,fedora是常年开机,做一些实验和备份用的,通过ssh或telnet登录上去进行一些管理。突然想到是不是可以将登录fedora的log记录下来,看看哪些人还经常登录?(上面还开了ftp和httpd服务,交换一些资料)说干就干。 其实Fedora上的登录信息已经由rsyslog(不再是syslog了)记录在/var/log/wtmp里了,每次登录到fedora上去查看满烦的。而且还要grep一大堆更是繁琐。为何不用iptables解决数据筛选的问题,用rsyslog在Ubuntu(日常用计算机)搭一个日志服务器呢?这样子以后我要是有好多好多主机的时候都可以在ubuntu上查看日志了……当然是开玩笑了,我哪有这么钱啊?呵呵… 首先,配置Fedora。在fedora的iptables规则中加上 iptables-A INPUT -p tcp –syn –dport 22 -j LOG –log-level alert 表示将ssh连接请求以alert级别记录下来(默认是/var/log/message)。 在/etc/rsyslog.conf中配置kern.laert @10.20.133.31将来自内核的级别为alert的log发到地址10.20.133.31,也就是我的Ubuntu上。 接下来配置Ubuntu。touch/var/log/kernfrommyhp用以存放来自Fedora的日志文件。在rsyslog的配置文件/etc/rsyslog.d/50-default.conf加上 kern.alert /var/log/kernfrommyhp.log 即将来自kern.alert的log放到之前那个文件中(不光是来自Fedora的,本机的也会放进去,但是alert级别log不多应该很好找)。下面就是最关键的地方了—让Ubuntu接收其他主机发过来的日志文件。在ubuntu中是在/etc/default/rsyslog中配置的。根据网上资料将RSYSLOGD_OPTIONS="-c4"改成 RSYSLOGD_OPTIONS="-r -m 0" 两台主机运行servicersyslog restart就该OK了。运行的流程应该是: Ubuntu(也可以是其他主机)上ssh登录Fedora,fedora记录该登录log,发送到ubuntu(日志服务器)上。 尝试ssh登录一次,打开/var/log/kernfrommyhp,结果为空,即实验失败了。 果断打开wireshark抓包分析。如下图: 可以看到结果是是Fedora可以产生log,也可以向Ubuntu发送该log(发向UDP514),但是ubuntu上rsyslog的接受进程似乎是没开,不能接受rsyslog的包。开始我以为是ubuntu的防火墙禁掉了。iptables-F后依旧如此;netstat-apn | grep 514也没发现有进程监听514端口。那就应该是ubuntu上配置有错了。尝试将RSYSLOGD_OPTIONS="-r -m 0"改成 RSYSLOGD_OPTIONS="-r514 -m 0" 即指定监听514,再试。抓包 没有了那个ICMP3号包了,应该是成功了。打开/var/log/kernfrommyhp: yes!That‘sit ! 关键: Fedora上的iptables规则注意别丢了,最好写到开机shell中,保证每次加载。Ubuntu中配置文件位置有点诡异/etc/rsyslog.d/50-default.conf和/etc/default/rsyslog。 (责任编辑:IT) |