您的当前位置:首页正文

linux系统安全操作指南

2024-01-26 来源:好走旅游网


Linux系统

第 1 页 共 47 页Linux系统安全手册

安全操作指南

Linux系统安全手册

目录

使用说明 ........................................................................................................................................................ 4 第一章 LINUX系统安全安装 .................................................................................................................... 5 1.1 准备工作 ............................................................................................................................................. 5 1.2 安装操作系统 ..................................................................................................................................... 5 1.3 安装后的工作 ..................................................................................................................................... 6 第二章 LINUX系统安全配置 .................................................................................................................... 8 2.1 用户帐户安全 ..................................................................................................................................... 8 2.1.1 密码安全策略.............................................................................................................................. 8 2.1.2 检查密码是否安全 ...................................................................................................................... 8 2.1.3 Password shadowing ..................................................................................................................... 8 2.1.4 管理密码...................................................................................................................................... 8 2.1.5其他............................................................................................................................................... 9 2.2系统参数设置安全 .............................................................................................................................. 9 2.2.1限制控制台的使用 ....................................................................................................................... 9 2.2.2 系统关闭Ping ........................................................................................................................... 10 2.2.3关闭或更改系统信息 ................................................................................................................. 10 2.2.4 /etc/securetty文件 ...................................................................................................................... 10 2.2.5 /etc/host.conf文件 ...................................................................................................................... 10 2.2.6禁止IP源路径路由 .................................................................................................................... 11 2.2.7资源限制...................................................................................................................................... 11 2.2.8 LILO安全.................................................................................................................................... 11 2.2.9 Control-Alt-Delete 键盘关机命令............................................................................................. 12 2.2.10 日志系统安全.......................................................................................................................... 12 2.2.11 修正脚本文件在“/etc/rc.d/init.d”目录下的权限 .................................................................. 13 2.3 文件系统安全 ................................................................................................................................... 13 2.3.1 文件权限.................................................................................................................................... 13 2.3.2 控制mount上的文件系统........................................................................................................ 13 2.3.3 备份与恢复................................................................................................................................ 14 2.4 网络服务安全 ................................................................................................................................... 14 2.4.1 服务过滤.................................................................................................................................... 14 2.4.2 /etc/inetd.conf .............................................................................................................................. 15 2.4.3 R 服务 ........................................................................................................................................ 15 2.4.4 Tcp_wrapper ................................................................................................................................ 16 2.4.5 /etc/hosts.equiv 文件.................................................................................................................. 16 2.4.6 /etc/services ................................................................................................................................. 17 2.4.7 /etc/aliases ................................................................................................................................... 17 2.4.8 NFS ............................................................................................................................................. 17

第 2 页 共 47 页

Linux系统安全手册

2.4.9 Trivial ftp (tftp) ........................................................................................................................... 18 2.4.10 Sendmail .................................................................................................................................... 18 2.4.11 finger ......................................................................................................................................... 19 2.4.12 UUCP ........................................................................................................................................ 19 2.4.13 World Wide Web (WWW) – httpd ............................................................................................ 19 2.4.14 FTP安全问题 ........................................................................................................................... 20 2.5 日志审计 ........................................................................................................................................... 20 2.5.1 系统记帐.................................................................................................................................. 21 2.5.2 系统日志.................................................................................................................................. 21 第三章 系统管理员的日常安全工作 ........................................................................................................ 24 3.1 安全补丁 ........................................................................................................................................... 24 3.2 监测 ................................................................................................................................................... 24 3.3 配置 ................................................................................................................................................... 26 3.4 审计 ................................................................................................................................................... 26 3.5 借助工具 ........................................................................................................................................... 26 第四章 第三方工具的使用 ........................................................................................................................ 28 4.1 防火墙-IPCHAINS构建防火墙 ........................................................................................................ 28 4.2 入侵检测系统-SNORT..................................................................................................................... 32 4.3 完整性检查工具-TRIPWIRE .............................................................................................................. 36 4.4 访问控制工具-TCP_WRAPPER ............................................................................................................. 40 4.5 加密数据传输-OPENSSH .................................................................................................................... 43 4.6 日志监控工具-LOGCHECK .............................................................................................................. 45

第 3 页 共 47 页

Linux系统安全手册

使用说明

本手册旨在提供Linux系统安全安装、安全配置和安全管理的操作指南,读者应当具备UNIX系统基本知识,了解认证、授权、审核和数据保护等概念。

第 4 页 共 47 页

Linux系统安全手册

第一章 Linux系统安全安装

1.1 准备工作

-使事情尽量简单化:

最好的期望是在主机上只运行一或者两个服务。并且把运行的服务尽量在分散在多台机器,因为这样要比在所有事情都同在一台机器上运行要安全的多,这样可以方便的隔离应用程序,使其更牢固,更容易查找错误和升级软硬件。一切运行的规则是你所需服务的最低限度要求。

-硬件部分:

如果你有Sun/SPARC硬件,考虑通过串行口控制台(console)来进行安装,去掉键盘屏幕和帧缓冲区(framebuffer),避免使用X11并是使用熟悉的命令行进行操作。

-安全地下载:

安全过程需要在一个隔离的或者没有路由网络来安装,在这种情况下,你可以通过控制台以ROOT身份FTP到系统,或者从新的系统中下载。如果你没有隔离的网络(这通常不推荐),那就改变ROOT的密码以方便的下载文件,完成后再次改变密码,马上关闭网络系统。这样就减少存在潜在攻击者危险的机会。

-明确知道系统究竟要干什么和硬件将被怎样配置等等,着重注意一些如要调用RPC的应用程序。

-理解应用程序是怎样工作是非常重要的一步(他们使用的端口,设备和文件)。判断使用某些程序有可能所承受的安全风险。

使系统处于单独(或隔离)的网络中。以防止未受保护的系统连接到其它网络或互联网中受到可能的攻击

1.2 安装操作系统

在x86硬件上,屏幕,键盘和鼠标是必须的,从CDROM或者启动软盘启动并选择安装。在SPARC硬件上,整个的安装可以不使用屏幕和键盘(称为\"headless sever\"),连接串口控制台,开机,通过发送Stop-A(如~#,~%b或者F5,具体是依据你是使用tip,cu或者vt100终端)出现OK提示符,再开始安装过程:boot cdrom -安装。

第 5 页 共 47 页

Linux系统安全手册

REDHAT的安装过程有点不符常理并且安装版本的不同,选项也各有不同:

-理论上\"定制安装(custom install)\"是用来安装一些需要的模块,但其中有点不正常,如FTP服务器没有安装(在SPARC版本中,可以使用rpm -i /mnt/cdrom/RedHat/RPMS/wu-ftpd -2.6.0-1.sparc.rpm)来进行修正。

-Gnome永远是被安装的,即使你选者KDE或者选者不包括GNOME。可以使用startx 来启动GNOME和使用kde来启动KDE

-在所有安装模式中,国际键盘映射对于命令行和GUI没有进行正确的设置。

在此,选择server或者custom安装,设置主机名,IP参数,时区等等。不要激活任何名字服务如NIS和NFS,选择手工磁盘分区:

-考虑一个独立的,容量较大的/var文件系统作为syslog/web/news/proxy服务或者防火墙过滤器。

-一些包含很多数据的服务,如WEB,FTP,应该使用独立的磁盘来进行数据处理

-如果你不想要以只读方式来安装(mount)分区,并且没有LOG记录数据和应用程序数据,就考虑把整个启动盘放在根目录下。

-对于2G磁盘的分区建议:500MB/(root+var),200MB交换分区,1300MB/usr分区. -对于1G磁盘的分区建议: 300MB/(root+var),200MB交换分区,500MB/usr分区.

-推荐使用8G大小来作为LOG服务器空间数据:100MB/root,300MB/交换分区, 800MB/usr,6.9G/var

为ROOT设置一个强壮的密码(至少8个由字母,数字和标点符号组成),建立一个额外的test用户,因为你不能通过以ROOT身份来登录网络。

\"init level\"必须设置为3级(是命令行登录级别),这比设置为5(图形形式登录级别)更安全,如果确实需要GUI,可以使用startx手工来启动GUI系统.

通过串行端口登录对于安装故障检查和熟悉命令行是很有帮助的.想要在X86硬件上通过串行口A来进行登录,可以在/etc/inittab增加下面的一行文字: con:23:respawn:/sbin/getty ttyS0 VC

上面的设置对于SPARC机器是不需要的,因为SPARC机是自动配置好这工作的,如果 要允许通过这个串行口来允许ROOT登录,则必须在/etc/securetty增加ttsS0.

1.3 安装后的工作

安装完成后将下面软件卸载 pump apmd lsapnptools redhat-logos mt-st kernel-pcmcia-cs Setserial redhat-relese eject linuxconf kudzu gd bc getty_ps raidtools pciutils

第 6 页 共 47 页

Linux系统安全手册

mailcap setconsole gnupg 用下面的命令卸载这些软件:

[root@deep]#rpm –e softwarename 卸载它们之前最好停掉三个进程: [root@deep]# /etc/rc.d/init.d/apmd stop [root@deep]# /etc/rc.d/init.d/sendmail stop [root@deep]# /etc/rc.d/init.d/kudzu stop

第 7 页 共 47 页

Linux系统安全手册

第二章 Linux系统安全配置

2.1 用户帐户安全

2.1.1 密码安全策略

z 口令至少为6位,并且包括特殊字符

z 口令不要太简单,不要以你或者有关人的相关信息构成的密码,比如生日、电话、

姓名的拼音或者缩写、单位的拼音或者英文简称等等。 z 口令必须有有效期

z 发现有人长时间猜测口令,需要更换口令

2.1.2 检查密码是否安全

可以使用以下几种工具检查自己的密码是否安全: z JOHN,crack等暴力猜测密码工具

z 在线穷举工具,包括Emailcrk、流光等

2.1.3 Password shadowing

z 使用shadow来隐藏密文(现在已经是默认配置) z 定期检查shadow文件,如口令长度是否为空。

#awk -F: length($2)==0 {print $1} /etc/shadow z 设置文件属性和属主

2.1.4 管理密码

z 设置口令有效最长时限 (编辑/etc/login.defs文件)

z 口令最短字符 (如linux默认为5,可以通过编辑/etc/login.defs修改) z 只允许特定用户使用su命令成为root。

编辑/etc/pam.d/su文件,在文件头部加上: auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel

Red hat 7.0中su文件已做了修改,直接去掉头两行的注释符就可以了

第 8 页 共 47 页

Linux系统安全手册

[root@deep]# usermod -G10 admin来将用户加入wheel组

2.1.5其他

z

清除不必要的系统帐户 [root@deep]# userdel adm [root@deep]# userdel lp [root@deep]# userdel sync

[root@deep]# userdel shutdown [root@deep]# userdel halt [root@deep]# userdel news [root@deep]# userdel uucp [root@deep]# userdel operator [root@deep]# userdel games (如果不使用 X Window,则删除) [root@deep]# userdel gopher [root@deep]# userdel ftp (如果不使用ftp服务则删除)

尽量不要在passwd文件中包含个人信息,防止被finger之类程序泄露。 修改shadow,passwd,gshadow文件不可改变位 [root@deep]# chattr +i /etc/passwd [root@deep]# chattr +i /etc/shadow [root@deep]# chattr +i /etc/group [root@deep]# chattr +i /etc/gshadow

不要使用.netrc文件,可以预先生成$HOME/.netrc。设置为0000。 touch /.rhosts ;chmod 0 /.rhosts

使用ssh来代替telnetd,ftpd.pop等通用服务。传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据。

z z

z z

2.2系统参数设置安全

2.2.1限制控制台的使用

禁止使用控制台程序:删除/etc/security/console.apps中的服务 [root@deep]# rm -f /etc/security/console.apps/servicename, 比如:[root@deep]# rm -f /etc/security/console.apps/halt

[root@deep]# rm -f /etc/security/console.apps/poweroff [root@deep]# rm -f /etc/security/console.apps/reboot [root@deep]# rm -f /etc/security/console.apps/shutdown

[root@deep]# rm -f /etc/security/console.apps/xserver(如删除,只有root能启动

第 9 页 共 47 页

Linux系统安全手册

Xserver)

