linux服务器安全
linux服务器安全
1 服务器账号口令的安全
1.1 服务器账号安全
服务器系统的账号、应用服务的账号要尽量少,删除一些不必要的账号和应用服务的账号,
应该禁止所有默认的被操作系统本身启动的并且不必要的账号,当你第一次安装系统时就应该这么做,Linux提供了很多默认账号,而账号越多,系统就越容易受到攻击。
应用服务的账号的尽量限制在本机登入,拒绝远程连接,例如mysql,oracle等服务。
1.1.1 root用户安全
Root在类unix中是最最重要,应该尽可能的保护,下面的规则必须注意:
除非必要,避免用root登录,如果必须用root,首先用自己的普通账号登录,然后使用/bin/su-成为root ,rootshell用完必须关掉。
1.2 服务器密码安全
1.2.1 一个强固的密码至于要有下列四方面内容的三种:
大写字母
小写字母
数字
非字母数字的字符,如标点符号
1.2.2 强固的密码还要符合下列的规则
不使用普通的名字或昵称
不使用普通的个人信息,如生日日期
密码里不含有重复的字母或数字
至少使用八个字符
1.3 服务器账号密码综合安全措施
1.3.1 仔细设置每个内部用户的权限
为了保护Linux网络系统的资源,在给内部网络用户开设帐号时,要仔细设置每个内部用户的权限,一般应遵循“最小权限”原则,也就是仅给每个用户授予完成他们特定任务所必须的服务器访问权限。这样做会大大加重系统管理员的管理工作量,但为了整个网络系统的安全还是应该坚持这个原则
1.3.2 密码时效
在UNIX系统中防止密码被攻击的别一方法就是要经常地改变密码。很多时候,用户却不改变密码。
一种机制用来强制规律性的更改密码是合乎要求的。这种技术称做密码时效并在很多UNIX系统上有效。
在LINUX系统上,密码时效是通过chage命令来管理的。
参数意思
-m 密码可更改的最小天数。如果是零代表任何时候都可以更改密码
-M 密码更改的最大天数
-W 用户密码到期前,提前收到警告信息的天数。
-e 帐号到期的日期。过了这天,此帐号将不可用。
-d 上一次更改的日期
-i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
举个例子
% chage ?m 2 ?M 30 ?W 5 steven
此命令要求用户steven两天内不能更改密码,并且密码最长的存活期为30天,并在密码过期前5通知他
1.3.3 记录不成功的登陆企图
所有的UNIX系统都能够记录非成功的登陆企图。在LINUX中,登陆的失败是由syslog守护进程记录在/var/log/messages文件里。可以用下列命令来查找相关信息
$ grep login /var/log/messages
1.3.4 Ssh安全
在使用ssh连接linux服务器的时候,如果一段时间在终端上没有动作,就会被服务器端踢掉.
在/etc/ssh/sshd_config中加入
ClientAliveInterval
ClientAliveCountMax
然后,/etc/rc.d/init.d/sshd restart重启服务可以解决此问题.
2 系统服务的安全
2.1 禁止所有不必要的服务。
用ps –ef 命令可以看到当前系统所有已经开启的服务。查看是否有可以的服务进程。
还可以用ntsysv命令来关闭一些不用的服务。
2.2 设置服务器运行级别
一般类unix服务器不建议安装图形界面,这样可以提高服务器的性能,如果有界面的需求,安装x-windows也可以,我们先了解一下linux的运行级别的区别:
# 0 - halt (Do NOT set initdefault to this) 为停机,机器关闭
# 1 - Single user mode为单用户模式,就像Win9x下的安全模式类似
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 为多用户模式,但是没有NFS支持。
# 3 - Full multiuser mode为完整的多用户模式,是标准的运行级
# 4 - unused进入控制台登录的多用户模式在一些特殊情况下可以用它来做一些事情。
# 5 - X11进到X Window系统了。
# 6 - reboot (Do NOT set initdefault to this) 运行init 6机器就会重启。
2.3 保障系统的最低服务原则
关闭一些服务:
关闭的方法有很多,通常我是使用/usr/sbin/setup来关闭的,只是用这样的方式来关闭的话,需要重新启动Linux ,比较麻烦一些些,如果您是使用我们这个网页的RedHat6.1系统的话,那就执行/usr/sbin/setup吧!然后选择System services,将所有的服务启动项目开到剩下如下的几个:
crond
iptables
keytable
kudzu
network
random
sendmai(如果你有开启e-mail服务的话)
smb(如果你有开启SAMBA服务的话)
syslog
xfs(如果你有执行X-windows的话)
其他的服务就是你的要求来开启啰,其实,除非你真的了解该服务是作何用的,否则可以先予以关闭之,但是上面的几个项目则必须要开启的!
3 服务器端口安全
3.1 关闭无用的端口
任何网络连接都是通过开放的应用端口来实现的。如果我们尽可能少地开放端口,就使网络攻击变成无源之水,从而大大减少了攻击者成功的机会。例如,希望Linux成为的Web服务器,可以取消系统内所有非必要的服务,只开启必要服务。这样做可以尽量减少后门,降低隐患,而且可以合理分配系统资源,提高整机性能
3.2 检查服务器端口开放情况。
Netstat –anp
3.2.1 Port scan简介
port Scan的方法介绍 port Scan就是一种通过检测对方服务器的开放端口,侦测对方服务器服务的方法。一般可分为主动式和被动式两种。主动式就是通过向对方服务器的特定端口发送数据包,根据应答来判断。以nmap 为代表
被动式,不主动发出数据包,而是在网络上长时侦听,分析网上的transaction,来分析,严格的来被动式不应该被称作是端口扫描。以nwatch为代表
优缺点比较主动式的优点
主动式只要在对方没有把通信阻断的情况下,可以在较短的时间内获得结果
3.2.2 nmap的安装
debian apt-get install nmap
fedora core yum install nmap
others 下载源代码,编译
3.2.3 nmap的使用方法
下面是Nmap支持的四种最基本的扫描方式:
* TCP connect()端口扫描(-sT参数)。
* TCP同步(SYN)端口扫描(-sS参数)。
* UDP端口扫描(-sU参数)。
* Ping扫描(-sP参数)
如果要勾画一个网络的整体情况,Ping扫描和TCP SYN扫描最为实用。
* Ping扫描通过发送ICMP(Internet Control Message Protocol,Internet控制消息协议)回应请求数据包和TCP应答(Acknowledge,简写ACK)数据包,确定主机的状态,非常适合于检测指定网段内正在运行的主机数量。
* TCP SYN扫描一下子不太好理解,但如果将它与TCP connect()扫描比较,就很容易看出这种扫描方式的特点。在TCP connect()扫描中,扫描器利用操作系统本身的系统调用打开一个完整的TCP连接也就是说,扫描器打开了两个主机之间的完整握手过程(SYN, SYN-ACK,和ACK)。一次完整执行的握手过程表明远程主机端口是打开的。
* TCP SYN扫描创建的是半打开的连接,它与TCP connect()扫描的不同之处在于,TCP SYN扫描发送的是复位(RST)标记而不是结束ACK标记(即,SYN,SYN-ACK,或RST):如果远程主机正在监听且端口是打开的,远程主机用 SYN-ACK应答,Nmap发送一个RST;如果远程主机的端口是关闭的,它的应答将是RST,此时Nmap转入下一个端口。
-sS 使用SYN+ACK的方法,使用TCP SYN,
-sT 使用TCP的方法, 3次握手全做
-sU 使用UDP的方法
-sP ICMP ECHO Request 送信,有反应的端口进行调查
-sF FIN SCAN
-sX
-sN 全部FLAG OFF的无效的TCP包送信,根据错误代码判断端口情况
-P0 无视ICMP ECHO request的结果,SCAN
-p scan port range 指定SCAN的目端口的范围
1-100, 或者使用25,100的方式
-O 侦测OS的种类
-oN 文件名通常格式文件输出
-oX 文件名通过DTD,使用XML格式输出结果
-oG 文件名,grep容易的格式输出
-sV 服务的程序名和版本SCAN
3.2.4 实例:
nmap -v target.com
这样对target.com上所有的保留TCP端口做了一次扫描,-v表示用详细模式。
nmap -sS -O target.com/24
这将开始一次SYN的半开扫描,针对的目标是target.example.com所在的C类子网,它还试图确定在其上运行的是什么系统。这需要root权限,因为用到了半开扫描以及系统侦测。
3.2.5 结果实例:
debianlinux:/etc/init.d# nmap 192.168.1.1
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-08-30 00:01 JST
Interesting ports on 192.168.1.1
(The 1658 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
1720/tcp filtered H.323/Q.931
3128/tcp open squid-http
5。nwatch的安装 nwatch 需要的包
Perl 5.005_03以上
Net::Pcap
Ndiff 0.05 bata2 以上
libpcap
debian: apt-get install nwatch
6.nwatch的使用方法
-d 网络设备名,默认为eth0
-h host/network[:port][t,u]
t,u 可以指定TCP或UDP 默认为TCP
-o 输出文件名
-fi 时间(秒)把数据写盘时间,默认为300秒
-si 数据Break时间(秒),默认为86400(一天)
LINK
nmap
http://www.insecure.org/nmap/
数据写盘时间,默认为300秒-si 数据Break时间(秒),默认为86400(一天)LINKnmaphttp://www.insecure.org/nmap/
4 Iptables的配置
4.1 IPTABLES基础
Iptables语法:
Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET]
TABLE:
有filter,nat,mangle;若无指定,预设为filter table.
ACTION(对Chains执行的动作):
ACTION 说明
-L Chain 显示Chain中的所有规则
-A Chain 对Chain新增一条规则
-D Chain 删除Chain中的一条规则
-I Chain 在Chain中插入一条规则
-R Chain 替换Chain中的某一条规则
-P Chain 对Chain设定的预设的Policy
-F Chain 清除Chain中的所有规则
-N Chain 自订一个Chain
-X 清除所有的自订Chain
CHAINS:
Iptables 有五条默认的Chains(规则链),如下表:
Chains 发生的时机
PREROUTING 数据包进入本机后,进入Route Table前
INPUT 数据包通过Route Table后,目地为本机
OUTPUT 由本机发出,进入Route Table前
FORWARD 通过Route Table后,目地不是本机时
POSTROUTING 通过Route Table后,送到网卡前
PATTERN(设定条件部份):
参数内容说明
-p Protocol 通讯协议,如tcp,udp,icmp,all等……
-s Address 指定的Source Address为Address
-d Address 指定的Destination Address为Address
-I Interface 指定数据包进入的网卡
-o Interface 指定数据包输出的网卡
-m Match 指定高级选项,如mac,state,multiport等……
TARGET(常用的动作):
TARGET 说明
ACCEPT 让这个数据包通过
DROP 丢弃数据包
RETURN 不作对比直接返回
QUEUE 传给User-Space的应用软件处理这个数据包
SNAT nat专用:转译来源地址
DNAT nat专用:转译目地地址
MASQUERADE nat专用:转译来源地址成为NIC的MAC
REDIRECT nat专用:转送到本机的某个PORT
4.2 公司服务器iptables配置实例
#! /bin/sh
#
# firewall starting firewall
#
# chkconfig: 2345 98 01
# description: setting firewall
##########################################################################
# 设定参数
##########################################################################
INNER_NET={network}/24 # LAN 局域网自由设定
FWALL_IP={localAddr} # 防火墙的IP 你的机器的真实IP
INNER_PORT={interface} # 局域网端IP
#OUTER_PORT={interface} # Wan端IP
IPTABLES="/sbin/iptables" # iptables 命令
MODPROBE="/sbin/modprobe" # modprobe 命令
##########################################################################
# 模块的加载和设定为内核工作
##########################################################################
$MODPROBE ip_tables
$MODPROBE iptable_filter
$MODPROBE ip_conntrack
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
$MODPROBE ip_conntrack_ftp
$MODPROBE ipt_state
$MODPROBE ipt_MASQUERADE
$MODPROBE ipt_LOG
$MODPROBE ipt_REJECT
$MODPROBE ipt_limit
echo "3 4 1 7" > /proc/sys/kernel/printk
# 允许IP masquerade(变换)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 忽视ping的broadcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# 检查源IP
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
# 记录不可能的(虚假)IP
for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo "1" > $f; done
# 忽视ICMP redirect message
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 1 > $f; done
##########################################################################
# 初始化规则
##########################################################################
$IPTABLES -P INPUT DROP # 清空INPUT原始定义
$IPTABLES -P OUTPUT DROP # 清空OUPUT原始定义
$IPTABLES -P FORWARD DROP # 清空FORWARD原始定义
$IPTABLES -F # flash chain
$IPTABLES -F -t nat
$IPTABLES -X # 删除用户定义的Chain
##########################################################################
# 用户定义的chain
##########################################################################
#
# 记录并丢弃非法的包
#
$IPTABLES -N DROPPACKET # DROPPACKT chain的生成
$IPTABLES -A DROPPACKET -j LOG --log-prefix "INVALID_PACKET: " \
--log-level=6 -m limit --limit 1/s --limit-burst 10
$IPTABLES -A DROPPACKET -j DROP
#
# 检查SYNFlood攻击的chain
#
$IPTABLES -N SYNFLOOD # SYNFLOOD chain的生成
# 没有超过限定值的话返回
$IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
# 超过限定值,就视为SYNFLOOD攻击,记录并丢弃
$IPTABLES -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG \
--log-level=1 --log-prefix "SYNFLOOD: "
$IPTABLES -A SYNFLOOD -j DROP
#
# 记录非法的Flag TCP,并丢弃
#
$IPTABLES -N DROPFLAGS # DROPFLAGS chain的生成
$IPTABLES -A DROPFLAGS -j LOG --log-prefix "INVALID_FLAGS: " \
--log-level=6 -m limit --limit 1/s --limit-burst 10
$IPTABLES -A DROPFLAGS -j DROP
#
# 检查TCP Flag的非法组合
#
$IPTABLES -N CHKFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,URG URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL ALL -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL NONE -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPFLAGS
#
# 拒绝 Microsoft 网络相关的FORWARD
#
$IPTABLES -N CHKMSNET
$IPTABLES -A CHKMSNET -p tcp --dport 42 -j DROP # wins dup
$IPTABLES -A CHKMSNET -p tcp --dport 135 -j DROP # MS-RPC
$IPTABLES -A CHKMSNET -p udp --dport 135 -j DROP # MS-RPC
$IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
$IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
$IPTABLES -A CHKMSNET -p tcp --dport 139 -j DROP # SMB
$IPTABLES -A CHKMSNET -p tcp --dport 445 -j DROP # DHSMB
##########################################################################
# INPUT Chain
##########################################################################
# Localhost的话,全部许可
$IPTABLES -A INPUT -i lo -j ACCEPT
# 检查包的正确性
$IPTABLES -A INPUT -m state --state INVALID -j DROPPACKET
# 检查包是否是SYN攻击
$IPTABLES -A INPUT -p tcp --syn -j SYNFLOOD
# TCP FLAG的检查
$IPTABLES -A INPUT -p tcp -j CHKFLAGS
# 许可LAN内的连接
$IPTABLES -A INPUT -i $INNER_PORT -s $INNER_NET -j ACCEPT
# 许可已经建立的连接
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 检查是否是IP伪装
#$IPTABLES -A INPUT -i $OUTER_PORT -s $INNER_NET -j DROP
#
# 许可的服务(对外部公开的服务,在下面记述)
#
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # ssh
$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP
$IPTABLES -A INPUT -p tcp --dport 9090 -m state --state NEW -j ACCEPT # JManage
$IPTABLES -A INPUT -p tcp --dport 81 -m state --state NEW -j ACCEPT # HTTP
#$IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS
#$IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
{DNS}
# 拒绝AUTH请求
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# icmp (IN)
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
$IPTABLES -A INPUT -j LOG --log-prefix "UNDEFIND_INPUT: " \
--log-level=6 -m limit --limit 1/s --limit-burst 10
##########################################################################
# OUTPUT Chain
##########################################################################
# 许可由localhost出来的包
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# TCP FLAG的检查
$IPTABLES -A OUTPUT -p tcp -j CHKFLAGS
# 许可从服务器到Lan的连接
$IPTABLES -A OUTPUT -o $INNER_PORT -s $FWALL_IP -j ACCEPT
# 检查Microsoft网络
$IPTABLES -A OUTPUT -j CHKMSNET
# 许可已经连接的包
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 许可由服务器到互联网的新加连接
$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
# icmp(OUT)
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# 除了上面以外所有的包,都记录下来,并通过Default Policy丢弃
$IPTABLES -A OUTPUT -j LOG --log-prefix "UNDEFIND_ICMP: " --log-level=6 \
-m limit --limit 1/s --limit-burst 10
##########################################################################
# IP变换
##########################################################################
# 检查Microsoft网络
$IPTABLES -A FORWARD -j CHKMSNET
# 许可Lan内机器的IP变换
#$IPTABLES -t nat -A POSTROUTING -o $OUTER_PORT -s $INNER_NET -j MASQUERADE
# 从外部到Lan的连接,许可已经连接的FROWARD
#$IPTABLES -A FORWARD -i $OUTER_PORT -o $INNER_PORT -d $INNER_NET -m state \
# --state ESTABLISHED,RELATED -j ACCEPT
# 许可LAN到外部的连接
#$IPTABLES -A FORWARD -i $INNER_PORT -o $OUTER_PORT -s $INNER_NET -m state \
# --state NEW,ESTABLISHED,RELATED -j ACCEPT
exit 0
5 常用的服务器安全诊断工具
5.1 防范Rootkit病毒
rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统
5.2 部署chkrootkit 入侵监测系统
安装:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-*
make sense (编译,注意不是./configure)
cd ..
cp -r chkrootkit-* /usr/local/chkrootkit (将编译好的目录复制到...)
rm -rf chkrootkit (删除遗留源代码)
测试:
cd /usr/local/chkrootkit
./chkriitkit | grep INFECTED(没有显示INFECTED 一切正常)
运行监测:
在/usr/local/chkrootkit目录下./chkrootkit
让监测自动化
cd ~
vi chkrootkit (建立chkrootkit在里面输入如下内容)
#!/bin/bash
PATH=/usr/bin:/bin
TMPLOG=`mktemp`
# Run the chkrootkit
/usr/local/chkrootkit/chkrootkit > $TMPLOG
# Output the log
cat $TMPLOG | logger -t chkrootkit
# bindshe of SMTPSllHow to do some wrongs
if [ ! -z "$(grep 465 $TMPLOG)" ] && \
[ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
sed -i '/465/d' $TMPLOG
fi
# If the rootkit have been found,mail root
[ ! -z "$(grep INFECTED $TMPLOG)" ] && \
grep INFECTED $TMPLOG | mail -s "chkrootkit report in `hostname`" root
rm -f $TMPLOG
chmod 700 chkrootkit
mv chkrootkit /etc/cron.daily/ ( 将脚本移动到每天自动运行的目录中)
为了防止被入侵后chkrootkit命令被黑客更改将命令备份
cd ~
mkdir /root/commands
cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname` /root/commands/
/usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED (测试用备份命令运行)
为了安全,将命令打包压缩之后下载到本地,再将服务器端删除
cd ~
tar cvf commands.tar commands
gzip commands.tar
将commands.tar.gz 下载到本机后
rm-rf commands
若服务器端被更改,将本机commands.tar.gz上传到服务器解压
/usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED
chkrootkit的参数
Usage: ./chkrootkit [options] [testname ...]
Options:
-h show this help and exit
-V show version information and exit
-l show available tests
-d debug
-q quiet mode
-x expert mode
-r dir use dir as the root directory
-p dir1:dir2:dirN path for the external commands used by chkrootkit
-n skip NFS mounted dirs
5.3 Iptraf的使用
5.3.1 软件下载
iptraf的最新版本是2.7.0,可以从下面的地址下载wget ftp://iptraf.seul.org/pub/iptraf/iptraf-3.0.1.tar.gz
5.3.2 安装环境需要
--- gcc 2.7.2.3 or later
--- GNU C (glibc) development library 2.1 or later
--- ncurses development libraries 4.2 or later
可以在linux下执行:
# rpm -qa | grep gcc
# rpm -qa | grep glibc
# rpm -qa | grep ncurses
如果没有,则请安装
5.3.3 安装
将下载得到的iptraf-2.7.0.tar.gz上传到你所要安装的机器上,我的是防火墙的 /home/yang/ 目录
# cd /home/yang
# tar zxf iptraf-2.7.0.tar.gz
# cd iptraf-2.7.0
# ./Setup
至此,安装完毕
安装程序会将执行程序安装到 /usr/local/bin 目录下,并创 /var/local/iptraf 目录放置iptraf的配置文 件,同时创建 /var/log/iptraf 目录放置iptraf产生的日志文件
5.3.4 运行iptraf
确认环境变量的PATH变量包含路径 /usr/local/bin
# iptraf
运行iptraf后会产生一个字符界面的菜单,点击 x 可以退出 iptraf,
各菜单说明如下:
■菜单Configure...
在这里可以对 iptraf 进行配置,所有的修改都将保存在文件:/var/local/iptraf/iptraf.cfg 中
--- Reverse DNS Lookups 选项,对IP地址反查 DNS名,默认是关闭的
--- TCP/UDP Service Names 选项,使用服务器代替端口号,例如用www 代替80,默认是关闭的
--- Force promiscuous 混杂模式,此时网卡将接受所有到达的数据,不管是不是发给自己的。
--- Color 终端显示彩色,当然用telnet ,ssh连接除外,也就是用不支持颜色的终端连接肯定还是没有 颜色。
--- Logging 同时产生日志文件,在/var/log/iptraf 目录下
--- Activity mode 可以选择统计单位是kbit/sec 还是 kbyte/sec
--- Source MAC addrs in traffic monitor 选择后,会显示数据包的源MAC地址
■菜单Filters...
在这里可以设置过滤规则,这是最有用的选项了,当你从远端连入监控机时,自己的机器与监控机会产生源源不断的tcp数据包,有时很令人讨厌,此时你就可以将自己的ip地址排除在外。
它包括六个选项,分别是:Tcp、Udp、Other IP、ARP、RARP、Non-ip。我们以TCP为例说明,其他选项的配置都很相似。
--- Defining a New Filter
选择Defining a New Filter后,会出来一对话框,要求填入对所建的当前规则的描述名,然后回车确定,Ctrl+x取消
再接着出现的对话框里,Host name/IP address:的First里面填源地址,Second里填目标地址,Wildcard mask 的两个框里面分别是源地址和目标地址所对应的掩码,注意,这里的地址即可以是单个地址,也可以是一个网段,如果是单个IP,则相应的子网掩码要填成255.255.255.255,如果是一个网段,则填写相应的子网掩码:例如,想表示192.168.0.0,有256个IP地址的网段,则填写192.168.0.0,子网是:255.255.255.0,其他类推,All则用0.0.0.0,子网也是0.0.0.0表示。
Port:栏要求填入要过滤的端口号,0表示任意端口号
Include/Exclude栏要求填入I或者E,I表示包括,E表示排除
填写完毕,回车确认,Ctrl+x取消
--- Applying a Filter
我们在上一步定义的一个或多个过滤规则会存储为一个过滤列表,在没有应用之前并不起作用,我们可以在这里选择我们应用那些过滤规则。所有应用的规则会一直起作用,即使重新启动iptraf。我们可以执行Detaching a Filter来取消执行当前所有应用的规则。
--- Editing a Defined Filter 编辑一个已经存在的规则
--- Deleting a Defined Filter 删除一个已经定义的规则
--- Detaching a Filter 取消执行当前所有应用的规则
■菜单IP Traffic Monitor
IP数据包流量实时监控窗口,注意这里会监控所有的来往数据包,包括自己的,所以,如果你使用远程终端连接上来的话,你和监控机将会源源不断的产生数据流,因此建议在Filters...菜单中将自己的IP过滤掉,是它不产生影响。在这里可以实时的看到每一个连接的流量状态,它有两个窗口,上面的是TCP的连接状态,下面的窗口可以看到UDP、ICMP、OSPF、IGRP、IGP、IGMP、GRE、ARP、RARP的数据包。可以点击s键选择排序,可以按照包的数量排序,也可按照字节的大小排序,如果因为它是实时变化的而导致看不太清楚的话,可以在Configure菜单中把Logging功能打开,它就会在/var/log/iptraf 目录中记录日志,以方便你在日后查看,当Logging功能打开后,当你开始监控IP Traffic时,程序会提示你输入Log文件的文件名,默认的是ip_traffic-1.log。
在一个比较繁忙的网络里,显示的结果可能很乱,以至于你很难找到自己感兴趣的数据,这时可以使用Filters菜单,来过滤显示的数据。
■菜单General Interface Statistics
这里显示每个网络设备出去和进入的数据流量统计信息,包括总计、IP包、非IP包、Bad IP包、还有每秒的流速,单位是kbit/sec或者是kbyte/sec ,这由Configure菜单的Activity选项决定。
如果设置了Filter选项,这里也受到影响
■菜单Detailed Interface Statistics
这里包括了每个网络设备的详细的统计信息,很简单,不再赘述。
■Statistical Breakdowns
这里提供更详细的统计信息,可以按包的大小分类,分别统计;也可以按Tcp/Udp的服务来分类统计。