; X/ l0 k- |# n) t, f, }[b:1c8b84d2b5]简介:[/b:1c8b84d2b5] 8 L3 W* n! Q, l: b( X
尽管各种版本的Linux distribution 附带了很多开放源的自由软件,但是仍然有大量的有用的工具没有被默认。 1 A5 d$ `$ H7 i# u6 E 包括在它们的安装光盘内,特别是有一些可以增强Linux网络安全的工具包,它们大多也是开放源的自由软件。 $ ?8 w9 Y5 ?' O9 {, q Y p$ Q( \1 i# V; z+ \1 f4 [% g3 Y# @. W
这里简单地介绍一下几个增强Linux网络安全的工具。 , H! S& N, l, }' m, R) c
[b:1c8b84d2b5]1. sudo[/b:1c8b84d2b5] ' V! n) q6 x7 I( @" s
sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果你需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用sudo对你是非常适合的。 5 W( f. Z! r, p+ n1 L
sudo的主页在:http://www.courtesan.com/courtesan/products/sudo/ # u1 x; G4 e8 H. R: f. K 以Redhat 为例,下面介绍一下安装及设置过程: ) E3 i. }* h2 M9 r 首先,你能从sudo主页上下载for Redhat Linux的rpm package. . y% i4 c E0 M* G8 ?+ X2 i它在ftp://ftp.freshmeat.net/pub/rpms/sudo/ 当前最新的稳定版本1.5.9p4。 . H) j. E# U0 d. U9 Z: U 8 J7 n4 t) _& e( `# E4 K 执行#rpm -ivh sudo* 进行安装,然后用/usr/sbin/visudo编辑/etc/sudoers文件。 ?. K Q4 z5 N' R/ X如果系统提示你找不到/usr/bin/vi但实际上你在目录/bin下有vi程序,你需要 6 s) H2 ` A5 a, C- A
ln -sf /bin/vi /usr/bin/vi为vi 在/usr/bin下创建符号链接。(注:我在Redhat 6.1上遇到,Redhat 5.x上没有此问题) ( q' e- ^6 U! E& I) H$ @& s9 o' P
另外,如果出现某些其它错误,你可能还需要#chmod 700 /var/run/sudo 6 x; q! Q& R; { 0 C" Q$ S! m' l' _/ D, J$ P下面是我的/etc/sudoers文件例子: % I! U2 |+ Z! k! k* P$ d3 B) W
[code:1:1c8b84d2b5][root@sh-proxy /etc]# more sudoers 1 }- S7 x- L: U' p3 I9 N4 y
Host_Alias SERVER=sh-proxy 6 C% I$ B( p W% Q! X4 y- V6 |
+ H' d6 {$ b/ }7 v5 {
# User alias specification * x& E, w+ Q2 C% j& S9 f# \
6 P8 s* C3 f2 E A- D: z5 D
User_Alias ADMIN=jephe,tome 6 N! k5 X+ \; V' }' {- X
4 x5 Z! [" }8 N6 l8 X+ U. C% s# Cmnd alias specification 8 U5 @/ Q. h8 m) E) }' }; x4 `: f, w# M: a! S
/ F+ W2 I' H9 M
Cmnd_Alias SHUTDOWN=/etc/halt,/etc/shutdown,/etc/reboot - A+ Z( s0 f5 ~. w& {& q- p( M) i) t( b7 n. S e' n3 e& ^* m: }
ADMIN SERVER=SHUTDOWN ' d: {& L, ^# r. l3 g- U" {& |7 Ljephe SERVER=/usr/bin/tail -f /var/log/maillog ) h+ Y. Y# n- a5 |
jephe SERVER=/usr/bin/tail -f /var/log/messages 2 m; v' k; f# }
& `( j) X# ^( e- w
# User privilege specification ! ]7 v. [6 w& R& q6 C9 iroot ALL=(ALL) ALL[/code:1:1c8b84d2b5] 9 u( k, W" P! ~0 `+ a7 L: d; N) Z+ j% B4 D" s, a
----------- % o2 l3 \7 r1 C& q8 y" \ q4 q3 M: [
既然我经常需要远程登录到服务器观察email log文件/var/log/maillog的变化,因此我加了这一行到 /etc/sudoers,这样我不需要经常登录作为root来完成我的日常工作,改善了安全性。 6 G& c2 n* G5 H. @
5 i4 }3 W, R, d& v- ?# S
[b:1c8b84d2b5]2. Sniffit[/b:1c8b84d2b5] 4 M9 \. c8 `; \* j
sniffit 是一个有名的网络端口探测器,你可以配置它在后台运行以检测哪些Tcp/ip端口上用户的输入/输出信息。 % u- z' Z+ z9 W* |1 w3 k, o 最常用的功能是攻击者可以用它来检测你的23(telnet)和110(pop3)端口上的数据传送以轻松得到你的登录口令和mail帐号密码,sniffit基本上是被破坏者所利用的工具,但是既然想知道如何增强你的站点的安全性,首先你应该知晓闯入者们所使用的各种工具。 9 T$ c, n2 K+ p . U6 O% T4 V; `" q2 l' o, m) _ sniffit 的主页在 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html你能从那里下载最新的版本,安装是非常容易的,就在根目录运行#tar xvfz sniff*解开所有文件到对应目录。 1 E. ~5 ?# D; i0 ?+ t* p # M$ U& Y6 ?7 P0 C1 L 你能运行sniffit -i以交互式图形界面查看所有在指定网络接口上的输入/输出信息。 , Y; v; K0 V1 ~! ?
3 e: M2 t( q1 o+ @' B
如:为了得到所有用户通过某接口a.b.c.d接收邮件时所输入的pop3帐号和密码,你能运行 # i4 b: {4 D: E# g c
#sniffit -p 110 -t a.b.c.d & ) U O' X* ^' J! E
#sniffit -p 110 -s a.b.c.d & % J, g d. ^+ b. |: e+ h0 D记录文件放在目录/usr/doc/sniffit*下面: 4 Z+ K" y# S6 t% q, R% X log file根据访问者的IP地址,随机高端端口号和用来检测的网络接口IP地址和检测端口来命名。它利用了tcp/ip协议天生的虚弱性,因为普通的telnet和pop3所传的用户名和密码信息都是明文,不带任何方式的加密。 因此对telnet/ftp.你可以用ssh/scp来替代. sniffit检测到的ssh/scp信息基本上是一堆乱码,因此你不需要担心ssh所传送的用户名和口令信息会被第三方所窃取。 & ~5 P* T' g3 f' h
3 v) h. I8 a) Z" }6 j
' d. f. m3 x* o[b:1c8b84d2b5]3. ttysnoop(s)[/b:1c8b84d2b5] 1 v2 P' h, i* W
ttysnoop是一个重定向对一个终端号的所有输入/输出到另一个终端的程序。目前我所知道的它的所在网站为http://uscan.cjb.net,但是始终连不上去,从其它途径我得到了ttysnoop-0.12c-5 ,地址是http://rpmfind.net/linux/RPM/contrib/libc6/i386/ttysnoop-0.12c-5.i386.html这个版本好象还不能支持shadow password,安装后你需要手动创建目录/var/spool/ttysnoop测试这个程序是有趣的,下面是相关指令: 3 ]: Q% ]! c$ A( w
* n* {* C4 i+ s2 C
首先改/etc/inetd.conf中的in.telnetd默认调用login登录程序为/sbin/ttysnoops,象下面这样: 2 U& c1 P- }( r8 e7 H3 J2 l# k; J" b" I[code:1:1c8b84d2b5][root@jephe /etc]# more inetd.conf | grep in.telnetd + V* E, c% c- S0 f" M& Q" qtelnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -L /sbin/ttysnoops[/code:1:1c8b84d2b5] ( O( b& T. e& J& y0 n 更改后一定要运行killall -HUP inetd使之生效,确保不要使用阴影口令,用#pwunconv禁止阴影口令。 ' B& n& n- l* W' g
再编辑文件/etc/snooptab默认配置就可以了。 & z! B9 G) ?% T[code:1:1c8b84d2b5][root@jephe /etc]# more snooptab 6 x4 P' D& E" U; l# A
ttyS1 /dev/tty7 login /bin/login 6 W2 L1 ?2 b3 N# ]/ u+ X8 ^1 n
ttyS2 /dev/tty8 login /bin/login 2 W1 z0 {, v: i
* socket login /bin/login[/code:1:1c8b84d2b5] 6 z/ C) P+ o- v$ l+ @2 ]
------ . W, a( b: I, K8 w, p- `
最后,如果在某个终端上有人登录进来(你可以用w命令查看它在哪个终端),如登录终端设备为ttyp0,则你可以登录进服务器打入#/bin/ttysnoop ttyp0(提示输入root口令,再次,上面提到的这个版本不支持阴影口令)以监视用户的登录窗口。 4 c7 G5 P x* A @0 \* B$ r) v/ N s0 x f9 r3 C5 h3 n
[b:1c8b84d2b5]4. nmap[/b:1c8b84d2b5] - d& Y0 m$ b8 Z& v! L( N- o
nmap 是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些tcp/ip端口目前正处于打开状态。你可以运行它来确保已经禁止掉不该打开的不安全的端口号。 0 I6 d9 D( r% D nmap的主页在http://www.insecure.org/nmap/index.html 0 P+ b2 G3 x2 \ S8 b& l. f* N" `* |9 _5 y4 {. ^
下面给出一个简单的例子: 1 e: ^: M* J3 o3 X C6 x& ]
[code:1:1c8b84d2b5][root@sh-proxy /etc]# /usr/local/bin/nmap public.sta.net.cn - W: P$ L0 B+ l 1 {' x* ^# g& Z3 [ a0 QStarting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) " ^# M* ~/ e; R- L
Interesting ports on public.sta.net.cn (202.96.199.97): & ^. D g' f/ P0 w( _Port State Protocol Service 4 [5 a4 J9 Z% m0 f21 open tcp ftp 2 Z* {5 }. p: P5 v0 H23 open tcp telnet * b! q! y0 }7 [* ?25 open tcp smtp * Y/ C% ^0 E- {5 A2 J% F
109 open tcp pop-2 ' ]! N! f0 W% B" |* c* x% F d7 ^110 open tcp pop-3 * G2 G6 p8 \) ]# N
143 open tcp imap2 t6 }0 E/ B9 N- p( u- ^6 m513 open tcp login 9 `' c3 Y9 D/ |: H514 open tcp shell 2 l$ T1 p. o; K) q7000 open tcp afs3-fileserver ) a4 m( P+ p9 R( O: ]5 G8 Y
5 }* l8 ~# L) Y, u9 A& F' yNmap run completed -- 1 IP address (1 host up) scanned in 15 seconds[/code:1:1c8b84d2b5] - F# R. E) A) o3 x# M, |
( D' i- M {2 d3 j2 i 9 m% t/ B* x1 A m) j9 k7 L& K : w: b( F, H% {- s[b:1c8b84d2b5]第二部分[/b:1c8b84d2b5] $ ^5 I7 o0 H. `! z
& r K# C, N; a
[b:1c8b84d2b5]一 John the ripper[/b:1c8b84d2b5] ; T) [2 P$ o1 e. G5 c: A% x 0 T( u1 Q* D+ l& j 在Linux中,密码以hash格式被存储,你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。 % }. E" J% Y" G8 {, k5 E, B
) G! }/ L$ }# W1 @) c, a John the ripper是一个高效的易于使用的密码猜测程序,其主页在http://www.openwall.com/john/ ' x; }1 B% l% q4 a4 f9 |, d) ~
下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入 make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。 # P9 L9 V2 x4 t- C- x
% d: o3 z& a% e2 P, p6 Q John也可以Crack由htpasswd 生成的用于验证apache用户的密码,如果你用htpasswd -c apachepasswd user创建了一个用户user,并生成了密码,你也可以用john apachepasswd来进行猜测。John在猜测密码时输出在终端上,并把猜测出的密码存于john.pot文件中。 9 f' k5 A9 }, F, h1 I; L
另一个password Cracker是大家知道的经典的Cracker. 主页在http://www.users.dircon.co.uk/~crypto/ 8 F |; r4 E" T" L
- @) [- X8 |& B% V* V! \& m" l[b:1c8b84d2b5]二.Logcheck[/b:1c8b84d2b5] # }& g1 P2 i5 O/ _* c" V# M
, M! Y3 a1 l7 e& {
Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux log文件, ! s! u7 R5 N) W* U$ o8 }7 v象/var/log/messages, /var/log/secure,/var/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送email给管理员。你能设置它基于每小时,或者每天用crond来自动运行。 7 c+ t+ ` a) z& J1 @: B0 e* ?' Z1 o' f( Q3 ]
logcheck工具的主页在http://www.psionic.com/abacus/logcheck/下载后用tar xvfz logcheck*解开到一临时目录如/tmp下,然后用./make linux自动生成相应的文件到/usr/local/etc,/usr/local/bin/等目录下,你可能更改设置如发送通知能谁的邮件帐号,默认发送到root,你能设置root的邮件别名帐号到一批人,更改设置让其忽略某些类型的消息如你的邮件记录文件中的plug-gw,因为plug-gw做反向IP查找,若找不到则记录一个警告消息到/var/log/maillog,logcheck默认记录下所有这些警告发送给你,你可以通过设置忽略掉它们。 ! T0 m$ U e9 V! V) c T/ z/ q# g6 u- K/ ]% Q0 C2 x
利用logcheck工具分析你的所有logfile,避免了你每天经常手动地检查它们,节省了时间,提高了效率。 ( W% S5 \2 l8 R " q8 H3 s I: u5 }[b:1c8b84d2b5]三. Tripwire[/b:1c8b84d2b5] ; i0 V0 ~# M3 r7 g, }5 b) t+ N4 G2 V. @* q8 p$ x
Tripwire 是一个用来检验文件完整性的非常有用的工具,你能定义哪些文件/目录需要被检验,不过默认设置能满足大多数的要求,它运行在四种模下:数据库生成模式,数据库更新模式,文件完整性检查,互动式数据库更新。当初始化数据库生成的时候,它生成对现有文件的各种信息的数据库文件,万一以后你的系统文件或者各种配置文件被意外地改变,替换,删除,它将每天基于原始的数据库对现有文件进行比较发现哪些文件被更改,你能根据email的结果判断是否有系统入侵等意外事件。 / e# K: N$ Z$ ^3 k) U, Q8 E. Y2 t ( k/ W) W. S* t: ~7 y5 | Tripwire的主页在 http://www.tripwiresecurity.com , tripwire-1.2.3的版本你能免费使用。如果你使用Redhat Linux 6.1,你也能得到最新的为6.1重建的Tripwire-1.2.3 , A1 F/ `2 y: n(http://rufus.w3.org/linux/RPM/powertools/6.1/i386/tripwire-1.2-3.i386.html)当你手动更改了系统中的配置文件或程序时,你能手动再次生成一次数据库文件,运行 tripwire-initialize 在当前目录下创建databases目录并在该目录下生成新的系统数据库文件,然后cp到/var/spool/tripwire目录中覆盖旧的。