禁止控制台的访问:在/etc/pam.d中的所有文件中,给包含pam_console.so的行加上注释

2.2.2 系统关闭Ping

关闭ping,使系统对ping不做反应,对网络安全大有好处。 可以使用如下命令:

[root@deep]#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

可以将这一行加到/etc/rc.d/rc.local文件中去,这样系统重启动后会自动执行 恢复系统的Ping响应:

[root@deep]#echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

2.2.3关闭或更改系统信息

关闭telnet系统信息

Red Hat 6.2中,编辑/etc/inetd.conf

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd –h 加上参数-h可以关闭telnet信息 Red Hat 7.0中,编辑/etc/xinetd.d/telnet 加上server_args = -h,可以关闭telnet信息 /etc/rc.d/rc.local中关闭或修改系统信息

/etc/issue和/etc/issue.net中包含本地登录和网络登录时提示的系统信息,对它们进行更改可以改变系统信息,或直接删除,并在/etc/rc.d/rc.local文件中注释相关行: #echo \"\" > /etc/issue #echo \"$R\" >> /etc/issue

#echo \"Kernel $(uname -r) on $a $(uname -m)\" >> /etc/issue #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue

2.2.4 /etc/securetty文件

/etc/securetty文件规定root从哪个TTY设备登录,列出的是允许的tty设备,将不允许的tty设备行注释掉.

2.2.5 /etc/host.conf文件

/etc/host.conf定义主机名怎样解析,使用什么服务,什么顺序解析

第 10 页 共 47 页

Linux系统安全手册

# Lookup names via DNS first then fall back to /etc/hosts. order bind,hosts

# We have machines with multiple IP addresses. multi on

# Check for IP address spoofing. nospoof on

order指定选择服务的顺序

multi指定主机能不能有多个IP地址,ON代表允许 nospoof指定不允许IP伪装,此参数必须设置为ON

2.2.6禁止IP源路径路由

允许IP源路径路由(IP source routing)会使得黑客能够欺骗你的计算机,截取信息包.强烈建议禁止,使用如下命令:

for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $f done

将accept_source_route设置为0,并将上述命令加到/etc/rc.d/rc.local中去,每次重启动将自动执行

2.2.7资源限制

为了避免拒绝服务攻击,需要对系统资源的使用做一些限制。 首先,编辑/etc/security/limits.conf,加入或改变如下 * hard core 0 (禁止创建core文件) * hard rss 5000 (除root外,其他用户最多使用5M内存) * hard nproc 20 (最多进程数限制为20) 编辑/etc/pam.d/login,在文件末尾加上: session required /lib/security/pam_limits.so

对TCP SYN Cookie的保护:(防止SYN Flood攻击) [root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

2.2.8 LILO安全

在“/etc/lilo.conf”文件中添加3个参数:time-out、restricted 和 password。这些选项会在启动时间(如“linux single”)转到启动转载程序过程中,要求提供密码。 步骤1

编辑lilo.conf文件(/etc/lilo.conf),添加和更改这三个选项:

第 11 页 共 47 页

Linux系统安全手册

boot=/dev/hda map=/boot/map install=/boot/boot.b

time-out=00 #change this line to 00 prompt

Default=linux restricted #add this line

password= #add this line and put your password image=/boot/vmlinuz-2.2.14-12 label=linux

initrd=/boot/initrd-2.2.14-12.img root=/dev/hda6 read-only

步骤2

由于其中的密码未加密,“/etc/lilo.conf”文件只对根用户为可读。 [root@kapil /]# chmod 600 /etc/lilo.conf (不再为全局可读)

步骤3

作了上述修改后,更新配置文件“/etc/lilo.conf”。 [Root@kapil /]# /sbin/lilo -v (更新lilo.conf文件)

步骤4

还有一个方法使“/etc/lilo.conf”更安全,那就是用chattr命令将其设为不可: [root@kapil /]# chattr +i /etc/lilo.conf

它将阻止任何对“lilo.conf”文件的更改,无论是否故意。

2.2.9 Control-Alt-Delete 键盘关机命令

编辑“/etc/inittab”文件,只要在下面行前面加“#”,改为注释行。 ca::ctrlaltdel:/sbin/shutdown -t3 -r now 改为:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 然后,为使更改生效,在提示符下输入: [root@kapil /]# /sbin/init q

2.2.10 日志系统安全

为了保证日志系统的完整性,防止黑客删除日志,需要对日志系统进行安全配置。

第 12 页 共 47 页

Linux系统安全手册

2.2.11 修正脚本文件在“/etc/rc.d/init.d”目录下的权限

对脚本文件的权限进行修正,脚本文件用以决定启动时需要运行的所有正常过程的开启和停止。添加:[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*

这句指的是,只有根用户允许在该目录下使用 Read、Write,和 Execute 脚本文件。

2.3 文件系统安全

2.3.1 文件权限

z 去掉不必要的suid程序,可以通过脚本查看

[root@deep]# find / -type f \\( -perm -04000 -o -perm -02000 \\) \\-exec ls –lg {}\\; 通过下面的命令来去掉不需要的程序的‘s’位 [root@deep]# chmod a-s /usr/bin/commandname

z 重要的配置文件如/etc/passwd,/etc/shadow,/etc/inetd.conf等设置为0755,并设置为不

可更改

z /etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin, /tmp and/var/tmp的属主是root,并且设置粘

滞。

z /dev目录下没有特殊文件。 z 查找任何人可写的文件和目录

[root@deep]# find / -type f \\( -perm -2 -o -perm -20 \\) -exec ls -lg {} \\; [root@deep]# find / -type d \\( -perm -2 -o -perm -20 \\) -exec ls -ldg {} \\; z 查找异常文件,如..文件,…文件等 find / -name \".. \" -print –xdev

find / -name \".*\" -print -xdev | cat -v z 检查没有属主的文件。 Find / -nouser –o –nogroup

z 检查在/dev目录以外还有没有特殊的块文件 find / \\( -type b -o -type c \\) -print | grep -v '^/dev/' z 使用checksum md5 或者PGP来效验文件

2.3.2 控制mount上的文件系统

可以使用noexec, nodev, nosuid来控制mount上的文件系统.在/etc/fstab中设置,比如:

将/dev/sda11 /tmp ext2 defaults 1 2 /dev/sda6 /home ext2 defaults 1 2

改为:/dev/sda11 /tmp ext2 nosuid,nodev,noexec 1 2

第 13 页 共 47 页

Linux系统安全手册

/dev/sda6 /home ext2 nosuid,nodev 1 2

noexec表示不允许可执行,nodev表示不允许块设备,nosuid表示不允许suid位

2.3.3 备份与恢复

定期对文件系统进行备份,可以将损失减小到最小程度。 Linux下有多种方法进行备份,如:dd, cpio, tar, dump等

2.4 网络服务安全

Linux系统对外提供强大、多样的服务,由于服务的多样性及其复杂性,在配置和管理这些服务时特别容易犯错误,另外,提供这些服务的软件本身也存在各种漏洞,所以,在决定系统对外开放服务时,必须牢记两个基本原则:

z 只对外开放所需要的服务,关闭所有不需要的服务。对外提供的服务越少,所面

临的外部威胁越小。

z 将所需的不同服务分布在不同的主机上,这样不仅提高系统的性能,同时便于配

置和管理,减小系统的安全风险。

在上述两个基本原则下,还要进一步检查系统服务的功能和安全漏洞。

这里针对主机所提供的服务进行相应基本安全配置,某些常用服务的安全配置请参考相关文档。

2.4.1 服务过滤

z 在SERVER上禁止这些服务

z 如果一定要开放这些服务,通过防火墙、路由指定信任IP访问。 z 要确保只有真正需要的服务才被允许外部访问,并合法地通过用户的路由器过滤检

查。尤其在下面的服务不是用户真正需要时候,要从路由器上将其过滤掉 NAME PORT PROTOCOL

echo 7 TCP/UDP systat 11 TCP netstat 15 TCP bootp 67 UDP tftp 69 UDP link 87 TCP supdup 95 TCP sunrpc 111 TCP/UDP news 144 TCP snmp 161 UDP

第 14 页 共 47 页

Linux系统安全手册

xdmcp 177 UDP exec 512 TCP

login 513 TCP

shell 514 TCP printer 515 TCP biff 512 UDP who 513 UDP syslog 514 UDP uucp 540 TCP route 520 UDP openwin 2000 TCP nfs 2049 UDP/TCP x11 6000 to 6000+n TCP

注意:有些UDP服务可以导致DOS攻击和远程溢出,如

rpc.ypupdated rpcbind

rpc.cmsd 100068 rpc.statd 100024 rpc.ttdbserver 100083 sadmind 100232/10

z 配置完成以后,利用网络扫描器模拟入侵者从外部进行扫描测试。如利用nmap

2.4.2 /etc/inetd.conf

z z z z

确保文件权限设置为600 确保文件属主设置为root

注释掉所有不需要的服务,需要重新启动inetd进程

使用netstat –an命令,查看本机所提供的服务。确保已经停掉不需要的服务

2.4.3 R 服务

不必使用R服务

z 关闭R服务,Red hat 6.2在/etc/inetd.conf文件中注释以下服务,并且重新启动inetd

服务。Red hat 7.0在/etc/xinetd.d目录中删除 exec 512 TCP Rlogin 513 TCP Rshell 514 TCP z 预先生成$HOME/.rhosts,/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。

(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保

第 15 页 共 47 页

Linux系统安全手册

护主机的R服务) 必须使用R服务

z 使用更安全版本的r服务。如Wietse Venema的logdaemon程序等。

z 在路由或者防火墙上禁止外部网络访问受保护主机的512,513 and 514 (TCP)端口。 z 使用TCP WRAPPERS设置可访问受保护主机R服务的信任机器。

2.4.4 Tcp_wrapper

该软件的作用是在Unix平台上过滤TCP/UDP服务,它目前已被广泛用于监视并过滤发生在主机上的ftp、telnet、rsh、rlogin、tftp、finger等标准TCP/UDP服务。

当系统安装TCP_wrapper之后,in.conf文件中 /usr/sbin/in.telnetd的in.telnetd会被TCP_wrapper附带的tcpd程序取代。该程序截获来自客户端的服务请求、记录请求发生的时间和IP地址,并按访问控制进行检查。当本次连接的用户、请求源的IP等信息符合管理员的预设值时,才将该次请求传递给系统in.telnetd,由系统in.telnetd完成后续工作;若连接不符合要求,该连接请求将被拒绝。同样,ftp、 rsh等TCP/UDP服务均可被tcpd取代,由tcpd充当二传手。

z 使用PARANOID 模式,用此参数后需要在/etc/hosts文件中加上允许使用telnet或ftp

服务的客户端的名字和IP地址

z 在/etc/hosts.deny中设置为all:all,默认所有不允许

Access is denied by default. # Deny access to everyone.

ALL: ALL@ALL, PARANOID #Matches any host whose name does not match its address, see bellow.

z 在/etc/hosts.allow中设置允许的服务和地址

如:sshd: 208.164.186.1 gate.openarch.com z 使用tcpdchk检查

z UDP服务使用tcpwrapper时要使用/etc/inetd.conf中的nowait选项。

2.4.5 /etc/hosts.equiv 文件

不必使用/etc/hosts.equiv文件

z 从系统中删除此文件

z 预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使

用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务) 必须使用/etc/hosts.equiv文件

z 确保此文件中可信赖主机为必须的。

第 16 页 共 47 页

Linux系统安全手册

z 预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使

用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务) z 如果使用NIS或者NIS+的话,此文件中的组应该是容易管理的。 z 信赖主机必须确保可靠

z 信赖主机使用全名,如例如 hostname.domainname.cn

z 任何时候都不应该出现”+”字符,因为这样会使任何一台主机上的任何用户都可以

