size=18:1c8b84d2b5][b:1c8b84d2b5][color=darkblue:1c8b84d2b5]常用的Linux网络安全工具介绍[/color:1c8b84d2b5][/b:1c8b84d2b5][/size:1c8b84d2b5] 6 `* F% @! `1 T" s4 l3 j% z% ?作者:吴阿亭 + `2 W q) c# E: ^1 A# k4 H" P2 c/ j0 A3 p) Z F- m
[b:1c8b84d2b5]简介:[/b:1c8b84d2b5] ' \" t3 f0 L1 \* |0 Z 尽管各种版本的Linux distribution 附带了很多开放源的自由软件,但是仍然有大量的有用的工具没有被默认。 # Z( }$ X. \: U! _, ? 包括在它们的安装光盘内,特别是有一些可以增强Linux网络安全的工具包,它们大多也是开放源的自由软件。 6 Y8 w, z4 r8 p( }# \
0 V: `8 R& R: p) M
这里简单地介绍一下几个增强Linux网络安全的工具。 ' N2 |3 b9 |' _) S L7 O
[b:1c8b84d2b5]1. sudo[/b:1c8b84d2b5] & L& A' G# N& [; E
sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果你需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用sudo对你是非常适合的。 ! A P( ^/ f* Z) ]! X5 tsudo的主页在:http://www.courtesan.com/courtesan/products/sudo/ ( g5 h# W7 ~ i9 f
以Redhat 为例,下面介绍一下安装及设置过程: 6 r: @, t) e" K) l6 k 首先,你能从sudo主页上下载for Redhat Linux的rpm package. * P) G: v& a* C& y E# l
它在ftp://ftp.freshmeat.net/pub/rpms/sudo/ 当前最新的稳定版本1.5.9p4。 6 T( W4 F, {( P7 J7 A! N
7 d+ ~9 R4 ^# ?0 E 执行#rpm -ivh sudo* 进行安装,然后用/usr/sbin/visudo编辑/etc/sudoers文件。 , f; l7 _" l1 Q: M% D如果系统提示你找不到/usr/bin/vi但实际上你在目录/bin下有vi程序,你需要 : |7 V. w/ c& Z k2 @% Tln -sf /bin/vi /usr/bin/vi为vi 在/usr/bin下创建符号链接。(注:我在Redhat 6.1上遇到,Redhat 5.x上没有此问题) / F% A3 V5 L$ X* T1 ~( m 另外,如果出现某些其它错误,你可能还需要#chmod 700 /var/run/sudo ; V. K- |# M) m$ O
& l6 W+ @/ \" R$ g下面是我的/etc/sudoers文件例子: 9 K* J: f" C8 ]- `0 S2 q[code:1:1c8b84d2b5][root@sh-proxy /etc]# more sudoers ' g1 s* f4 o* M6 u5 Z2 M9 x8 b3 qHost_Alias SERVER=sh-proxy . h9 Y, n1 K6 R* R$ ?& o( a+ k% j
# User alias specification 7 J" b( p7 J8 t6 e( B + g+ U, V* e6 J+ E/ }User_Alias ADMIN=jephe,tome , d% J4 _2 j# }9 @) g ) O; ]1 H. A- [ m# Cmnd alias specification $ v/ E' X: f$ J: G/ T8 \ ( m6 w' |/ T. z+ H# Z- wCmnd_Alias SHUTDOWN=/etc/halt,/etc/shutdown,/etc/reboot 7 S, e& Z' r6 i' K: f1 |' T! X4 f7 ], T" D' l
ADMIN SERVER=SHUTDOWN 7 y! o6 h0 o3 w) ^: D
jephe SERVER=/usr/bin/tail -f /var/log/maillog 2 v, }8 e& B/ ^( w7 `/ E
jephe SERVER=/usr/bin/tail -f /var/log/messages 1 L2 T2 w# i2 ]' U: U5 V
' {1 x! q. w: k5 p5 l# User privilege specification 8 e+ P1 r9 Z# i5 y. Yroot ALL=(ALL) ALL[/code:1:1c8b84d2b5] 0 x* d' u: Z% e2 t) V
+ }9 U9 |7 E, j----------- ! r9 V8 N! w1 l9 b) K1 t9 e, a' e7 a
既然我经常需要远程登录到服务器观察email log文件/var/log/maillog的变化,因此我加了这一行到 /etc/sudoers,这样我不需要经常登录作为root来完成我的日常工作,改善了安全性。 . D6 ]& J3 F& e- C, r
$ I- O5 q1 B2 ][b:1c8b84d2b5]2. Sniffit[/b:1c8b84d2b5] 4 D1 i f9 @ p& P! d5 k& o sniffit 是一个有名的网络端口探测器,你可以配置它在后台运行以检测哪些Tcp/ip端口上用户的输入/输出信息。 6 O* N3 k% O5 L' S- ^% G8 \) }" c 最常用的功能是攻击者可以用它来检测你的23(telnet)和110(pop3)端口上的数据传送以轻松得到你的登录口令和mail帐号密码,sniffit基本上是被破坏者所利用的工具,但是既然想知道如何增强你的站点的安全性,首先你应该知晓闯入者们所使用的各种工具。 " x: j: Z& e. f; e $ n6 |2 `" E/ V0 f* d sniffit 的主页在 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html你能从那里下载最新的版本,安装是非常容易的,就在根目录运行#tar xvfz sniff*解开所有文件到对应目录。 / D0 m1 c" g8 L1 K
3 O6 o' n, M* K8 Z1 y8 E6 [% v 你能运行sniffit -i以交互式图形界面查看所有在指定网络接口上的输入/输出信息。 6 d( Z& p$ p" t7 X0 K- M$ Y$ N1 b+ Z0 I, h# q
如:为了得到所有用户通过某接口a.b.c.d接收邮件时所输入的pop3帐号和密码,你能运行 $ Q+ {" i9 ]0 Q8 r. \" C
#sniffit -p 110 -t a.b.c.d & 9 q# \& Y" s0 Q0 h- p9 Y* w#sniffit -p 110 -s a.b.c.d & : @$ @1 Z2 N- [6 \7 m记录文件放在目录/usr/doc/sniffit*下面: 7 L( k1 q$ q3 i( Y log file根据访问者的IP地址,随机高端端口号和用来检测的网络接口IP地址和检测端口来命名。它利用了tcp/ip协议天生的虚弱性,因为普通的telnet和pop3所传的用户名和密码信息都是明文,不带任何方式的加密。 因此对telnet/ftp.你可以用ssh/scp来替代. sniffit检测到的ssh/scp信息基本上是一堆乱码,因此你不需要担心ssh所传送的用户名和口令信息会被第三方所窃取。 & N! G; |5 U; V" ^# h [ ( h w9 v. L1 h! d2 N$ ]; _; @1 H: R6 z7 W9 d+ u
[b:1c8b84d2b5]3. ttysnoop(s)[/b:1c8b84d2b5] ! J: |4 ?. h: L0 d8 M 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测试这个程序是有趣的,下面是相关指令: . T0 ~1 i& @0 p' j3 S$ M" h. A
9 B" o5 v" s: d# F' q 首先改/etc/inetd.conf中的in.telnetd默认调用login登录程序为/sbin/ttysnoops,象下面这样: 6 a' s6 \$ z' H A) d1 T& U9 ~6 w
[code:1:1c8b84d2b5][root@jephe /etc]# more inetd.conf | grep in.telnetd ; A; b. u6 c* m. K* p; I
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -L /sbin/ttysnoops[/code:1:1c8b84d2b5] 0 K t) P* a5 L 更改后一定要运行killall -HUP inetd使之生效,确保不要使用阴影口令,用#pwunconv禁止阴影口令。 + H# X4 Y- J" U. ^# q) k再编辑文件/etc/snooptab默认配置就可以了。 ' A3 n0 P9 j* k5 t[code:1:1c8b84d2b5][root@jephe /etc]# more snooptab 2 e5 |, C0 x. R5 O
ttyS1 /dev/tty7 login /bin/login ; J" |& \ o( D: qttyS2 /dev/tty8 login /bin/login : @9 Q% n- x' f8 Q2 n( m: |
* socket login /bin/login[/code:1:1c8b84d2b5] 4 ~ }2 q `+ L, t
------ ( X4 a: |4 n. \
最后,如果在某个终端上有人登录进来(你可以用w命令查看它在哪个终端),如登录终端设备为ttyp0,则你可以登录进服务器打入#/bin/ttysnoop ttyp0(提示输入root口令,再次,上面提到的这个版本不支持阴影口令)以监视用户的登录窗口。 9 p& y4 }, [4 o1 U) Y
" N. Q" B! f' W/ t1 Y* D[b:1c8b84d2b5]4. nmap[/b:1c8b84d2b5] 6 q; {! }: ^" X
nmap 是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些tcp/ip端口目前正处于打开状态。你可以运行它来确保已经禁止掉不该打开的不安全的端口号。 $ P, T( E Q p' N
nmap的主页在http://www.insecure.org/nmap/index.html * f" e% k1 q, I- [5 i3 d: y& `
6 ]5 Z7 y1 t0 Y- f, T
下面给出一个简单的例子: + ]6 y( i1 r; y3 A }" U3 {[code:1:1c8b84d2b5][root@sh-proxy /etc]# /usr/local/bin/nmap public.sta.net.cn 0 C: o; n. _! U, v 0 i: g0 q6 D! |; HStarting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/) 4 n# f( a, H6 O- P
Interesting ports on public.sta.net.cn (202.96.199.97): 9 r$ P0 |# e5 q2 g* A2 ?; h6 {
Port State Protocol Service $ T$ m; t9 j7 ]6 @+ m o0 |/ p4 e% J
21 open tcp ftp 0 w+ T" I7 u% L( i7 P: q. F9 ~23 open tcp telnet ' o1 i# X8 d! a" I4 ? y7 U25 open tcp smtp 5 @) }4 }; u- p" z& r Q0 \
109 open tcp pop-2 ! ^7 z. y7 e2 V
110 open tcp pop-3 3 {/ x& O. q q: z. i2 }
143 open tcp imap2 7 [, W9 p( ^, r: e( u) k* }3 t
513 open tcp login * e" Y X/ C. c, x. F/ k514 open tcp shell : @* M8 F% |: L6 a5 l6 T0 k* f* r& E7000 open tcp afs3-fileserver 8 F8 G& q y- A/ B * { k! V, _. @4 N7 aNmap run completed -- 1 IP address (1 host up) scanned in 15 seconds[/code:1:1c8b84d2b5] 1 s4 J; H0 S! h* ^ 4 I7 N7 [- i+ T6 u5 u0 w+ V ; }( o# _& m, C2 X 8 k; z. _% Q' F2 A5 R& b[b:1c8b84d2b5]第二部分[/b:1c8b84d2b5] 7 {) k& c0 g# \
& s7 S* Z0 D& `# o7 R) u[b:1c8b84d2b5]一 John the ripper[/b:1c8b84d2b5] 8 ?8 S' A l- P$ ~& N
+ N F8 M0 h7 B 在Linux中,密码以hash格式被存储,你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。 ( J% f/ R; o; A; ?2 Q8 d+ J% r! c& |
( I# E+ |" E, C' m John the ripper是一个高效的易于使用的密码猜测程序,其主页在http://www.openwall.com/john/ ) b: |; ~! y( |; Y" h下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入 make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。 V3 u5 S. ]1 o) {% N