不加口令地访问系统

z 文件中不要使用'!' 和'#'符号,因为在该文件中那并不表示注释信息 z 文件开始字符不应该为'-'.,请查阅C8 z 确保该文件的访问权限被设置成600。 z 文件属主确保为ROOT。

z 在每次安装补丁程序或操作系统之后,都应该重新检查该文件夹的设置情况

2.4.6 /etc/services

z 确保文件权限设置为600 z 确保文件属主设置为root

z 如果需要提供一些常见服务,如telnetd等,可以在此修改端口

此文件为端口号和服务的对应关系,给此文件加上保护,避免没有授权的修改和删除 [root@deep]# chattr +i /etc/services

2.4.7 /etc/aliases

z z z z

修改/etc/aliases文件,注释掉\"decode\" \"games,ingress,system,toor,manager,….”.等 使用/usr/bin/newaliases命令激活新配置 确保文件权限设置为755 确保文件属主设置为root

2.4.8 NFS

NFS文件系统应注意以下几方面的安全

z 在外部路由上过滤端口111、2049 (TCP/UDP),不允许外部访问。 z 检查PATCH更新情况。

z 检查 /etc/exports 输出路径的权限,确定只有root能修改, all user只能read z 用exportfs 去增加或删除directories

exportfs -o access=engineering,ro=dancer /usr exportfs -u /usr

z 假如你的机器没有NIS(YP server)的服务,当更改资料时记得修改

/etc/passwd /etc/group

第 17 页 共 47 页

Linux系统安全手册

z z z z z z

/etc/hosts /etc/ethers

不允许export出去包含本地入口的目录 确定对方机器是完全可信赖的。使用全名 确保输出列表没有超过256个字符。

使用showmount –e命令查看自己的export设置 将/etc/exports权限设置为644,属主为root

使用noexec,nodev.nosuid等选项控制mount的文件系统,在/etc/fstab中设置。

2.4.9 Trivial ftp (tftp)

无论何种情况下都不应该启动这个服务进程。

2.4.10 Sendmail

sendmail提供了许多在编译期间选择的功能特性。通常情况下,按照其缺省配置,即可满足一般用户的需要。但是,了解研究其提供的特性,可以实现对sendmail许多功能的更为准确的配置使用。从网络安全的角度考虑,通过合理地配置有关特性,可以在提供服务和保证安全之间找到更为准确的平衡点(配置特性的方法是将需要的特性加入到相应系统的.mc文件中,然后利用工具m4生成最终的sendmail.cf文件。目前最新版本是sendmail8.11.1.(www.sendmail.org) z 最新的发行包

z promiscuous_relay:该特性打开任意转发功能,也即关闭8.9带来的邮件转发方面

的安全增强控制。此特性的使用会对电子邮件服务的滥用留下许多隐患,建议除非特别情况,不要使用此特性。

z accept_unqualified_senders:缺省情况下,该特性被关闭,即当MAIL FROM:参数

中的地址表明属于网络连接,但是却不包含合法的主机地址时,sendmail将拒绝继续通信。打开此特性则不再根据MAIL FROM:参数拒绝接收邮件。建议不可轻易使用该特性。

z loose_relay_check :通常情况下,当邮件使用了源路由功能,例如user%site@othersite,

如果othersite属于转发邮件的范围,则sendmail将分离othersite,继续检查site是否属于转发范围.使用该特性将改变上述缺省操作.建议不要轻易使用该特性 z accept_unresolvable_domains :通常情况下,当MAIL FROM:参数中的主机地址部分

无法解析,即无法判定为合法主机地址时,sendmail将拒绝连接.使用该特性将改变上述操作. 在某些情况下,例如,邮件服务器位于防火墙后面,无法正常解析外部主机地址,但是仍然希望能够正常接收邮件时,可能需要利用该特性.

z blacklist_recipients :打开接收黑名单功能。接收黑名单可以包括用户名、主机名、

或其它地址。

z relay_entire_domain :缺省配置下,sendmail只为在转发控制数据库(access db)中定

义为RELAY的主机提供转发邮件服务. 该特性的使用,将使sendmail为本地域内(由$=m类定义)的所有主机上面的用户提供转发功能

第 18 页 共 47 页

Linux系统安全手册

z z z z

sendmail的受限shell程序smrsh可以防止内部用户恶意操作。 防止系统信息泄漏,如修改banner,禁止expn,vrfy命令 建议配置为需要smtp认证功能。 其他相关的mailserver qmail: www.qmail.org postfix: www.postfix.org

qpop: http://www.qpopper.org/ Imail:http://www.imailbox.com/

2.4.11 finger

z 不应该启动这个服务进程。

z 如果一定要使用,请使用最新的版本。

2.4.12 UUCP

z z z z z

建议不要使用

删除所有的rhosts文件(UUCP目录下的) 确保.cmds 文件属主为root 对UUCP登陆进行限制

确保UUCP文件没有被设置为所有人可写

2.4.13 World Wide Web (WWW) – httpd

z z z z z z z z

比较流行的webserver是 apache http://www.apache.org

netscpe的web server 和browser http://home.netscape.com/enterprise/v3.6/index.html IETF的Web事务安全工作组维持着一个特别针对WWW安全问题的邮寄列表. 要订阅,可发e-mail到www-security-request@nsmx.rutger.edu.在信息的 正文里写上

SUBSCRIBE www-security 你的email地址

主要的WWW FAQ也包含关于Web安全的问与答,如记录文件管理和服务软件来源等.

使用你选择的WEBSERVER的最新版本 不要使用ROOT用户运行httpd 在chroot环境中运行httpd 尽量不要使用CGI脚本 对CGI脚本进行安全审计 链接使用静态库

过滤危险字符,如\\n \\r (.,/;~!)>|^&$`< 等 使用https进行关键业务传送。

第 19 页 共 47 页

Linux系统安全手册

这个FAQ的最新版在: http://www.boutell.com/faq/

2.4.14 FTP安全问题

主要的ftpserver

z wuftp 最新版本是26.1

下载地址是ftp://ftp.wu-ftpd.org/pub/wu-ftpd-attic/wu-ftpd-2.6.1.tar.gz z proftp 最新版本是1.2.0rc2

下载地址是ftp://ftp.proftpd.net/pub/proftpd z ncftp 最新版本是2.6.3

下载地址是http://www.ncftp.com/ncftpd/ 配置Configuration z z z z z z z z z z z

检查所有的默认配置选项 确定没有SITE EXEC问题

设置/etc/ftpusers确定禁止使用ftp的用户 使用chroot环境运行ftpd 使用自己的ls等命令 加入对quota,pam等支持

配置/etc/ftpaccess文件,禁止系统信息泄露和设置最大连接数 配置/etc/ftphosts,设置允许使用FTP的HOST和USER 针对不同用户设置不同权限

经常查看LOG记录 /var/log/xferlog 配置文件属性改为600

Anonymous ftp

z 编译时打开允许匿名选项

z 如果使用分布式passwords (e.g., NIS, NIS+),需要设置好密码文件。 z 匿名用户只给读权限(在/etc/ftpaccess中设置)

2.5 日志审计

经过安全安装和配置的服务器,总的说来应该是比较安全的,但是总有攻击者可以利用一些方法侵入系统,例如利用新的系统漏洞,管理员的疏忽,配置上的问题等等。但是攻击者的一举一动都会被记录在系统日志中,对管理员来说,系统日志就是最后一道防线。正因为系统日志如此重要,攻击者在成功入侵系统后首先要作的就是修改或删除系统日志。所以如何保护系统日志的安全就是管理员的重要工作之一。

第 20 页 共 47 页

Linux系统安全手册

2.5.1 系统记帐

系统记帐主要非为两类: 󰂋 连接记帐

连接记帐是跟踪当前用户当前对话、用户登录和退出的活动。在Linux系统中使用utmp(动态用户对话)和wtmp(登录/退出日志记录)工具来完成这一记帐过程。Wtmp工具同时维护重新引导和系统状态变化信息。各种程序对这些工具进行刷新和维护,因此无须进行特殊的后台进程或程序。然而,utmp和wtmp输出结果文件必须存在,如果这些文件不存在会关闭连接记帐。与utmp和wtmp有关的所有数据将分别保存在/var/run/utmp和/var/log/wtmp中。这些文件归根用户所有。这些文件中的数据是用户不可读的,但也有工具可以转换成可读的形式。

󰂋 进程记帐

进程记帐是对进程活动的记录,原数据保存在/var/log/pacct文件中,其许可权限为600。该文件的存在是进程记帐有效的保障,与连接记帐不同,进程记帐必须处于打开状态。

2.5.2 系统日志

在Linux下使用各种日志文件,有些用于某些特殊用途,例如:/var/log/xferlog用于记录文件传输协议FTP的信息。其他日志文件,例如/var/log/messages文件通常包含许多系统和内核工具的输入项。这些日志文件为系统的安全状态提供了信息。

syslog系统日志工具

大部分的Linux系统中都要使用syslog工具,它是相当灵活的,能使系统根据不同的日志输入项采取不同的活动。

syslog介绍

syslog工具由一个守护程序组成。它能接受访问系统的日志信息并且根据/etc/syslog.conf配置文件中的指令处理这些信息。程序,守护进程和内核提供了访问系统的日志信息。因此,任何希望生成日志信息的程序都可以向syslog接口呼叫生成该信息。

通常,syslog接受来自系统的各种功能的信息,每个信息都包括重要级。/etc/syslog.conf文件通知syslogd如何根据设备和信息重要级别来报告信息。

etc/syslog.conf

/etc/syslog.conf文件使用下面的形式

facility.level action

空白行和以#开头的行可以忽略。Facility.level字段也被称做seletor。应该使用一次或多次tab键分隔facility和action。大部分Linux使用这些空格为分隔符。/etc/syslog.conf中有三个要素:

󰂋 facility指定syslog功能:

auth 由pam_pwdb报告的认证活动。

第 21 页 共 47 页

Linux系统安全手册

authpriv 包括特权信息如用户名在内的认证活动 cron 与cron和at有关的信息。

daemon 与inetd守护进程有关的信息。 kern 内核信息,首先通过klogd传递。 lpr 与打印服务有关的信息。 mail 与电子邮件有关的信息

mark syslog内部功能用于生成时间戳 news 来自新闻服务器的信息 syslog 由syslog生成的信息 user 由用户程序生成的信息 uucp 由uucp生成的信息

local0----local7 与自定义程序使用,例如使用local5做为ssh功能 󰂋 syslog级别:

emerg或panic 该系统不可用

alert 需要立即被修改的条件

crit 阻止某些工具或子系统功能实现的错误条件 err 阻止工具或某些子系统部分功能实现的错误条件 warning 预警信息

notice 具有重要性的普通条件 info 提供信息的消息

debug 不包含函数条件或问题的其他信息 none 没有重要级,通常用于排错 󰂋 syslog主要支持以下活动 file 指定文件的绝对路径

terminal或print 完全的串行或并行设备标志符 @host 远程的日志服务器

username 发送信息到使用write的指定用户中

named pipe 指定使用mkfifo 命令来创建的FIFO文件的绝对路径。

调用syslogd守护程序

syslog守护程序是由/etc/rc.d/init.d/syslog脚本在运行级2下被调用的,缺省不使用选项。但有两个选项-r和-h很有用。

如果将要使用一个日志服务器,必须调用syslogd –r.缺省情况下syslog不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。

如果还希望日志服务器能传送日志信息,可以使用-h标志。缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的/etc/syslog.conf输入项。

klogd守护进程

klogd守护进程获得并记录Linux内核信息。通常,syslogd会记录klogd传来的所有信息,然而,如果调用带有-f filename变量的klogd时,klogd就在filename中记录所有信息,而不是传给syslogd.当指定另外一个文件进行日志记录时,klogd就向该文件中写入所有级别或优先权。

第 22 页 共 47 页

Linux系统安全手册

Klogd中没有和/etc/syslog.conf类似的配置文件。使用klogd而避免使用syslogd的好处在于可以查找大量错误。如果有人入侵了内核,使用klogd可以修改错误。

其他日志

在/var/log和不同版本的系统中以及自己配置的应用程序中都可以找到其他日志文件。当然,/etc/syslog.conf列出了由syslogd管理的所有日志文件名和位置。其他日志由其他应用程序管理。例如在Redhat6.2中,apache server生成/var/log/htmlaccess.log文件记录客户访问,生成/var/log/httpd/error.log文件在syslog以外查找错误。

cron工具维护的信息日志文件/var/log/cron.当linuxconf工具记录系统重新配置信息时,将生成日志文件如 /var/log/nerconf.log. samba在/var/log/samba中维护其日志信息。

另外由于syslogd在系统非常繁忙时,可能会丢失信息,所以,可以用cyclog替换syslog. Cyclog缓存日志信息并确保日志文件是同步的,并且自动交替循环其管理的日志文件.

第 23 页 共 47 页

Linux系统安全手册

第三章 系统管理员的日常安全工作

3.1 安全补丁

系统管理员日常最重要的安全工作,就是给系统打上最新的补丁。 Linux的安全补丁可以以下官方网站获取:

Red Hat Linux:

http://www.redhat.com/apps/support/updates.html TurboLinux

http://www.turbolinux.com/security/

Linux不象MS和Sun一样提供补丁集,其补丁都是各种软件包的升级包。管理员需要了解自己的系统需要运行哪些软件包,不需要的直接卸载,需要的要升级到最新版本。

3.2 监测

操作系统一般由文件系统和进程系统构成,文件系统的特点是静态的,而进程则是动态的。 系统的配置一般是以文件的形式存放的,unix系统的配置文件一般是放置在/etc目录下,如/etc/services为系统可以提供的服务列表、/etc/default/login为系统登录时的默认配置等等。因此,优秀的系统管理员会对系统配置情况有清楚的了解和掌握。例如,系统管理员可以通过查看对于系统当前开放的网络服务情况,检查系统是否有可疑的端口开放,判断是否被入侵者安装了木马程序。可通过如下命令进行查看:

netstat –an | more

Linux下常见的网络端口服务列表如下:

UDP

111 sunrpc 4045 lockd 517 talk 512 biff 42 name TCP

514 shell 513 exec 512 login

第 24 页 共 47 页

Linux系统安全手册

进程是系统运行的单元,是一个系统运行的动态表现。系统管理员必须对系统的运行情况进行适当监控,及时发现系统的异常。例如,我们可以查看通过如下命令查看当前系统运行的所有进程情况:ps –aux

下面的几个命令可以帮助系统管理员来查看系统的其他信息: 1、 查看CPU的性能

[root]$uptime

8:50pm up 6:46, 1 user, load average: 0.98, 1.01, 2.09

上面是一个示例,其中load average表示平均负载,数据0.98、 1.01、2.09表示前1分钟、

5分钟、15分钟的系统平均负载情况。系统管理员可以定期运行该命令,以观察系统的平均负载及变化趋势。一般的,UNIX系统负载数在2~3之间为轻载,5~6为中等负载,而10以上为过载。系统负载增大时,说明有多条命令阻塞在内存或I/O系统,可能有入侵者正在窃取系统的重要数据或者企图消耗系统资源使系统无法正常提供服务,即所谓的拒绝服务攻击(DoS)。

另外,solaris系统还为用户提供一个图形化的工具可以直观的观察系统的变化趋势,即perform,它可以显示系统的CPU利用率、交换作业个数、网络数据包个数、运行队列平均个数等信息。

2、 查看内存的使用情况

[root]$vmstat

procs memory page disk faults cpu r b w swap free re mf pi po fr de sr f0 s0 s1 s2 in sy cs us sy id 0 0 0 467024 583904 0 0 1 0 0 0 0 0 0 0 0 403 37 29 0 0 100 命令vmstat不仅可以显示虚存的使用情况,而且还可以查看到系统进程、CPU等活动情况。在”procs”列下表示进程情况,”r”为进程运行队列,”b”表示进程阻塞个数,”w”表示可运行的但是在交换区(swap)内的进程个数。”memory”表示虚存使用情况,”swap”表示交换区的可供使用的空间大小,”free”表示虚存内未使用的空间。”page”表示内存页的使用情况,”re”表示页回收,”mf”表示镜像错误,”pi”表示进入页的数据量,”po”表示数据换出页的大小。

3、 查看磁盘系统的性能

[root]$iostat

tty fd0 sd0 sd1 sd21 cpu

tin tout kps tps serv kps tps serv kps tps serv kps tps serv us sy wt id

0 0 0 0 0 1 0 30 0 0 0 0 0 0 0 0 0 100

命令iostat可以查看磁盘的输入输出,报告吞吐量、利用率、队列长度、传输率等信息。对磁盘而言,”kps”表示每秒传送的比特率,”tps”表示每秒传送的次数,”serv”表示平均服务时间。系统管理员还可以使用参数”-xtc”得到每个磁盘的使用的详细信息,即”iostat -xtc”,具体可以参考系统提供的手册。

4、 查看网络性能

[root]$netstat -i

Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue

第 25 页 共 47 页

Linux系统安全手册

lo0 8232 loopback localhost 65 0 65 0 0 0

hme0 1500 sun450 sun450 37515 0 209 0 0 0

总的来说,系统管理员需要掌握系统配置的信息和系统运行状态,做到心中有数。

3.3 配置

了解了系统安全配置的所在,下一步就是学会配置。系统安全配置的原则是系统最小化原则,对系统资源访问做出限制,启用一些安全功能,限制对外的服务,以增加入侵者的攻击代价(包括时间与金钱)。

对于操作系统而言,通常需要系统管理员进行配置的工作包括:

1、 有效严格的系统访问控制,对系统文件和用户访问权限进行严格的限制; 2、 完善的口令策略,对口令的长度、复杂度以及时效做出合理的限制; 3、 安全的网络服务,根据系统最小化原则关闭不必要的网络服务。

我们还可以启用系统的安全功能以增强系统的安全性,如可执行堆栈的保护、配置ipchain建立防火墙等等。

总的来说,系统管理员需要学会使用系统提供安全工具,按照系统最小化的原则对系统资源访问做好限制,以增加入侵者的代价。

3.4 审计

跟踪目前系统常见的严重漏洞,收集解决方案。因为系统安全是一个动态的过程,每天都可能会有新的漏洞被发现,可能被利用来攻击系统。因此,系统管理员需要养成一个好习惯,就是每天上网浏览一下有没有出现新的系统漏洞,它的危害有多大,它是否可以通过远程的手段进行系统攻击,目前是否有可行的解决方案。 可供参考网络资源如下:

http://www.cert.org or http://www.cert.org.cn http://www.securityfocus.com

http://www.redhat.com/support/errata/

3.5 借助工具

可以适当采用一些辅助工具以减轻系统管理员的负担,提高效率。例如,使用个人防火墙、系统文件校验工具、日志审核工具、漏洞扫描工具、口令破解工具。

1、 个人防火墙:目前在Unix平台上有一些防火墙软件包,这些工具都可以在一定程度上保护系统安全,并能够及时提供报警和日志功能。

第 26 页 共 47 页

Linux系统安全手册

2、 系统文件校验工具:重要的系统文件,尤其是启动时运行的文件是需要定期进行校验看是否被篡改。一个简单可行的方法是对重要文件进行备份,以备在出现可疑情况的时候查看文件大小是否有变化。

3、 日志审核工具:借助日志的审核工具可以大大提高系统管理员审核日志的效率。 4、 漏洞扫描工具:使用漏洞扫描工具可以对系统进行模拟攻击以发现安全隐患,有针对性对系统配置做调整。

5、 口令破解工具:使用口令破解工具有助于及时发现弱口令的问题,尽可能避免弱口令问题的出现。

注意:扫描工具和口令破解工具的使用必须在授权下才能进行。第 27 页 共 47 页

Linux系统安全手册

第四章 第三方工具的使用

4.1 防火墙-ipchains构建防火墙

防火墙是提供网络安全性的重要手段之一,RedHat6.2提供了用于实现过滤型防火墙的工具包--ipchains。实现防火墙的策略一般有两种:在第一种方式下,首先允许所有的包,然后在禁止有危险的包通过防火墙;第二种方式则相反,首先禁止所有的包,然后再根据所需要的服务允许特定的包通过防火墙。

ipchains介绍

ipchains 被用来安装、维护、检查Linux内核的防火墙规则。规则可以分成四类:IP input链、IP output链、IP forward链、user defined 链。

一个防火墙规则指定包的格式和目标。当一个包进来时, 核心使用input链来决定它的命运。 如果它通过了, 那么核心将决定包下一步该发往何处(这一步叫路由)。假如它是送往另一台机器的, 核心就运用forward链。如果不匹配,进入目标值所指定的下一条链,那有可能是一条user defined链,或者是一个特定值:ACCEPT、DENY、REJECT、MASQ、REDIRECT、RETURN。

ACCEPT意味着允许包通过,DENY 扔掉包就象没有受到过一样,REJECT也把包扔掉,但(假如它不是 ICMP 包)产生一个 ICMP 回复来告诉发包者,目的地址无法到达(请注意DENY和REJECT对于ICMP包是一样的)。 MASQ 告诉核心伪装此包,它只对forward 链和user defined链起作用,想让它起作用, 编译核心时必需让 IP Masquerading 起作用。

REDIRECT只对input链和user defined链起作用。它告诉核心把无论应送到何处的包改送到一个本地端口,只有 TCP 和 UDP 协议可以使用此指定。任意用 '-j REDIRECT' 指定一个端口(名字或编号)可以使送往此的包被重定向到某个特殊的端口, 即使它被标记为送到其它端口。想让它起作用,编译内核时,必须让CONFIG_IP_TRANSPARENT_PROXY起作用。 最后的一个目标指定是RETURN, 它跳过它下面的所有规则, 直到链的末尾。

任何其它的目标指定表示一个用户自定义的链。包将在那个链中通过. 假如那个链没有决定此包的命运, 那么在那个链中的传输就完成了,包将通过当前链的下一个规则。

参数说明: -A ,--append

在所选链的链尾加入一个或多个规则。有时一个单命令行能影响多个规则 假如你设置一个能解析为多个 IP 地址(使用 DNS)的主机名, ipchains 将如同你对多个地址都设置了命令一样发生作用。假如主机名'www.foo.com'解析为三个 IP 地址, 主机名'www.bar.com'解析为两个IP 地址, 那么命令 'ipchains -A input -j reject -s www.bar.com -d www.foo.com' 将在 input 链中追加6条规则,-D (-I, -R) 的语法与 -A 完全相同。当在一个

第 28 页 共 47 页

Linux系统安全手册

链中有多个相同的规则时, 只有第一个被删除。

-D,--delete

从所选链中删除一或多条规则。可以用两种方法中的任何一种删除此规则。首先如果知道它是链中的唯一规则,可以使用编号删除, 输入 # ipchains -D input 1 来删除进入链的编号1规则。其次是 -A 命令的镜象, 但是用 -D 代替 –A。当你不愿意去数繁多的规则时, 这是一个有用的方法. 这种情况下,使用:# ipchains -D input -s 127.0.0.1 -p icmp -j DENY

-R, --replace

在所选链中替换一条规则,如果源和目标目标名解析到多个地址,命令将失败。 -I, --insert

以给出的规则号在所选链中插入一条或多条规则。如果规则号是1,插入的规则在链的头部。

-L, --list

列出指定链的所有规则。如果没有指定链,将列出所有链的规则。-L有三个可选项. '-n'(数值)项非常有用, 它阻止 ipchains 去查找 IP 地址, 假如你的DNS没有正确设置, 或你已经过滤掉了 DNS 请求, 这将造成很大延时。 它还会导致端口用数字而不是名字被显示出来。’-v’选项显示规则的所有详细信息,如包和字节计数器,TOS 掩码, 接口, 和包标记. 用其它的方法这些项都会被忽略。

-F, --flush

使用'-F'命令可以清除一个链中的所有规则。# ipchains -F forward,假如你不指定链, 那么所有链都将被清空。

-Z, --zero

但有时你想在重置计数器前知道它们的值。你可以同时使用 '-L' 和 '-Z' 命令, 重置计数器。

读计数器的同时重置它们。但是, 假如你这样做, 你不能只操作一个链, 你不得不列表和清零所有的链。

-N, --new-chain

以给定的名字创建一条新的user defined链。不能与已有链同名。 -X, --delete-chain

删除链必须满足两个条件:它们是空的,并且不是任何规则的目标,但你不能删除3个内置链中的任何一个。

-P, --policy

改变内置链政策。 -M, --masquerading

允许观察当前IP伪装的连接(与-L一起)。或者设置内核IP 伪装的参数(与 –S 一起)。 -S, --set tcp tcpfin udp

设置伪装的超时值,'-S' 后跟三个以秒表示的超时值: TCP sessions, FIN 包到后的 TCP sessions, 和对于 UDP 包的。假如你不想改变这些值, 给个 '0' 值即可。默认值在 '/usr/include/net/ip_masp.h' 文件中, 目前分别是 15分, 2分和 5分。仅允许和 -M 一起使用。

-C, -- check

如果想确定的包进入机器后会发生什么事情, 比如调试防火链时。ipchains 的 '-C' 命令提供与核心检查真实包完全相同的程序来让你做这件事。

鉴于核心总是从 input, 你可以指定让哪个链来检测包, 把链的名字放在 '-C' 参数后即可。

第 29 页 共 47 页

Linux系统安全手册

output 或 forward 链开始, 特许你从需要测试的链开始。

包的细节用与设置防火墙规则相同的语法设定。 在个别时,包的协议('-p'),源地址('-s'), 目的地址('-d'), 和接口('-i') 必须有。假如协议是 TCP 或 UDP, 那么必须指定一个源地址和一个目的端口, 对于 ICMP 协议必须指定类型和代码。(除非使用了 '-f' 标志指定了一个片段规则, 在那种情况下这些选项是不合法的).

假如协议是TCP (并且没有 '-f' 标志), 可以使用 '-y' 标志设置包的 SYN 位。

这有一个例子, 测试一个 TCP SYN 包, 它从 192.168.1.1 端口 60000 到 192.168.1.2 www 端口, 进入 eth0 接口, 进入 'input' 链. (这是一个与 WWW 建立连接的典型例子)

# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www packet accepted #

-h, --help 帮助。

-p, --protocol[!] protocol

用 '-p' 来指定协议。协议可以用编号(假如你知道 IP 的数字化协议值)或名字'TCP', 'UDP', 'ICMP',’ALL’(0等价与ALL),大小写无关, 'tcp' 与 'TCP' 一样。协议名前面可以加前缀 '!',来否定它,比如: ' -p ! TCP'。

-s, --source [!] address[/mask] [!][port[:port]]

有四种方法指定源头(-s)和目的(-d) IP 地址。最常用的方法是使用全称,比如 'localhost' 或 'www.linuxhq.com'。第二种方法是指定 IP 地址,如 '127.0.0.1'。第三种和第四种方法是指定 IP 地址集, 比如 '199.95.207.0/24' '199.95.207.0/255.255.255.0'。这两种方式都指定了从 192.95.207.0 到 192.95.207.255 的所有 IP 地址;'/'后的数字表示 IP 地址的哪部分(或'位')被指定。默认是 '/32' 或 '255.255.255.255' (与所有 IP 地址匹配)。完全指定所有 IP 地址用'/0'。对于特殊的 TCP 和 UDP 协议, 还有额外的参数可以指定,即它们的端口号或端口的范围。范围用 ':' 表示,比如 '6000:6010',它包含从6000到6010的11个端口,如果没有下限,默认是

TCP -s 0。如果没有上限,默认是 65535。 所以指定1024以下端口来的 TCP 连接,表示为 '-p

0.0.0.0/0 :1023'。 端口号也可以用名字指定,如 'WWW'。端口指定也可以用'!'参数来否定它。ICMP 也可以有参数,但是它没有端口(ICMP 有类型和代码),它们有不同的含义。可以在'-s'参数后放它们的 ICMP 名字来指定(使用 ipchains -h icmp 来列出这些名字)。或使用 ICMP 类型和代码的数字编号。类型跟在 '-s' 后。代码跟在 '-d' 后。ICMP 名相当长: 你只需输入足够长的字母能区分它们即可。

注意:目前, ICMP 名的前面不能用'!'。等价于--src。 --source-port [!] [port[:port]]

用来分开源端口范围,等价与—sport。

-d,--destination [!] address[/mask] [!] [port[:port]] 指定目标,用法与-s相同。等价于—dst。 --destination-port [!] [port[:port]]

指定目标端口范围,等价于—dport。 --icmp-type [!] typename

允许指定icmp类型(使用 –h icmp 看有效的icmp类型名)。可以方便的在指定目标的后面使用。

第 30 页 共 47 页

Linux系统安全手册

-j, --jump target

指向规则的目标,例如,包匹配规则后怎么办。目标可以是一个user defined 链(非本规则所在链),也可以是一个可以立即决定包命运的特定的目标。最简单的情况是不指定目标。这种类型的规则(通常叫记数规则)常用来做某种类型包的简单记数。无论规则匹配与否, 核心将继续检查此链中的下一个的规则。但规则计数器将增加。

-i, --interface [!] name

用 '-i' 参数指定接口名字。接口是包进进出出的物理设备。用于包进入(包通过进入链 )的接口被认为是进入接口, 同样地, 用于包外出(包通过外出链)的接口被认为是外出接口. 用于包中转的接口也被认为是外出接口。

指定一个目前不存在的接口是完全合法的。规则直到此接口工作时才起作用,这种指定是非常有用,对于 PPP 及其类似的连接。作为一个特例, 一个结尾是'+'的接口将适合所有此类接口(无论它们是否工作)。例如:设定一个规则适合所有的 PPP 连接, 可以用 -i ppp+ 来指定接口。此参数忽略时,默认符合所有接口。接口可以使用否定符'!'来匹配不是指定接口来的包。

[!] -f, --fragment

此规则指定fragmented packets的第二个和以后的分块。因为这样的分块没有源和目标端口信息(或 ICMP 类型),所以它不匹配一些指定它的规则。

可以在它前面使用'!',来指定一个不适用于第二个及其后续的片段包的规则。

-b, --bidirectional 双向模式。这个标志使 ipchains 象你输入命令两次一样工作,第二次是把 '-s' 和 '-d' 参数颠倒。

-v, --verbose

详细输出。它显示出对于你的命令, ipchains 是如何响应的. 假如你使用的命令可以影响多个规则, 它是很有用的。

-n, --numeric

数字化输出。IP地址和端口号将以数字格式显示。缺省显示主机名和网络名,和服务名。当DNS不起作用时,此参数及其有用。

-l, --log

对匹配包实行内核纪录,当设置此参数时,Linux内核将通过printk()对于所有匹配包打印一些信息。

-o, --output [maxsize]

拷贝匹配的包到用户空间设备。主要由开发者使用。要使用此参数,编译内核时必须设置 CONFIG_IP_FIREWALL_NETLINK Set。 -m, --mark markvalue

标志匹配的包。包被一个32位的无符号整数标志。如果你不是一个内核黑客,你不必关心这些。如果标志值以 ‘+’ 或 ‘-‘开头,那么这个值将会从当前包的标志值加或减(初始值为0)。

-t, --TOS and xormask

用于改变IP头的TOS域。当包匹配规则,它的TOS域首先与第一个掩码逐位相与,结果再与第二个掩码逐位异或,掩码将会被指定为8位16进制数。TOS的最低有效位必须没有被改变。TOS域的四个位是最小延时\"Minimum Delay\", 最大吞吐量\"Maximum Throughput\", 最大可靠程度\"Maximum Reliability\"和最小费用\"Minimum Cost\"。最常用的是把 telnet 和 ftp 的控

第 31 页 共 47 页

Linux系统安全手册

制连接设为最小延时和把 FTP 数据设为最大吞吐量。

ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10

ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08 -x, --exact 展开数字,包和字节计数器显示时使用后缀 'K', 'M', 'G' 来表示1000 1,000,000 和 1,000,000,000。不管数值多大, 使用 '-x' 标志可以完全显示它们。这个参数只可以在 –L 后使用。

[!] –y, --syn

仅仅匹配设置了SYN位,清除了ACK、FIN位的的TCP包。这些包被用来请求初始化的TCP连接,阻止从接口来的这样的包将会阻止外来的TCP连接请求。但输出的TCP连接请求将不受影响。这个参数仅仅当协议类型设置为TCP时才能使用。此参数前可以使用!标志匹配所有的非请求连接的包。

--line-numbers

在使用列表规则时,在每行开头加行号,表示规则在链中的位置。 --no-warnings

去掉所有的警告信息。

4.2 入侵检测系统-Snort

Snort经常被称为轻量级的入侵检测系统。Snort被标以轻量级的称号是因为它首先是设计给小网络段使用的。基于规则的体系结构使Snort非常灵活,它的设计者将它设计的很容易插入和扩充新的规则,这样它就能够对付那些新出现的威胁。本文详细讨论了Snort的安装及其体系结构和规则,以及如何运行它。

一、安装

Snort 是由Martin Roesch编写的,你可以从http://www.snort.org/下载。在本文完成时,它的最新版本是1.7。该网站除了提供源码下载外还将提供适用于常用平台的二进制版本。但在下载和安装Snort之前,请先安装libpcap的0.5以上版本,libpcap的最新版本是0.6.2。它支持夸平台捕获数据包并可以对其进行分析。Libpcap还有支持一些BSD平台的版本。你可以从http://www.tcpdumpl.org下载到最新版本的libcap。

安装Snort很简单。如同安装其它典型的UNIX工具一样,安装步骤包括./configure,接下来是make。我常常喜欢查看配置的选项,通过./configure –help就可以看到所有的选项了。最后用make install将会安装所有的Snort文件。此时,你还没有完全做好准备运行Snort,在运行Snort之前,你得先创建它的规则文件。在写规则文件之前,我们还是先来看看Snort的体系结构。

二、Snort 的体系结构

Snort的体系结构由三个主要的部分组成。对它们的描述如下:

第 32 页 共 47 页

Linux系统安全手册

1、包解码:Snort的包解码支持以太网和SLIP及PPP媒体介质。包解码所做的所有工作就是为探测引擎准备数据。

2、探测引擎:探测引擎是Snort的心脏。它主要负责的工作是:按照启动时加载的规则,对每个数据包进行分析。探测引擎将Snort规则分解为链表头和链表选项进行引用。链表头由诸如源/目标ip地址及端口号这些普通信息标识。链表选项定义一些更详细的信息如TCP 标志、ICMP代码类型、特定的内容类型、负载容量等。探测引擎按照Snort规则文件中定义的规则依次的分析每个数据包。与数据包中数据匹配的第一条规则触发在规则定义中指定的动作。凡是与规则不匹配的数据包都被丢弃。探测引擎中的关键部分是plugin模块如端口扫描模块等,它增加的一些分析能力增强了Snort的功能。

3、日志记录/告警系统:告警和日志是两个分离的子系统。日志允许你将包解码收集到的信息以可读的格式或以tcpdump格式记录下来。你可以配置告警系统,使其将告警信息发送到syslog、flat文件、Unix套接字或数据库中。在进行测试或在入侵学习过程当中,你还可以关掉告警。缺省情况下,所有的日志将会写到/var/log/Snort文件夹中,告警文件将会写到/var/log/Snort/alerts文件中。

三、Snort 规则

Snort规则文件是一个ASCII文本文件,可以用常用的的文本编辑器对其进行编辑。规则文件的内容由以下几部分组成:

·变量定义:在这里定义的变量可以在创建Snort规则时使用。

·Snort 规则:在入侵检测时起作用的规则,这些规则应包括了总体的入侵检测策略。在本文的后面给出了一个Snort规则。

·预处理器:即插件,用来扩展Snort的功能。如用portscan来检测端口扫描。 ·包含文件Include Files:可以包括其它Snort规则文件。

·输出模块:Snort管理员通过它来指定记录日志和告警的输出。当Snort调用告警及日志子系统时会执行输出模块。

Snort规则逻辑上可以分为两个部分:规则的头部和规则选项部分。对Snort规则的描述必须在一行之内完成,另外它必须包含IP地址,以便在不能按照主机名进行查找使用。

在Snort的主页中,读者对Snort的规则细节中最感兴趣的链接是“Writing Snort Rules\"。另外,Snort的发行版本中提供的RULES.SAMPLE是一个非常不错的文档。你可以参照它为你的工作环境构建Snort规则。在写规则前,建议你先写出网络入侵检测策略。这包括先定义出进行日志记录、忽略或发出告警信息的事件。下面给出一个非常简单的规则: ##

# Define our network and other network #

var OURNET 208.177.13.0/24 var OTHERNET !$OURNET

第 33 页 共 47 页

Linux系统安全手册

var NIDSHOST 208.177.13.251 var PORTS 10 var SECS 3 ##

# Log rules ##

log tcp $OTHERNET any -> $OURNET 23 log tcp $OTHERNET any -> $OURNET 21 log tcp $OTHERNET any -> $OURNET 79 ##

# Alert Rules ##

alert udp any any -> $OURNET 53 (msg:\"UDP IDS/DNS-version-query\"; content:\"version\";)

alert tcp any any -> $OURNET 53 (msg:\"TCP IDS/DNS-version-query\"; content:\"version\";)

alert tcp any any -> $OURNET 80 (msg:\"PHF attempt\"; content:\"/cgi-bin/phf\";) ##

# Load portscan pre-processor for portscan alerts ##

preprocessor portscan: $OTHERNET $PORTS $SECS /var/log/snort/pscan_alerts

preprocessor portscan-ignorehosts: $OURNET ##

# Pass Rules (Ignore) ##

pass tcp $OURNET any -> $OTHERNET 80 pass udp any 1024: <> any 1024: pass tcp any 22 -> $NIDSHOST 22 表2 一个规则表的例子

该规则要求,记录下网络外部主机所做的下列行为: Telnet、FTP通信、finger。 对以下行为发出告警:

从本网以外的机器中发出的端口扫描行为,并将告警信息写入到/var/log/snort/pscan_alerts文件中;

所有的PHF请求 DNS版本查询 忽略以下信息:

对1024以上UDP端口的访问;

第 34 页 共 47 页

Linux系统安全手册

从本网内发出的WEB浏览通信及网络入侵检测系统间的ssh通信;

四、运行Snort

Snort可以以包窃听器方式、包日志记录器和入侵检测系统三种方式运行。如果以包窃听器的方式运行,TCP/UDP/ICMP的头信息及应用数据在标准输出设备中输出: # Snort -vd

当Snort作为包记录器使用时,它将应用及协议的头信息记录到/var/log/today.log中: # Snort -dev -l /var/log/today.log

做为一个网络入侵检测系统,Snort在le0接口进行监听,配置文件为/etc/Snort.rules,并以后台进程的方式运行:

# Snort -D -i le0 -c /etc/Snort.rules

Snort并不会按着规则在配置文件中出现的次序来对其进行评估,在默认的情况下它是按照Alert,Pass,Log的次序对规则进行评估的。用命令行标志-o可以改变评估的次序为Pass,Alert,Log。-A选项指定了告警模式,共有四种方式可供选择:full,fast,none和 unsock。Full,none,fast这几种方式的含义很明白,unsock选项可以使Snort将告警信息通过UNIX的套接字发往一个负责处理告警信息的主机,在该主机上有一个程序在套接字上进行监听。有关该选项的细节可以通过snort的man获得更多的内容。通过Snort的告警方式,你可以在告警信息中对当前的情况进行详细的描述。

必须要对snort的配置进行验证,验证的方法是再检查一遍入侵检测规则。对于入侵检测的策略,你可以进行一些指定的测试并观察日志和告警。对于我们上面列出的策略,我们可以运行Telnet,FTP和finger。你可以使用诸如scanner之类的工具,如一些可以很容易得到的扫描器,如nmap都是不错的。商业用途的扫描器如network Associates发行的Cybercop和Internet Security System的ISS可以帮助你自动的完成这些过程。Netcat是另外一个功能强大的工具,你可以从http://www.atstake.com/research%20tools/下载。总之,你可以用几个简单的脚本语句对你的系统进行攻击。但是你一定要小心,运行这些脚本意味着你信任这些脚本。下面显示了几个简单的告警。其中包括三个常见的攻击:IIS Unicode攻击,SYN/Fin扫描和portscan。 [**] spp_http_decode: IIS Unicode attack detected [**] 03/07-11:10:40.910903 192.168.0.1:3607 -> 192.168.1.2:80 TCP TTL:249 TOS:0x0 ID:22898 IpLen:20 DgmLen:1022 DF

***AP*** Seq: 0x552997B8 Ack: 0xE39D7CB1 Win: 0x4470 TcpLen: 20

[**] IDS198/SYN FIN Scan [**]

03/13-01:38:45.254726 192.168.1.3:53 -> 192.168.0.1:53 TCP TTL:23 TOS:0x0 ID:39426 IpLen:20 DgmLen:40

******SF Seq: 0x4D622A79 Ack: 0x7EEF29AF Win: 0x404 TcpLen: 20

03/15-19:36:23.468056

[**] spp_portscan: PORTSCAN DETECTED from 192.168.2.25 (THRESHOLD 3 connections exceeded in 4 seconds) [**] 03/15-19:36:39.561360

第 35 页 共 47 页

Linux系统安全手册

[**] spp_portscan: portscan status from 192.168.3.25: 5 connections across 1

hosts: TCP(0), UDP(5) [**]

4.3 完整性检查工具-Tripwire

对系统管理员来说,主机系统的安全一直是备受关注的课题之一。由于安全的相对性,任何一台放在Internet上的主机被入侵的可能性是时刻存在的。入侵者会先利用漏洞进入系统,然后会采取一定的手段进一步扩大战果以便获取超级用户的密码、数据库的口令等重要信息,而最便捷、最有效的方法是改动或特洛伊化受侵害的系统上的文件,如放置监听程序、替代某些关键文件、修改编辑可信文件、设置suid文件等。

通常,系统管理员会通过系统自带的命令来检查文件的安全性,如检查文件生成的时间戳,但是有经验的入侵者可以很轻松的修改文件生成时间,从而绕过检查。

Tripwire是一个文件系统完整性检查的工具,能够帮助检查系统文件是否被非法修改,它的技术核心是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。具体监控项目包括:文件模式和权限,连接文件的数目、文件大小、文件属主ID、文件创建和修改信息等等。由此可以看到Tripwire对文件的管理面是很宽的。

Tripwire的工作原理

当Tripwire运行在数据库生成模式时,会根据管理员设置的一个配置文件对指定要监控的文件进行读取,对每个文件生成相应数字签名,并将这些结果保存在数据库中,在缺省状态下,MD5和sncfrn加密手段被结合用来生成文件的数字签名。除此以外,管理员还可使用MD4,CRC32,SHA等哈希函数,实际上,使用上述两种哈希函数的可靠性已相当高了,而且结合MD5和sncfrn两种算法(尤其是sncfrn)对系统资源的耗费已较大,所以在使用时可根据文件的重要性做取舍。当怀疑系统被入侵时,可由Tripwire根据先前生成的,数据库文件来做一次数字签名的对照,如果文件被替换,则与Tripwire数据库内相应数字签名不匹配,这时Tripwire会报告相应文件被更动,说明系统可能被入侵并植入了木马程序。

有一点要注意,上述保障机制的重点在于数据库内的数字签名,因此在Tripwire生成数据库后,这个库文件的安全极为重要。比较常见的做法是将数据库文件、Tripwire二进制文件、配置文件单独保留到可移动介质上,如软盘、活动硬盘、刻录光碟将上述文件复制到介质上,然后锁到保险柜中。

除这种办法外,利用PGP等加密工具对上述关键文件进行数字签名也是一个很好的选择。 当然,当系统管理员对某些文件更动时,Tripwire的数据库必然是需要随之更新的,Tripwire考虑到了这一点,它有四种工作模式:数据库生成,完整性检查,数据库更新。交互更新。当管理员更动文件后,可运行数据库更新模式来产生新的数据库文件。

安装前的准备工作

Tripwire支持绝大多数Unix操作系统,它的安装需要c编译环境,如gcc,cc等,还需要

第 36 页 共 47 页

Linux系统安全手册

gzip,gunzip等解压工具。这些工具管理员可从相应站点获取,如在sunfreeware.com下载。

Tripwire可从www.tripwire.com获得,到它的主页download部分,可以看到当前可免费download的Tripwire1.3 ASR版本,地址为http://www.tripwire.com/files/downloads/asr/Tripwire-1.3.1-1.tar.gz,但是在下载需要填写相关的用户信息。

安装Tripwire

Tripwire的tar包解开后,建议先看看Tripwire根下的README文件,对Tripwire有个整体的了解。

步骤1:匹配主机环境

在Tripwire的根下有Ported这个文件,它是对支持的系统及相关配置文件的描述,管理员第一步需要打开这个文件,找到符合自己系统的描述,本文的测试环境是solaris2.6,我们截取相关部分来看看,

vendor: Sun Microsystems, Inc. os: SunOS

os version: 5.x (Solaris 2.x) compiler: cc cflags: -O ldflags: libs:

conf.h: conf-svr4.h

tw.config: tw.conf.sunos5 notes:

在这一段描述中,要尤其注意的是conf.h 和tw.config对应的行,在下几步的配置中需要用到它们两个对应的文件。此处要注意的是:每种操作系统这两个地方所对应的文件是不同的。

步骤2:配置监控目标

进入include目录,编辑config.h文件,将第一步Ported中conf.h后对应的文件名和路径写入config.h开始#include部分,此例中即为

#include \"../configs/conf-svr4.h\"

同时注意的是,在config.h文件中还有Tripwire配置文件,Tripwire数据库文件的放置路径及生成数据库的文件名等设置,管理员按照个人喜好设置即可。 编辑好config.h后,还要根据本机情况编辑修改位于configs目录下的Tripwire配置文件,也就是上面Ported 文件中tw.config对应的tw.conf.sunos5,我们知道,对文件,目录等的监控就是在这里设置的。我们一段段的选取一部分这个文件来看看:

#

# - : ignore the following atributes

# + : do not ignore the following attributes #

# p : permission and file mode bits a: access timestamp # i : inode number m: modification timestamp

# n : number of links (ref count) c: inode creation timestamp

第 37 页 共 47 页

Linux系统安全手册

# u : user id of owner 1: signature 1 # g : group id of owner 2: signature 2 # s : size of file

注意上述p,I,n,u,g,s,a,c,1,2等,它表示可以对文件,目录设置的监控项目,管理员可组合使用,最前面的-,+号表示选取或忽略这些属性。如下例:

/var +pinugsm12-a

它表示对目录/var下所有文件检查,监控项目分别有文件属性,inode,链接数,属组,属主,修改时间,生成时间,数字签名等,但是,对这个目录下的文件的访问不加监控,如果访问也监控的话,正常的用户访问也会被Tripwire捕捉,这没有必要。

为了方便起见,Tripwire作者把常见组合做成了模板,如下, #

# Templates: (default) R : [R]ead-only (+pinugsm12-a) # L : [L]og file (+pinug-sam12)

# N : ignore [N]othing (+pinusgsamc12) # E : ignore [E]verything (-pinusgsamc12) #

tw.conf.sunos5这个文件再向下,就是管理员根据情况填写了,把需要监控的文件及目录加入列表,赋予相应属性即可。如下:

/ R

/.rhosts R # may not exist /.profile R # may not exist /etc/dfs/dfstab R /etc/hosts.equiv R /etc/inet/inetd.conf R /etc/inet/protocols R /etc/inet/services R /etc/init.d R /etc/motd L

#/etc/named.boot R # may not exist /etc/opt R /etc/passwd L /etc/profile R 步骤3:编译

完成上两步后,就可以编译了,在Tripwire的根下,执行make,系统即会自动编译,编译成功后,可以再执行make test, Tripwire会自动检查编译情况及工作状态,它会一段一段的测试,我们选取一段如下:

=== test.update.sh: DESCRIPTION

This shell script exercises all the Tripwire integrity checking and database update functionalities.

=== test.update.sh: Setting up auxiliary scripts === === test.update.sh: BEGIN ===

第 38 页 共 47 页

Linux系统安全手册

../src/tripwire -loosedir -c /tmp/twtest/tw.config -d /tmp/twtest/tw.db -i all === test.update.sh: testing GROWING (safe) files === === test.update.sh: testing GROWING (unsafe) files === === test.update.sh: testing ADDED files === === test.update.sh: testing DELETED files === === test.update.sh: testing CHANGED files === === test.update.sh: testing input schemes === === test.update.sh: tw.config from stdin === test.update.sh: database from stdin

=== test.update.sh: testing complex UPDATE cases

=== test.update.sh: changed ignore-mask (UPDATE file) === test.update.sh: changed ignore-mask (UPDATE entry) === test.update.sh: testing UPDATED files (7 cases) === test.update.sh: case 1: update: add new file === === test.update.sh: case 2: update: delete file === === test.update.sh: case 3: update: update file ===

=== test.update.sh: case 4: nonsense case (skipping) === === test.update.sh: case 6: update: delete entry === === test.update.sh: case 5: update: add entry === === test.update.sh: case 7: update: update entry === === test.update.sh: PASS ===

我们可以看到,Tripwire对update功能一项项的做检测,并在最后PASS了,当Tripwire所有的检测项目都PASS后,编译就OK了.

步骤4:生成数据库

成功编译Tripwire,我们准备开始对需要监控的文件进行扫描,以生成Tripwire数据库,在Tripwire 的src目录下:如下操作./tripwire –init,则系统会根据tw.conf.sunos5文件内的设置,开始扫描并生成相应的数据库,上面提到,数据库文件的路径是在第二步config.h中设置的,在本例中为/var/tripwire,我们得到了名为tw.db_secu.unix.com的数据库文件。建议此时将Tripwire可执行文件,数据库文件,配置文件按照上面所述妥善保管。

步骤5:测试 数据库已经生成,系统管理员应该做测试以保证其可用性。首先在根下touch生成一个goadd文件,其次把根下的.cshrc文件做一下改动,在里面加入几个#注释号.然后我们来运行一下Tripwire看如何:

./ Tripwire –c ./tw.config.sunos5 –d ./tw.db_secu.unix.com Tripwire(tm) ASR (Academic Source Release) 1.3.1 File Integrity Assessment Software (c) 1992, Purdue Research Foundation, (c) 1997, 1999 Tripwire Security Systems, Inc. All Rights Reserved. Use Restricted to Authorized Licensees.

### Phase 1: Reading configuration file ### Phase 2: Generating file list

第 39 页 共 47 页

Linux系统安全手册

./tripwire: /.profile: No such file or directory ./tripwire: /kernel/unix: No such file or directory ### Phase 3: Creating file information database ### Phase 4: Searching for inconsistencies ###

### Total files scanned: 4437 ### Files added: 1 ### Files deleted: 0 ### Files changed: 1 ###

### Total file violations: 2 ###

added: -rw-r--r-- root 0 Jul 3 18:45:31 2000 /goadd changed: -r--r--r-- root 669 Jul 3 18:46:15 2000 /.cshrc

### Phase 5: Generating observed/expected pairs for changed files ###

### Attr Observed (what it is) Expected (what it should be) ### =========== /.cshrc

st_size: 669 668

st_mtime: Mon Jul 3 18:46:15 2000 Mon Jul 3 09:00:41 2000 st_ctime: Mon Jul 3 18:46:15 2000 Mon Jul 3 09:00:41 2000

md5 (sig1): 3z9gKjlZGq5GbeWOxpYaF9 1Z7K0n3ZKAyuPpAZB1G8uq snefru (sig2): 1vCDeMR45lpRCChmDithiW 1oRYPpQ:oZA6hVx6Zi4.NG

由上述可知,系统运行经过了5个步骤,首先读取配置文件,其次生成配置文件中设置为需要监控,但实际并不存在的文件列表。第三步生成文件信息库,第四步报告检查情况。我们看到共扫描了4437个文件,其中增加了一个文件,有一个文件发生改变。并列出了这两个文件-正是我们更改的文件。在最后一步Tripwire将发生了改变的文件现在字节数,生成时间,修改时间, md5, snefru签名及数据库中的对比列出。

上面我们讲到的是Tripwire的主要功能,在命令行状态下敲入tripwire –h 就会有其它使用参数的介绍,有兴趣的管理员不妨一试.

4.4 访问控制工具-Tcp_wrapper

Tcp_wrapper是Wietse Venema开发的一个可用于各种Unix平台的免费软件,并随着广泛的应用于Unix系统中,现已逐渐成为一种标准的Unix安全工具,作为unix守护程序inetd的一个插件。通过Tcp_wrapper,管理员可以设置对inetd提供的各种服务进行监控和过滤.

unix中大部分网络服务的实现是基于inetd这个守护进程的,每当有网络服务请求时,无论是ftp,telnet,rlogin等等,这种请求都被送到处于侦听状态的inetd守护进程,inetd再根据请求启动相应服务。inetd的设置是根据/etc目录下inetd.conf决定的。inetd.conf中标识了每种服

第 40 页 共 47 页

Linux系统安全手册

务由什么进程来控制,我们抽取一行如下:

telnet stream tcp nowait root /usr/sbin/in.telnted in.telned

从上面这一行我们可以看到,telnet这个服务,是由/usr/sbin目录下的in.telnetd来控制的,每当有telnet的连接请求时,inetd就指导in.telnetd来启动telnet服务。这是unix默认的连接方式,在这个过程中,没有管理员可以控制的部分,也没有连接纪录.

而在安装了Tcp_wrapper的主机上,管理员可以对上述服务加以控制,当Tcp_wrapper编译安装成功后,会生成一个tcpd程序,它可以在inetd.conf这个控制文件中取代in.telnetd的位置,这样,每当有telnet的连接请求时,tcpd即会截获,先读取管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的in.telnetd程序,由in.telnetd完成以后的工作。如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。除in.telnetd以外,tcpd还可以替代其它各种tcp服务.

Tcp_wrapper访问控制的实现是依靠两个文件:hosts.allow、hosts.deny来实现的。这两个文件的语法是比较简单的,基本语法就是——服务类型 :本服务有效ip范围 : 许可或拒绝。如hosts.allow中为:

In.telnetd : secu.unix.org : allow In.ftpd : 10.68.32. : allow

in.rshd : all : /usr/local/sbin/safe_finger -l @%h | usr/ucb/mail yiming@371.net

而hosts.deny为——all:all。这两个文件的意思是对telnet来讲,只允许来自secu.unix.org的连接,对ftp而言,允许10.68.32这个c类地址的连接。in.rshd这一部分语法稍微复杂一些,它的意思是外界任何一个ip每次试图使用rsh连接本系统的时候系统会finger发起连接请求的远程用户,并立即将结果发mail到一个管理员的远程信箱yiming@371.net,我们知道,管理员之所以这么做,是因为一般试图进行rsh的连接, 都是有很大的潜在危险性的,这说明也许系统已经被人入侵,并安插了.rhosts文件了,这很危险! 所以对管理员来说,这种连接需要引起极大的注意。hosts.deny文件中的all : all表示除了这些以外,拒绝来自任何地方的任何服务。以上只是对访问控制文件的一个简单说明,管理员可以参看Tcp_wrapper的相应说明定制更为复杂的控制策略.同时需要说明的是,如果需要象上例中设置对rsh的这种finger,mail功能,是需要在Makefile中打开language extension的。

安装前的准备

Tcp_wrapper支持绝大多数Unix操作系统,它的安装需要c编译环境,如gcc,cc等,还需要gzip,gunzip等解压工具。这些工具管理员可从相应站点获取。

Tcp_wrapper可从ftp://ftp.porcupine.org/pub/security/tcp_wrappers_7.6.tar.gz(目前最新的版本是7.6)获得。

Tcp_wrapper的安装

获得Tcp_wrapper包后,用gzip和tar将压缩包解开,会生成Tcp_wrapper目录,进入目录,我们需要编辑Makefile文件,使它合乎我们的工作要求。编辑的基本工作可以分为3步:

第一步:

在Makefile的头一部分我们可以看到REAL_DAEMON_DIR的描述,它表明了Unix系统中真正的守护程序所在位置,即上面提到的第六个分隔段的守护进程所在目录,solaris中这些守护程序的目录是/usr/sbin,所以我们将SysV.4 Solaris 2.x OSF AIX前的#注释号去掉,即下面

第 41 页 共 47 页

Linux系统安全手册

的形式:

# Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx #REAL_DAEMON_DIR=/usr/etc #

# SysV.4 Solaris 2.x OSF AIX REAL_DAEMON_DIR=/usr/sbin #

# BSD 4.4

#REAL_DAEMON_DIR=/usr/libexec #

# HP-UX SCO Unicos

#REAL_DAEMON_DIR=/etc

第二步:

在Makefile 中查找FACILITY= LOG_MAIL这几个关键字,Tcp_wrapper的纪录功能就是由这里实现的,系统默认是使用solaris的MAIL精灵来做连接纪录的,但这样会造成Tcp_wrapper的连接纪录和系统的mail日志混杂在一起,不利于管理员分辨。所以建议还是选用一个solaris中未使用的local精灵。我们在这里使用LOCAL3,即FACILITY= LOG_ LOCAL3 ,SEVERITY级别保持INFO级别不变。修改后即下面的形式:

# The LOG_XXX names below are taken from the /usr/include/syslog.h file. FACILITY= LOG_LOCAL3 #LOG_MAIL is what most sendmail daemons use # The syslog priority at which successful connections are logged。

SEVERITY= LOG_INFO # LOG_INFO is normally not logged to the console

第三步:

接着查找/etc/hosts.allow,/etc/hosts.deny,也就是上文提到的访问控制文件,建议将默认的/etc替换为其它路径。

由此Makefile编辑完成,退出vi,执行make sunos5(sunos5这个参数是由Makefile开始描述部分得到,采用其它操作系统的将sunos5替换为为相应参数即可)。我们可以看到系统在编译,成功后,在当前目录下会生成tcpd,tcpdmatch,safe_finger等5个可执行文件。建议选一个目录如/usr/local/sbin,将上述5个文件拷贝到这个目录中,至此Tcp_wrapper本身的编译工作就此结束。

配置Tcp_wrapper

编辑/etc/inetd.conf,将原

telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd

中的/usr/sbin/in.telnetd替换为tcpd及其所在路径,在此例中即 telnet stream tcp nowait root /usr/local/sbin/tcpd in.telnetd

其它ftp , tftp , rsh , rlogin等同样操作即可,建议至少替换telnet,ftp,rsh,rlogin这几个守护程序。

编辑结束后,保存文件,ps –ef | grep inetd找出inetd的进程号,kill –HUP 重启inetd进程使改动生效。

接着我们编辑/etc/syslog.conf文件,加入日志纪录功能,在此例中即

第 42 页 共 47 页

Linux系统安全手册

#tcp wrapper log

local3.info /var/log/tcplog

编辑结束后,保存文件, 在/var/log下生成tcplog文件,注意这个文件的读写属性, 应该只对root有读写权限。然后ps –ef | grep syslogd,找出syslogd的进程号,kill –HUP 重启syslogd进程使改动生效。

最后一项工作是编辑hosts.deny和hosts.allow文件,按上面的语法编辑即可。至此所有工作完成,我们可以用上述两个文件的设置来试一试,假设主机refuse(IP 11.22.33.44)telnet本机,我们看一看,会有什么反应?

refuse#telnet www.yiming.com Trying www.yiming.com ... Connected to www.yiming.com Connection closed by foreign host.

我们再看看本机Tcp_wrapper的日志,多了一条:

Apr 2 13:56:20 yiming in.telnetd[1769]: refused connect from 11.22.33.44 实际上这种测试可用Tcp_wrapper自带的测试文件tcpdmatch,使用很简单,格式tcpdmatch 守护程序假定IP 即可,这里也不介绍了。

4.5 加密数据传输-Openssh

传统的unix所提供的telnet,ftp,rlogin等标准服务有着诸多的安全隐患:没有有效的认证机制、网络连接中所有的传输数据(包括账号口令)均为明文、容易导致各种形式spoof 数据等。近期更是发现了各种版本的unix 系统的telnet,ftp都存在溢出问题,使攻击者通过这些服务得到超级用户的权限。

一个好的替代方式就是使用ssh,ssh使用成熟的public/private key机制对网络中数据包进行加密,使处于两端的数据通信能够在一个加密通道中进行,从而从根本上解决了网络明文数据传输的问题。除了加密通道中的数据外,使用ssh还可以得到一些额外的好处,比如:

• 端口转发 • 数据压缩 • 源代码开放

SSH的工作原理

SSH(www.ssh.com)最初源于芬兰的程序员Tatu,是完全免费的 (版本1.2.12之前),此后诞生了诸多版本的ssh,加上了各种限制,包括版权和加密算法等,同时用于商业版本的开始收费。因此很多人都转而使用OpenSSH(www.openssh.org)。OpenSSH是SSH的替代软件,它是完全免费的,而且没有任何版权和加密算法的限制,从而得到了日益广泛的应用。

目前openssh版本已到2.9,同时提供对ssh1,ssh2的支持。我们已经知道ssh能对网络中传输的数据进行加密,那么在具体实现的时候客户端连接服务器端的认证是如何实现的呢?ssh提供了几种认证方式,下面我们按在实现时的认证顺序来逐一介绍:

第一种认证方式:如果系统提供了基于r的认证方式,同时在openssh中许可了这种认证方式,则用户允许登录认证。需要注意的是这种认证方式在openssh中出于安全考虑默认是不允

第 43 页 共 47 页

Linux系统安全手册

许的。

第二种认证方式:如果系统提供了基于r的认证方式,同时客户端主机的host key在服务器端的/etc/ssh_known_hosts中或是在对应用户家目录下$HOME/.ssh/known_hosts文件内,则用户允许继续认证过程.

第三种认证方式:是基于rsa的认证, rsa是基于公钥的加密方式的,这种方式加密和解密是依靠独立的密钥的,每个用户都产生自己唯一的钥匙对,公钥分发出去,私钥自己保存,对欲加密的数据使用公钥加密,需要解密时则使用对应的私钥对已加密数据进行解密。这种算法实现安全保障的最重要的一点就是公钥和私钥之间没有关联,根据公钥不可能推导出私钥。为了使用rsa认证,用户需要将自己的公钥放在服务器端自己家目录下,保存为$HOME/.ssh/authorized_keys,同时只有服务器中authorized_keys中列出的用户才能进行认证。采用这种认证方式时,当用户发出登录请求,客户端的ssh程序会告诉服务器端自己打算使用哪个钥匙对,然后服务器端在自己的authorized_keys中检查是否存在该用户的公钥,如果不存在,则拒绝该用户,如果存在,则发给该用户使用该用户公钥加密过的随机数字,我们上面讲到过,只用使用对应的私钥才能对公钥加密数据进行解密。只用该用户正确解密,认证过程才能继续进行。

系统中的每个用户都可以利用ssh-keygen生成自己的钥匙对,并保存在自己家目录下的.ssh下,公钥保存为identity,私钥保存为identity.pub。上面讲到过,为了实现rsa认证,用户需要把自己的公钥(identity.pub)拷贝到服务器端家目录下,并改名为authorized_keys。这样的话用户登录服务器时,不需要输入口令即可以成功登录。

最后:如果上述条件均不满足,则openssh进入基于普通的passwd认证方式,此时网络上传输所有的数据都是加密的。

安装

为了成功的安装openssh,需要预先安装zlib及openssl,相关的软件可以在以下网址下载。 Zlib:

http://www.freesoftware.com/pub/infozip/zlib/ OpenSSL

http://www.openssl.org/

上述软件都安装ok了以后,就可以进行openssh的安装了,具体到安装是比较简单的,我们假设准备将这个软件包安装到opt目录下。

解开gz包,

gzip -d openssh-1.2.2.tar.gz | tar xf – cd openssh-1.2.2; ./configure --prefix=/opt/openssh --without-rsh 再依次执行make,make install编译就结束了。

在编译时,还有些常用的选项,如:--with-tcp-wrappers,这个选项是为了集成tcp_wrapper使用的,这样编译的话,管理员可以定义允许连接sshd的ip地址段。

编译结束后,在/opt/openssh目录下会生成etc,bin,sbin,man,libexec几个目录,其中sbin,bin,etc为最常用的目录,这三个目录下比较重要的文件分别有sbin下的sshd,它就是ssh的守护进程,提供ssh服务。其次还有bin下的ssh,它为ssh客户端程序,用来执行ssh连接请求。ssh-keygen,用来生成用户的密钥匙对及主机的host key。etc下有sshd及ssh的配置文件,以及host key文件。

第 44 页 共 47 页

Linux系统安全手册

4.6 日志监控工具-logcheck

审核和记录系统的事件是非常重要的。特别是当你的计算机连接到Internet上之后,系统管理员如果对“异常”的事件保持警觉,就能防止系统被入侵。在Unix系统中如果仅仅把系统事件作为日志记录下来,而不去查看,还是无济于事。logchek可以自动地检查日志文件,先把正常的日志信息剔除掉,把一些有问题的日志保留下来,然后把这些信息email给系统管理员。Logcheck被设计成自动运行,定期检查日志文件以发现违反安全规则以及异常的活动。logcheck用logtail程序记住上次已经读过的日志文件的位置,然后从这个位置开始处理新的日志信息。 注意事项,下面所有的命令都是Unix兼容的命令。源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。安装在RedHat Linux 6.1和6.2下测试通过。要用“root”用户进行安装。Logcheck的版本是1.1.1。软件包的来源

Logcheck的主页:http://www.psionic.com/abacus/logcheck/。

下载:logcheck-1.1.1.tar.gz。

解压软件包,把软件包(tar.gz)解压: [root@deep /]# cp logcheck-version.tar.gz /var/tmp/ [root@deep /]# cd /var/tmp

[root@deep tmp]# tar xzpf logcheck-version.tar.gz

编译和优化

必须修改“Makefile”文件,设置Logcheck的安装路径、编译标记,还要根据你的系统进行优化。必须根据RedHat的文件系统结构来修改“Makefile”文件,并且在“PATH”环境变量的设定的路径中安装logcheck的脚本文件。

第一步

转到Logcheck所在的目录。

编辑“Makefile”文件(vi Makefile)并改变下面这些行: CC = cc 改为: CC = egcs

INSTALLDIR = /usr/local/etc 改为:

INSTALLDIR = /etc/logcheck

INSTALLDIR_BIN = /usr/local/bin 改为:

INSTALLDIR_BIN = /usr/bin

INSTALLDIR_SH = /usr/local/etc 改为:

INSTALLDIR_SH = /usr/bin

TMPDIR = /usr/local/etc/tmp

第 45 页 共 47 页

Linux系统安全手册

改为:

TMPDIR = /etc/logcheck/tmp

上面这些修改是为了把“Makefile”配置为使用“egcs”编译器,使用适应于我们系统的编译优化标记,并且把Logcheck的安装目录设置成遵循RedHat的文件系统结构。

第二步

编辑“Makefile”文件(vi +67 Makefile)改变下面这些行: @if [ ! -d $(TMPDIR) ]; then /bin/mkdir $(TMPDIR); fi 改为:

@if [ ! -d $(TMPDIR) ]; then /bin/mkdir -p $(TMPDIR); fi

加上“-p”参数是让安装程序根据需要自动创建目录。 第三步

安装Logcheck:

[root@deep logcheck-1.1.1]# make linux

上面的命令为Linux操作系统配置Logcheck,然后把源文件编译成二进制文件,最后把二进制文件和配置文件拷贝到相应的目录。

清除不必要的文件

用下面的命令删除不必要的文件: [root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf logcheck-version/ logcheck-version_tar.gz “rm”命令删除所有编译和安装Logcheck所需要的源程序,并且把Logcheck软件的压缩包删除掉。

配置“/usr/bin/logcheck.sh”文件

因为我们不使用“/usr/local/etc”这个路径,所以必须改变“logcheck.hacking”、“logcheck.violations”、“logcheck.ignore”、“logcheck.violations.ignore”和“logtail”中所有的路径到要改变。Logcheck的脚本文件“/usr/bin/logcheck.sh”允许设置一些选项,可以改变路径和程序的运行。这些都有详细的注释,也很简单。

第一步

编辑“logcheck.sh”文件(vi /usr/bin/logcheck.sh)并且改变: LOGTAIL=/usr/local/bin/logtail

改为:

LOGTAIL=/usr/bin/logtail

TMPDIR=/usr/local/etc/tmp 改为:

TMPDIR=/etc/logcheck/tmp

HACKING_FILE=/usr/local/etc/logcheck.hacking 改为:

HACKING_FILE=/etc/logcheck/logcheck.hacking

VIOLATIONS_FILE=/usr/local/etc/logcheck.violations

第 46 页 共 47 页

Linux系统安全手册

改为:

VIOLATIONS_FILE=/etc/logcheck/logcheck.violations

VIOLATIONS_IGNORE_FILE=/usr/local/etc/logcheck.violations.ignore 改为:

VIOLATIONS_IGNORE_FILE=/etc/logcheck/logcheck.violations.ignore

IGNORE_FILE=/usr/local/etc/logcheck.ignore 改为:

IGNORE_FILE=/etc/logcheck/logcheck.ignore

第二步

把Logcheck放到crontab中,使之成为cronjob:

安装完Logcheck之后,必须以“root”权限编辑本地的“crontab”文件,并把Logcheck设置成每小时运行一次(当然你也可以把时间设长一点或者设短一点)。 用下面的命令编辑crontab:

[root@deep /]# crontab -e

# Hourly check Log files for security violations and unusual activity. 00 * * * * /usr/bin/logcheck.sh

注意:如果没有必要的话,Logcheck是不会用email报告任何东西的。 logcheck.hacking

logcheck首先读取logcheck.hacking配置文件。该文件包含表示入侵活动的模式,与之匹配的日志文件行输出到报告的第一部分。

logcheck.violations

检查过logcheck.hacking文件的申明的模式后,logcheck读入logcheck.violations的内容。该配置文件的模式表示有问题的活动,却不一定是入侵签名,与之匹配的日志语句以”Security Violation”为题目写入报告的下一部分。

logcheck.violations.ignore

在有问题的信息中,有的是你想看的,有的却不是。本配置文件的模式提供了不想看的模式。

logcheck.ignore

检查的最后一个模式文件。日志语句如果没有和前三个模式文件匹配,又没有匹配上本文件的格式,则输出到报告中。

logcheck首次运行时读入相关日志文件的所有内容。Logtail在日志文件的目录下为每个日志创建logfile.offset文件。每个日志文件中的每一语句经过logcheck.*模式文件匹配后,未被忽略的内容通过邮件发给SYSADMIN指定的用户。

以后logcheck再运行时读logfile.offset,跳过日志文件处理过的部分,继续处理。

第 47 页 共 47 页

因篇幅问题不能全部显示,请点此查看更多更全内容