grub和windows2000的恢复历程

    本人使用的是华硕Z9100L笔记本,三星40G硬盘,256M内存,安装了win2000和ubuntu5.1双系统,在用sysv-rc-conf对ubuntu系统启动选项进行配置时,不知怎么把原先win2k系统的c盘引导搞坏了,最后连MBR上的grub也被改得一塌糊涂,所以只好想办法抢救……

    先安装win2k再安装Ubuntu5.1,一切正常!但不满意ubuntu缓慢的启动和启动时加载的一些无聊无用又耗资源的服务,于是参照网上Ubuntu启动优化的文章进行配置。由于有些服务不清楚其用途,只好慢慢参照网文尝试:下载了sysv-rc-conf,sudo运行更改配置,关闭一些不必要的服务,正当高兴之际,却发现原先自动加载的windows分区c盘不见了,好像关闭过lvm和evms(企业卷管理服务,应该可以不用吧?);重启进win2k分区看看,My God,完蛋了,进不去了!

    哦,应该是mbr的分区信息被破坏吧,想办法修修,win2k不想重装。于是跑到新立得软件包管理其中找到testdisk工具(此时ubuntu正常,grub正常,只是windows进不去),貌似不错;sudo一下,恩,分区信息能认出来,但提示mbr有错误,采用testdisk的advanced选项进去,然后backup BS一下,在Dump,发现mbr的0x55aa标志都没了,内容也被改了,只好rebuild一下,重启……焦急等待一分多钟之后,发现还是不行,没办法,继续用testdisk重写一下MBR,结果……555,grub都没了,加上win2k无法启动,整个机子就无法启动。

    没办法,准备先修复windows2000启动再看看能否修复ubuntu和grub,采用win98启动光盘启动,》fdisk /mbr一下,哈哈,MBR总归还能修复的,不过还是无法启动,只是在DOS下能认出原先windows的三个盘。没办法,》sys c: 一下,呵呵,结果硬盘能启动了,不过是“熟悉”的win98界面,然后进入dos;没办法,找来win2k安装盘,修复安装一下,哈,三四十分钟后,久违的win2k终于启动起来了,一切正常,还好,哈哈。 现在开始修复Grub和Ubuntu启动,网上搜到关于Grub修复的文章,哈,还真管用,不过不能完全照搬而已,下面详细记录一下grub的一些常用命令和常识:

    (一)、分区映射关系:

    1、(fd0)——>代表软盘,一般不用:)

    2、(hd0)——>第一个硬盘,即linux下的/dev/hda ;3、(hd0,3)——>/dev/hda4 (hd0,x)->x为分区号减一,即(hd0,0)代表/dev/hda1,(hd0,1)代表/dev/hda2 ……

    (二)、手工启动Ubuntu

    由于硬盘已无法启动需要借助光盘,幸好手头有Ubuntu的 LiveCD,这次派上用场了,哈哈(没有的也可以找有grub启动的光盘或Linux安装盘进行Linux rescue启动进去)。

    在启动grub时安e进入grub>命令行界面,然后看看原先的grub配置文件:

    grub>cat (hd0,3)/boot/grub/menu.lst #看一下原先的配置文件,我的linux安装在/dev/hda4分区上,所以是(hd0,3)。

    我的menu.lst配置部分如下:

    #配置文件内容my menu.lst main content—— (some default options and description here) ##

    ## End Default Options ##

    title Ubuntu, kernel 2.6.12-10-686 root (hd0,3)

    kernel /boot/vmlinuz-2.6.12-10-686 root=/dev/hda4 ro quiet splash initrd /boot/initrd.img-2.6.12-10-686 savedefault boot

    title Ubuntu, kernel 2.6.12-10-686 (recovery mode)

    root (hd0,3)

    kernel /boot/vmlinuz-2.6.12-10-686 root=/dev/hda4 ro single initrd /boot/initrd.img-2.6.12-10-686 boot

    title Ubuntu, memtest86+ root (hd0,3)

    kernel /boot/memtest86+.bin boot

    ### END DEBIAN AUTOMAGIC KERNELS LIST

    # This is a divider, added to separate the menu items below from the Debian # ones. title Other operating systems: root # This entry automatically added by the Debian installer for a non-linux OS # on /dev/hda1

    title Windows NT/2000/XP (loader)

    root (hd0,0)

    savedefault makeactive chainloader +1

    #配置文件结束end of my menu.lst—— 好了,我们要启动的是第一项,正常ubuntu启动,记住这几行命令:

    root (hd0,3)

    kernel /boot/vmlinuz-2.6.12-10-686 root=/dev/hda4 [ro quiet splash] #([]中选项可省略)

    initrd /boot/initrd.img-2.6.12-10-686 savedefault #可不用这句boot 依次输入各行命令,每行运行后会有一点反馈信息才表示正确,这样顺利的话,应该能够顺利进入Ubuntu系统了,放心了,系统都在了,哈哈!!

    下面把grub装回到MBR区:

    (三)、恢复安装被破坏的grub

    知道了之后似乎很简单,用有grub的启动盘启动,或者用liveCD进入linux系统,或者就手工进入硬盘的linux的系统,然后运行#grub,进入grub>提示符界面,然后运行:

    grub>root (hd0,3) #指定linux分区所在位置,我的这里是/dev/hda4即(hd0,3)

    grub>setup (hd0) #将grub装到/dev/hda的MBR区。

    grub>quit #大功告成,退出grub界面#reboot一下,OK,一切恢复正常,终于完全搞定,其实也很简单嘛,嘻嘻。 grub的安装也可以使用grub-install命令吧,具体可见命令帮助。

现在的网卡一般都是10/100M自适应工作模式,在配置网卡参数时我们很少考虑它的工作模式,但是在路由器、交换机、代理服务器等通信量比较大的关键设备上,我们应该为它指定正确的工作模式,这样可以提高通信效率。在Linux环境下,我们可以使用系统自带的工具mii-tool(这是专门设置网卡工作模式的命令)来配置网卡工作模式。下面我们具体来谈一下它的使用方法。

1. 查看网卡的工作模式,输入命令:

#mii-tool -v
            eth0: negotiated 100baseTx-FD,link ok
            product info:Vendor 00:05:be,model 8 rev 0
            basic status: autonegotiation complete,link ok
            basic mode:autonegotiation enabled.
            Capabilities: ..............

从以上信息中可以看出,这块网卡工作在100M全双工自适应模式下,“100BaseTx-FD”意为100M Full Duplex。

2. 更改网卡的工作模式,输入命令:

#mii-tool -F media [interface]

media可选的模式有100baseTx-FD、100baseTx-HD、10baseT-FD、10baseT-HD等。 Interface代表所选择的网卡,如eth0、eth1等,默认为eth0。

例如,设置网卡工作在10M半双工模式下,输入命令:
#mii-tool -F 10baseT-HD eth0

3. 恢复网卡的自适应工作模式,输入命令:

#mii-tool -r eth0

更详细的使用方法可以用mii-tool -h来获得。

1.使用急救盘组进行维护

  急救盘组(也称为boot/root盘组),是系统管理员必不可少的工具。用它可以独立启动和运行一个完整的Linux系统。实际上,急救盘组中的第二张盘上就有一个完整的Linux系统,包括root文件系统;而第一张盘则存放了可启动的内核。

  使用急救盘组维护系统很简单。只需用这两张盘启动系统后,进入急救模式,这时使用的是root账户。为了能访问硬盘上的文件,需要手工安装硬盘文件系统。例如用下面的命令可在/mnt目录中安装/dev/hda2盘上的ext2fs类型的Linux文件系统:

  # monut -t ext2/dev/hda2/mnt

  注:现在根目录是急救盘上的根目录。为了访问硬盘文件系统中的文件,必须先把它安装到某个目录下,如果将硬盘上文件系统安装在/mnt目录下,则硬盘上原来的/etc/passwd文件的路径就是/mnt/etc/passwd。

 

2.文件系统被破坏时的处理方法

  当文件系统被破坏时,如果使用的是ext2fs类型的文件系统,就可从软盘运行e2fsck命令来修正文件系统中被损坏的数据。对于其他类型的文件系统,可以使用相应的fsck命令。当从软盘上检查文件系统时,最好不要用mount命令安装。

  注:文件系统被破坏的常见原因是超级块被损坏,超级块是文件系统的“头部”。它包含文件系统的状态、尺寸和空闲磁盘块等信息。如果损坏了一个文件系统的超级块(例如不小心直接将数据写到了文件系统的超级块分区中),那么Linux可能会完全不识别该文件系统,这样也就不能安装它了,即使采用e2fsck命令也不能处理这个问题。

  不过,ext2fs类型的文件系统将超级块的内容进行了备份,并存放于驱动程序的块组(block group)边界。可以用如下的命令通知e2fsck使用超级块的备份:

  # e2fsck -b 8193

  -b 8193选项用于显示存放在文件系统中的8193块的超级块的备份数据。

3.恢复丢失的文件

  如果不小心删除了重要的文件,还可以将相应的文件从急救盘复制到硬盘上。例如,删除了文件/bin/login,此时系统无法正常运行到登录界面,可以用急救盘组启动系统,将硬盘文件系统安装到/mnt目录下,然后使用下述命令:

  #cp -a /bin/login /mnt/bin

  “-a”选项用于告诉cp在拷贝时保持文件的访问权限。 当然如果被删除的基本文件不在“急救盘组”中,也就不能用这种方法了。如果以前做过系统备份的话,那么就只有用以前的备份来恢复了。

4.函数库破坏时的处理方法

  如果不小心将系统函数库文件破坏了,或者破坏了/lib目录下符号链接,那么将导致依赖这些库的命令无法执行。最简单的解决办法是用急救盘组启动系统,在/mnt目录中安装硬盘文件系统,然后修复/mnt/lib目录下的库。

5.无法用root账号登录系统

  由于系统管理员的疏忽,或者由于系统受到黑客的入侵,系统管理员可能无法用root帐号登录系统。

  对于第1种情况,可能是系统管理员忘记了root密码,用急救盘组就可以解决问题。

  对于第2种情况,由于很可能是密码被黑客修改了,因此系统管理员无法进入系统,也就是说,Linux系统完全失去了控制,因此应尽快重新获得系统的控制权。在取得 root权限后,还应检查系统被破坏的情况,以防被黑客再次入侵。需要做的最主要的工作就是重新设置root的密码,获得Linux操作系统的控制权。首先用急救盘组启动系统,然后将硬盘的文件系统安装到/mnt目录下,编辑/mnt/etc/passwd文件,将其对应于root账户的一行加密口令域置空,如下所示:

  root::0:0:root:/root:bin/bash

  注:如果系统使用 shadow工具,就需要对文件/etc/shadow进行上述的操作,使root登录系统不需要口令。

  这样,root账户就没有口令了。当重新从硬盘启动Linux系统时,就可以用root账户登录(系统不会要求输入密码)。进入系统后,再用命令passwd设置新的口令。

6.系统不能启动

  一般来说,如果系统管理员不能正常进入系统,就需要考虑使用急救盘组进入急救模式排除系统的故障。但在没有制作急救盘组的情况下,Linux系统不能启动,该怎么办呢?

  在个人计算机使用 Linux系统时,通常都是Linux和MS Windows 9X或MS Windows NT并存的。

  由于重新安装其他的操作系统,经常会导致原有的Linux不能启动。这主要是因为,这些操作系统默认为计算机中没有其他的操作系统,因而改写了硬盘的主引导记录(MBR),覆盖掉了Linux的LILO系统引导程序。

  如果有急救盘组,那么很简单,用第一张启动盘启动硬盘的Linux系统,重新运行LILO命令,就可以将LILO系统引导程序写回硬盘的主引导记录,再次开机即可。

  如果没有系统启动盘,如果知道Linux在硬盘上的确切安装分区,且有loadlin程序,就可以重新返回Linux。loadlin是DOS下的程序,运行它可以从DOS下直接启动Linux,快速进入Linux环境。在 Red Hat Linux 6.0光盘的 dosutil目录下就有这个程序。除此之外,还需要一个 Linux启动内核的映像文件vmlinuz,在 Red Hat linux 6.0光盘的 images目录下就有这个文件。

  例如,在Windows 98系统下面,进入DOS的单用户模式,然后运行下述的loadlin命令,即可重新进入Linux系统:

  loadlin vmlinuz root=/dev/hda8

  /dev/hda8是Linux的root文件系统所在的硬盘分区位置。命令执行后,就开始引导Linux系统。用root身份登录后,运行LILO命令,则重新将LILO装入MBR,回到以前多操作系统并存使用的状态。

7.处理不正常关机引起的故障

  如果Linux不正常关机,有可能导致不能进入Linux的KDE环境而只能处于控制台环境下,而且不断地有大片大片的英文字符向上翻滚。以root身份login后,键入startx命令,出现“x server不能连接”的错误提示。

 这时可以在控制台下,键入setup,出现系统设置菜单,选择其中的“X窗口设置”,然后依照提示正确设置显示器的类型、刷新频率、显存大小、分辨率等。如果一切无误,系统会自动启动X Windows系统,一切便OK了!需要注意的一点是:在用setup进行设置时,可能还会有大片大片的英文字符向上翻滚,请不要惊慌,看清屏幕,继续使用TAB键或方向键,马上便会“柳暗花明”的。

一.基本的Apache用户认证方法:

若对某一目录下的文件如/home/ftp/pub需要做到用户认证,则在httpd.conf
中加入下面的行
<>
options indexes followsymlinks
allowoverride authconfig
order allow,deny
allow from all

<>
用在目录/home/ftp/pub下放文件.htaccess,内容如下:
authname “shared files”
authtype basic
authuserfile /etc/.passwd
require valid-user

用随Apache来的程序htpasswd 生成文件/etc/.passwd,每行一个用户名:密码

只要能提供正确的用户名和密码对,就允许登录访问,这是针对任何地址来的
请求都要求提供用户名和密码认证。

二.针对部分网段或地址要求认证。

若公司LAN所在网段为192.168.0.0/24,且有一防火墙专线接入Internet,
内部网卡的地址为192.168.0.1/32,则现在希望所有通过拨本地163通过
防火墙上的apache反向代理向LAN上的另一WWW服务器访问时需要认证,而本地
LAN上的用户不需认证。可以在httpd.conf中放入:
〈Directory /home/ftp/pub>
Options Indexes FollowSymLinks
AllowOverride AuthConfig
order deny,allow
deny from 192.168.0.1
〈/Directory>

且在/home/ftp/pub/.htaccess中放入:
AuthName “shared files”
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user
satisfy any

三.对同一目录及其下的子目录有不同的权限,仅某些人可以存取一目录下的
子目录。
如有一目录/home/ftp/pub/sales,有三个用户user1,user2,user3都需要用户名
和密码进入/home/ftp/pub,但仅user1,user2能进入/home/ftp/pub/sales.则
放下面的行到httpd.conf

〈Directory /home/ftp/pub>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

〈Directory /home/ftp/pub/sales>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

且看/home/ftp/pub/.htaccess为:
AuthName “shared files”
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user

且看/home/ftp/pub/sales/.htaccess
AuthName “shared files”
AuthType Basic
AuthUserFile /etc/.passwd
AuthGroupFile /etc/.salesgroup
require group manager

且文件/etc/.passwd内容为:
user1:passwd1
user2:passwd2
user3:passwd3

且文件/etc/.salesgroup内容为:
manager: user1 user2

 

攻入Linux系统后,很多入侵者往往就开始得意忘形了。这其中还有一个原因,就是技术性也要求更高了。下面,我们来看看一些常用的经典工具。  1、从这里延伸:后门和连接工具

  (1)Httptunnel

  Tunnel的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就是将数据伪装成HTTP的数据形式来穿过防火墙,实际上,它是在HTTP请求中创建了一个双向的虚拟数据连接来穿透防火墙。说得简单点,就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据包封装成HTTP请求的格式骗过防火墙,所以它不需要别的代理服务器而直接穿透防火墙。

  HTTPTunnel包括两个程序:htc和hts,其中htc是客户端,而hts是服务器端,我们现在来看看我是如何用它们的。比如开了FTP的机器的IP是192.168.10.231,本地机器IP是192.168.10.226,因为防火墙的原因,本地机器无法连接到FTP上。怎么办?现在就可以考虑使用HTTPTunnel了。过程如下:

  第一步:在本地机器上启动HTTPTunnel客户端。用Netstat看一下本机现在开放的端口,会发现8888端口已在侦听。

  第二步:在对方机器上启动HTTPTunnel的服务器端,并执行命令“hts -f localhost:21 80”,这个命令的意思是说,把本机的21端口发出去的数据全部通过80端口中转一下,并且开放80端口作为侦听端口,再用Neststat看一下他的机器,就会发现80端口现在也在侦听状态。

  第三步:在本地机器上用FTP连接本机的8888端口,会发现已经连上对方的机器了。那么,为什么人家看到的是127.0.0.1,而不是192.168.10.231呢?因为我们现在是连接本机的8888端口,防火墙肯定不会有反应,如果没往外发包,局域网的防火墙肯定就不知道了。现在连接上本机的8888端口以后,FTP的数据包不管是控制信息还是数据信息,都被htc伪装成HTTP数据包然后发过去,在防火墙看来,这都是正常数据,相当于欺骗了防火墙。

  需要说明的是,这一招的使用需要其他机器的配合,就是说要在他的机器上启动一个hts,把他所提供的服务,如FTP等重定向到防火墙所允许的80端口上,这样才可以成功绕过防火墙!肯定有人会问,如果对方的机器上本身就有WWW服务,也就是说他的80端口在侦听,这么做会不会冲突?HTTPTunnel的优点就在于,即使他的机器以前80端口开着,现在也不会出现什么问题,重定向的隧道服务将畅通无阻!

  (2)Tcp_wrapper

  Tcp_wrapper是Wietse Venema开发的一个免费软件。Tcp_wrapper的诞生有个小小的故事,大约1990年,作者所在大学的服务器屡屡受到一个外来黑客侵入,因为受害主机的硬盘数据屡次被rm -rf/命令整个抹掉,所以找寻线索极为困难,直到有一天晚上作者在工作的过程中无意中发现这个黑客在不断的finger 受害主机、偷窥受害者的工作。于是,一个想法诞生了:设计一个软件,使它可以截获发起finger请求的IP,用户名等资料。Venema很快投入了工作,而Tcp_wrapper也由此诞生!此后,Tcp_wrapper随着广泛的应用逐渐成为一种标准的安全工具。通过它,管理员实现了对inetd提供的各种服务进行监控和过滤。

  Tcp_wrapper编译安装成功后,会生成一个tcpd程序,它可以在inetd.conf这个控制文件中取代in.telnetd的位置,这样,每当有telnet的连接请求时,tcpd即会截获请求,先读取管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的in.telnetd程序,由in.telnetd完成后续工作。如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。Tcp_wrapper访问控制的实现是依靠两个文件:hosts.allow,hosts.deny来实现的。如果我们编辑/etc/syslog.conf文件时,加入了日志纪录功能,即:

  #tcp wrapper log
  local3.info /var/log/tcplog

  编辑结束后,保存文件,在/var/log下会生成tcplog文件,注意这个文件的读写属性, 应该只对root有读写权限。然后ps -ef | grep syslogd,找出syslogd的进程号,kill -HUP 重启syslogd进程使改动生效。 在这里,我们可以预先看一看以后生成的tcplog文件内容,如下:

Jul 31 22:00:52

www.test.org in.telnetd[4365]: connect from 10.68.32.1
Jul 31 22:02:10
www.test.org in.telnetd[4389]: connect from 10.68.32.5
Jul 31 22:04:58
www.test.org in.ftpd[4429]: connect from 10.68.32.3
Aug 2 02:11:07
www.test.org in.rshd[13660]: connect from 10.68.32.5
Aug 2 02:11:07
www.test.org in.rlogind[13659]: connect from 10.68.32.1  从上面我们可以看到,在安装了Tcp_wrapper的主机上,系统的每一次连接,Tcp_wrapper都做了纪录,它的内容包括时间、服务、状态、ip等,对攻击这有很大的参考价值,不过,一定要记得清除日志了。

  (3)rootkit工具:LRK

  Rootkit出现于二十世纪90年代初,它是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击或者密码猜测获得系统的访问权限。接着,攻击者会在侵入的主机中安装rootkit,然后他会通过rootkit的后门检查系统,看是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。

  如果攻击者能够正确地安装rootkit并合理地清理了日志文件,系统管理员就会很难察觉系统已经被侵入,直到某一天其它系统的管理员和他联系或者嗅探器的日志把磁盘全部填满,他才会察觉已经大祸临头了。不过,在系统恢复和清理过程中,大多数常用的命令例如ps、df和ls已经不可信了。许多rootkit中有一个叫做FIX的程序,在安装rootkit之前,攻击者可以首先使用这个程序做一个系统二进制代码的快照,然后再安装替代程序。FIX能够根据原来的程序伪造替代程序的三个时间戳(atime、ctime、mtime)、date、permission、所属用户和所属用户组。如果攻击者能够准确地使用这些优秀的应用程序,并且在安装rootkit时行为谨慎,就会让系统管理员很难发现。

  下面我们介绍一个非常典型的针对Linux系统的LRK版本6。Linux Rootkit 6是一个开放源码的rootkit,经过多年的发展,Linux Rootkit的功能越来越完善,具有的特征也越来越多。下面我们简单地介绍一下Linux Rootkit包含的各种工具。

  首先是隐藏入侵者行踪的程序。为了隐藏入侵者的行踪,Linux Rootkit IV的作者可谓煞费心机,编写了许多系统命令的替代程序,使用这些程序代替原由的系统命令,来隐藏入侵者的行踪。这些程序包括:

ls、find、du 这些程序会阻止显示入侵者的文件以及计算入侵者文件占用的空间。在编译
之前,入侵者可以通过ROOTKIT_FILES_FILE设置自己的文件所处的位置,默认是/dev/ptyr。注意如果在编译时使用了SHOWFLAG选项,就可以使用ls -/命令列出所有的文件。这几个程序还能够自动隐藏所有名字为:ptyr、hack.dir和W4r3z的文件。
ps、top、pidof 这几个程序用来隐藏所有和入侵者相关的进程。
netstat 隐藏出/入指定IP地址或者端口的网络数据流量程。
killall 不会杀死被入侵者隐藏的进程。
ifconfig 如果入侵者启动了嗅探器,这个程序就阻止PROMISC标记的显示,使系统管理员难以发现网络接口已经处于混杂模式下。
crontab 隐藏有关攻击者的crontab条目。
tcpd 阻止向日志中记录某些连接。
syslogd 过滤掉日志中的某些连接信息。

  其次是后门程序。木马程序可以为本地用户提供后门;木马网络监控程序则可以为远程用户提供inetd、rsh、ssh等后门服务,具体因版本而异。随着版本的升级,Linux Rootkit IV的功能也越来越强大,特征也越来越丰富。一般包括如下网络服务程序:

chfn 提升本地普通用户权限的程序。运行chfn,在它提示输入新的用户名时,如果用户输入rookit密码,他的权限就被提升为root。
chsh 提升本地用户权限的程序。运行chsh,在它提示输入新的shell时,如果用户输入rootkit密码,他的权限就被提升为root。
passwd 和上面两个程序的作用相同。在提示你输入新密码时,如果输入rookit密码,权限就可以变成root。
login 允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝,可以尝试一下rewt。当使用后门时,这个程序还能够禁止记录命令的历史记录。
inetd 特洛伊inetd程序,为攻击者提供远程访问服务。
rshd 为攻击者提供远程shell服务。攻击者使用rsh -l rootkitpassword host command命令就可以启动一个远程root shell。
sshd 为攻击者提供ssh服务的后门程序。

  再就是工具程序。所有不属于以上类型的程序都可以归如这个类型,它们实现一些诸如:日志清理、报文嗅探以及远程shell的端口绑定等功能,包括:

fix 文件属性伪造程序。
linsniffer 报文嗅探器程序。
sniffchk 一个简单的bash shell脚本,检查系统中是否正有一个嗅探器在运行。
login 允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝,可以尝试一下rewt。当使用后门时,这个程序还能够禁止记录命令的历史记录。
z2 utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过,如果用于Linux系统需要手工修改其源代码,设置日志文件的位置。
bindshell 在某个端口上绑定shell服务,默认端口是12497。为远程攻击者提供shell服务。

  (4)netcat

  这是一个简单而有用的工具,能够通过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能。

  2、查找Linux下的蛛丝马迹:日志工具

  对于高明的攻击者来说,进入系统后,还应了解自己的“蛛丝马迹”并清除这些痕迹,自然就要了解一些日志工具了。

  (1)logcheck

  logchek 可以自动地检查日志文件,定期检查日志文件以发现违反安全规则以及异常的活动。它先把正常的日志信息剔除掉,把一些有问题的日志保留下来,然后把这些信息 email 给系统管理员。logcheck 用 logtail 程序记住上次已经读过的日志文件的位置,然后从这个位置开始处理新的日志信息。logcheck 主要由下面几个主要的文件:

logcheck.sh 可执行的脚本文件,记录logcheck检查那些日志文件等,我们可以把它加入crontab中定时运行。
logcheck.hacking 是logcheck 检查的模式文件。和下面的文件一起,按从上到下的顺序执行。这个文件表明了入侵活动的模式。
logcheck.violations 这个文件表示有问题,违背常理的活动的模式。优先级小于上面的那个模式文件。
logcheck.violations.ignore 这个文件和上面的logcheck.violations的优先是相对的,是我们所不关心的问题的模式文件。
logcheck.ignore 这是检查的最后一个模式文件。如果没有和前三个模式文件匹配,也没有匹配这个模式文件的话,则输出到报告中。
Logtail 记录日志文件信息。

  Logcheck首次运行时读入相关的日志文件的所有内容,Logtail会在日志文件的目录下为每个关心的日志文件建立一个logfile.offset 的偏移量文件,以便于下次检查时从这个偏移量开始检查。Logcheck执行时,将未被忽略的内容通过邮件的形式发送给 logcheck.sh 中 系统管理员指定的用户。

  (2)logrotate

  一般Linux 发行版中都自带这个工具。它可以自动使日志循环,删除保存最久的日志,它的配置文件是 /etc/logrotate.conf,我们可以在这个文件中设置日志的循环周期、日志的备份数目以及如何备份日志等等。在/etc/logrotate.d目录下,包括一些工具的日志循环设置文件,如syslog等,在这些文件中指定了如何根据/etc/logrotate.conf做日志循环,也可以在这里面添加其他的文件以循环其他服务的日志。

  (3)swatch

  swatch 是一个实时的日志监控工具,我们可以设置感兴趣的事件。Swatch 有两种运行方式:一种可以在检查日志完毕退出,另一种可以连续监视日志中的新信息。Swatch提供了许多通知方式,包括email、振铃、终端输出、多种颜色等等。安装前,必须确保系统支持perl。swatch 软件的重点是配置文件swatchmessage,这个文本文件告诉 swatch 需要监视什么日志,需要寻找什么触发器,和当触发时所要执行的动作。当swatch发现与swatchmessage中定义的触发器正则表达式相符时,它将执行在 swatchrc中定义的通知程序。

  当然,上面所介绍的软件只是Linux大海中的几只美丽的贝壳,随着越来越多的用户加入到Linux大军中,我们相信,优秀的Hack也将越来越多,这反过来也将促进Linux操作系统逐步走向成熟,我们拭目以待。

 

OpenLDAP 2.1 管理员指南,写的非常详细,原来是E文的,而这是经过汉化后的。LDAP代表轻型目录访问协议。正如名字中表示的,它是一个用来访问目录服务,尤其是基于X.500的目录服务的轻型协议。LDAP运行在TCP/IP协议或者其他的面向连接的传输服务之上。LDAP的详细本质在RFC2251“轻型目录访问协议(V3)”中定义。本部分从用户的角度给出了LDAP的概述。

查看详细:http://i18n.linux.net.cn/others/OpenLDAP2.htm

一、 AWStats简介 

AWStats是在Sourceforge上发展很快的一个基于Perl的WEB日志分析工具。现今它也可以用来分析多种日志包括:Apache 1.3.x and 2.x, IIS 5.0 and 6.0, WebStar, WebLogic, WebSite, Windows Media Server, Tomcat, Squid, Sambar, Roxen, Resin, RealMedia server, Oracle9iAS, Lotus Notes/Domino, Darwin, IPlanet, IceCast, ZeroBrand, Zeus, Zope, Abyss、proftp、wuftp、vsftp、Postfix, Sendmail, QMail, Mdaemon, www4mail…… HOHO~~够多的了吧。现在就让我来介绍一下,用它来分析vsftp日志的安装配置方法吧。 

二、 安装简介 

1、Awstats的安装CU上有,很详细,下面是两个相关的链接: 
RPM包安装: http://bbs.chinaunix.net/forum/viewtopic.php?t=362206&highlight=awstat 
Tar包安装:http://bbs.chinaunix.net/forum/viewtopic.php?t=120108&highlight=awstat 

2、下面是我的安装过程简介: 
1)AWStats从6.2 版(beta)开始支持wuftp 格式的vsftp日志文件,所以你想要对你的vsftpd日志进行分析,你就只得到http://awstats.sourceforge.net/#DOWNLOAD 下最新的AWStats-6.2的tgz包了,其它的都不支持喔,呵呵。 
2)安装: 
tar –zxvf awstats-6.2.tgz 
cp –r awstats-6.2 /usr/local/awstats 
vi /etc/httpd/conf/httpd.conf #在最后加上下面的几行: 

# Directives to allow use of AWStats as a CGI 

Alias /awstatsclasses “/usr/local/awstats/wwwroot/classes/” 
Alias /awstatscss “/usr/local/awstats/wwwroot/css/” 
Alias /awstatsicons “/usr/local/awstats/wwwroot/icon/” 
ScriptAlias /awstats/ “/usr/local/awstats/wwwroot/cgi-bin/” 


# This is to permit URL access to scripts/files in AWStats directory. 

<Directory “/usr/local/awstats/wwwroot”>; 
Options None 
AllowOverride None 
Order allow,deny 
Allow from all 
</Directory>; 
service httpd restart #重启apache服务 
cp /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf /etc/awstats/awstats.bjftp.conf #考贝配置文件 

OK,AWStats的安装已经基本完成了。说明一下上面的安装过程:AWStats是一个用perl写的CGI脚本,它需要Apache或IIS的支持,才能把相应的统计结果用网页的行式显示出来。所以在把awstats-6.2考贝到/usr/local下后,就需要更改apache的配置文件,定义classes、css 、icon、cgi-bin目录的真实路径和/usr/local/awstats/wwwroot目录的属性,然后重启apache服务。如果是新手,也可以执行/usr/local/awstats/tools/ awstats_configure.pl,通过回答几个问题,去自动做这些工作。 

三、设置awstats的配置文件 

这是我主要要向大家介绍的内容。要实现对vsftp的日志的统计,你必须把vsftpd的日志格式改成wuftp格式的,我个人认为vsftpd日志格式十分不适合作日志统计,因为它的每行的列数不都是相同的,这相当不利于日志统计。 
1)要生成wuftp格式的日志,你首先得更改/etc/vsftpd.conf文件,在文件最后回上这么几条: 
xferlog_enable=YES 
xferlog_std_format=YES 
xferlog_file=/var/log/vsftpd.log 
(注:如果有vsftpd_log_file=/XXX/XXX请把它注释掉) 
上面的设置会使生成的wuftp格式的日志存到/var/log/vsftpd.log文件中。当然,你也可以更改xferlog_file=/xxx/xxx来选择其它的目录文件。这样你生成的vsftpd.log日志格式将是下面的样子: 
Sun May 23 08:34:27 2004 67 192.168.13.102 975291 /lastlog a _ o a -anonymous@ ftp 0 * c 
Sun May 23 08:34:28 2004 68 192.168.13.106 975291 /lastlog a _ o a -anonymous@ ftp 0 * c 
Sun May 23 08:34:28 2004 68 192.168.13.102 975291 /lastlog a _ o a -anonymous@ ftp 0 * c 
2)现在我们来配置一个生成vsftpd日志统计的awstats配置文件。 
vi /etc/awstats/awstats.bjftp.conf #把文件中相应的配置设成与下面相同LogFile=”/var/log/vsftplog” #日志文件的路径、名字 
LogType=F #日志文件的类型FTP 
LogFormat=”%time3 %other %host %bytesd %url %other %other %method %other %logname %other %code %other %other” 
#日志文件的格式定义,这点很重要,一定要和你的日志格式一样,在awstats.bjftp.conf文件中有详细的格式定义解释,大家可以看一下。(awstats-6.2以下版本之所以不支持vsftpd日志统计,就是因为它的%time3格式定义与日志的不符) 
LogSeparator=”\s” #日志各列之间用的分隔符 
SiteDomain=”bjftp.xxx.com” #域名、服务器名(一定要定义,在生成awstats数据库时要用到) 
HostAliases=”bjftp.xxx.com bjftp 127.0.0.1 localhost” 
DNSLookup=0 #不逆向解析域名 
DirData=”/home/awstats” #生成的统计数据库的位置(注意,生成的文件可是rw-rw-rw-权限的喔,最好把他改一下。) 
DirCgi=”/awstats” #CGI统计脚本的执行目录,这个和你在apache中的ScriptAlias定义相对应。 
DirIcons=”/awstatsicons” #icons在apache对应目录的定义 
AllowToUpdateStatsFromBrowser=0 #是否可以用浏览器来执行更新,默认是不可以。如果设成1,你就可以在IE中更新统计了。 
NotPageList=”” 
LevelForBrowsersDetection=0 
LevelForOSDetection=0 
LevelForRefererAnalyze=0 
LevelForRobotsDetection=0 
LevelForWormsDetection=0 
LevelForSearchEnginesDetection=0 
ShowLinksOnUrl=0 
ShowMenu=1 
ShowMonthStats=UVHB 
ShowDaysOfMonthStats=HB 
ShowDaysOfWeekStats=HB 
ShowHoursStats=HB 
ShowDomainsStats=HB 
ShowHostsStats=HBL 
ShowAuthenticatedUsers=HBL 
ShowRobotsStats=0 
ShowEMailSenders=0 
ShowEMailReceivers=0 
ShowSessionsStats=1 
ShowPagesStats=PBEX 
ShowFileTypesStats=HB 
ShowFileSizesStats=0 
ShowBrowsersStats=0 
ShowOSStats=0 
ShowOriginStats=0 
ShowKeyphrasesStats=0 
ShowKeywordsStats=0 
ShowMiscStats=0 
ShowHTTPErrorsStats=0 
ShowSMTPErrorsStats=0 

其它的一些我就不一一解释了,可以看一下/etc/awstats/awstats.bjftp.conf文件,里面写得很清楚的。只要把/etc/awstats/awstats.bjftp.conf中的相关先项设成这样,一个vsftp的awstats配置文件已经设定好了。下面要做的就是统计日志了。 

四、生成统计网页 

cd /usr/local/awstats/ wwwroot/cgi-bin 
./awstats.pl -update -config=
bjftp.xxx.com 
(注意:-config=后的参数要和SiteDomain=中定义的相同。最好不要用root去执行这个命令,因为生成的文件是 all can wirte!!!的) 。这样就会在” DirData”定义的目录—/home/awstats下生成一个或多个awstats072004.bjftp.xxx.com.txt、awstats062004.bjftp.xxx.com.txt它们是以日志有月分来分开的,有几个月的日志就会有几个文件。你可以把上面命令加到crontab中,让它定时更新。 
在IE中打入 http:///awstats/awstats.pl?-config=bjftp.xxx.com 就可以看到一张漂亮的日志统计表了。大家可以去http://awstats.sourceforge.net/awstats.ftp.html 看一下一个awstats的FTP日志统计分析结果网页,很不错的。 

五、其它类型日志文件awstats配置方法 

最后,要说的是awstats支持的日志种类很多,从WEB到FTP到MAIL到Media,各种日志都有自己的awstats.xxx.conf的定义,所以大家可以去 http://awstats.sourceforge.net/docs/awstats_faq.html#LOGFORMAT 看一下各种日志的awstats配置文件的定义,还是比较全的,不过E文要过关,呵呵。本人对IIS5、apache1.3*、apache2.*、vsftp日志作了测试统计,都能成功。特别是对apache日志的分析、统计,做得真的是很完美。 

对了还有个问题问大家,有人知道用GeoIP或GeoIPfree的perl模块自定义地区和IP的方法吗?用默认的只能把访问IP的各个国家分出来,不能把国内访问IP的省及市分出来。我已经有IP和省分的对应数据库了,少的就是把它加入perl模块的方法。我想这对日志分析还是很有用的,希望大家帮忙。

 ttii写著 ‘用了linux也有些时候了,终于决定写一点东西,给大家共勉,起到互相交流之目的。
写这篇文章是针对使用linux的管理员,爱好者,对linux安全性很关心的同僚们,希望对大家有所帮助。

用了linux也有些时候了,终于决定写一点东西,给大家共勉,起到互相交流之目的。
写这篇文章是针对使用linux的管理员,爱好者,对linux安全性很关心的同僚们,希望对大家有所帮助,
废话就不多说了,进入正题吧 ..
再说安全设置之前,我想先说说关于发行版和安装的问题,对于发行版,我相信大都知道,linux发行版实在是太多了我也不止一次在很多网站的文章,很多书籍上看到过议论那种发行版是最好的,其实我个人认为,在linux世界中,没有最好的这种说法,只要自己习惯,熟悉的一种版本,那么我就可以说他是最好的,写这篇文章,我也试着找了很多资料,试图找到一个大家都觉得常用的,熟悉的,最后,我觉得redhat linux真的很不错,虽然它的内核比较庞大,而且效率不使所有发行版中最高的,但是它的普遍性,易用性和软件升级支持,应用软件支持方面是值得提出的,这些发面也正是一个好的linux发行版需要具有的 这篇文章建立在redhat linux 7.3版之上,所有的软件设置均在这个版本上测试通过。
说到这里,可能大家要问,为什么我要用redhat 7.3现在不是有很多吗,就redhat来说就有redhat 8.0, redhat 9.0还有什么redhat 高级企业版,等等。这么多新的东西为什么不用呢?这个问题问得很好,这正是我要说的安装和选择发行版是要注意的一点。

1、版本的选择

我使用redhat也有很长时间了,个人认为,redhat的.0版本都属于大版本升级的第一个版本,这个版本往往很多软件包不是很稳定,而且容易出现故障,对于管理员来说linux绝大部分是用来作为服务器使用的,那么要最为服务器,最最大的首要问题就是稳定,其次最重要的也是安全,所以如果你是管理员,而非狂热的爱好者,发烧友,我建议你选择redhat 7.3,redhat 的版本号,后面跟了小版本号的就是软件包有很多更新和修改的,虽然这个更新可能不是最新,但是至少它是这个稳定版本中最新最稳定的,不知大家理解这个问题没有,后面我将详细介绍一下版本的升级问题,那里我将会说明这个理论。

2、安装方式

选择好了安装发行版,那么我们就开始安装了,其实安装的时候只有几个需要注意的地方,其一就是分区,其二就是安装的软件包
分区的讲究就是你需要针对你的应用来规划分区,过去看过很多论述linux是否有一个最佳的分区方案,虽然很多人也提出了很多优秀的分区方案,但是我觉得还是需要更具自己的应用作的分区才是最佳的分区,下面各个分区方案,但是纯属建议,还是要更具自己的需要来作。
个人认为,标准的服务器,至少扩常用的分区,因此建议将硬盘划分为以下的样子,/boot swap / /var /usr /home /tmp
大小更具自己的应用来,/不能小于1G,/usr 和 /var都要大一点,因为大部分软件在里面,其他几个更具需要来,说到swap我想关于这个区的大小争议也比较大,我在综合了很多朋友的意见后,总结出一条规则,如果你的内存小于1G那么分为内存的2倍,如果大于1G那么就分最大2G的swap,这样做是为什么呢?因为swap大家都知道,是虚拟内存的空间,小了又不能发挥最好的作用,大了又浪费空间,这个大小是具体的理由就是,内存大的话,那么应用程序占用的虚拟空间就小,但是为了完全满足服务器的内存需要,据很多朋友的经验,还有我切身的体验,这种分法可以说是一个最佳的方案了,特别对于数据库等大型应用程序的内存需要来讲,而且很多服务器的内存都是1G-2G左右。
安装软件包,讲究的是安装得越少越精越好,但是redhat开始安装的时候,作为一个服务器,下面的几个软件包组需要选择
Networ support(网络支持)
Messaging and web tools(可选择安装,一些联网的工具如ncftp等)
Router/Firewall(防火墙软件,需要安装,但是他有一点不好把ipchian,iptables,ipwf等都安装了,后面将解释如何删除)
Network managed workstation(管理用工具)
Utilities(常用工具,备份工具等)
虽然我们现在安装是简单的选择了这几个软件包组,我们在后面的安全设置时将会删除一些不用的包,这将在后面说。

3、更新软件

虽然redhat 7.3是更新过的版本,但是其中还有很多软件包有漏洞,其中最大的漏洞就是2.4.18的一个漏洞,它会导致ext3文件系统崩溃,我就遇到过很几次(据ext3开发小组称,这种现象是在特定的操作和条件下才会产生的,一般用户很少出现这种现象),虽然很多现在已近解决这个问题,但是7.3没有更新内核的话还是不稳定的,更新有两种方式,一种时下在更新的软件包手动的用rpm –Uvh 来更新,另外一种也是我推荐的方式,使用up2date来更新,这可是一个好东西,它能很方便的更新你的系统,而且是更具你安装的软件包来更新的,他不会把bind8更新为bind9,不会把redhat 7.3更新到redhat 9.0,这样就确保了你目前使用的版本的稳定性和完整性,它只是针对这个版本的软件包进行了修正,版本号一般就是这样变得,比如iptables ,7.3的rpm 版本是1.2.5那么更新后就是1.2.8修正了很多漏洞错误,但是并没有作大的调整,确保了你的使用和与应用程序的兼容性。
Up2date的使用,在自动升级之前,建议几个操作,
第一个,由于redhat 7.3版自带的up2date有SSL的bug,因此,需要取下在一个最新的up2date来更新,下载地址
https://rhn.redhat.com/errata/RHSA-2003-267.html
第二个,一般来说,我们都不希望up2date自动更新内核,然后内核的更新直接解决很多重大漏洞,特别是新安装的redhat 7.3就有ext3崩溃的漏洞因此,我建议大家自己先手工升级内核,当然使用rpm 包来升级,这样节约很多时间,开始我就说过,虽然redhat不是效率最高的,但是确实做得最普遍的一个系统,rpm的方便就完全体现了这点优势,redhat 7.3内核的下载地址
http://updates.redhat.com/7.3/en/os/i386/kernel-2.4.20-20.7.i386.rpm
http://updates.redhat.com/7.3/en/os/i386/kernel-2.4.20-20.7.i586.rpm
http://updates.redhat.com/7.3/en/os/i386/kernel-2.4.20-20.7.i686.rpm
对于你自己的系统,你可以用uname –a看看目前的是i386还是i686然后根据这个来选择下载的内核升级包
建议最好使用rpm –ivh 来升级,这样可以保留原来的内核,确保没有问题再将原来内核rpm –e掉,这个rpm包非常简单甚至你不用修改你的lilo.conf或者grub.conf的配置文件,它自动给你加入了,你需要做的就是重起然后选择新的
内核启动就行了
做完了内核的升级,用新内核重起后就是up2date的时候了
运行rhn_register随便注册一个号码(这个要保密哦,我自己研究的,rhn网络的升级实际上是收费的服务,但是一个邮箱一个账号是免费的,但是一个账号只有一个升级系统的权限,你可以通过rhn的网络来登录修改这个权限给其他的机器,不过这样太麻烦了,而且redhat7.3的升级基本上稳定了,只需要在安装第一次升级一下就行了,所以我们就随便注册帐号来升级下:P)根据提示,它默认选择了你机器上所有的包,为你升级,没关系,一路next最后finish然后回到控制台,接下来就是激动人心的升级了,运行命令
up2date –u
就开始升级了,这个过程看你的网络了,大约有1小时左右
它会自动为你下载安装,虽然不用重起,但是建议你还是重起一下,确保新内核和新的软件包能够正确使用
到此为止,系统更新就做完了,下面就是比较重要的安全设置了

4、安全设置

其实linux的安全已经比较好了,我们做得初浅的安全讨论,无非就是关闭服务,设置一定的防火墙,如果大家对防黑客和高级的安全设置感兴趣的话,那么请关注我下几篇文章,我将向大家介绍有关简单的IDS等等防黑技术,谢谢
关闭不用的服务,这个问题,很多文章都提出过,我个人认为最有效的关闭方法如下,大家都知道,linux中控制服务的有chkconfig ,ntsysv等等,其实这些工具控制的服务都是linux已sysV的风格保存的服务启动项目,其实都是/etc/rc.d/下面的东西,已rc3.d为例,3表示init3时要做的项目,里面的文件都是一些连接,S开头表示启动,K开头表示终止,所以rc0.d里面基本都是K开头的,所以大家不用害怕觉得linux的服务多么神秘,这里介绍两个简单可行的控制服务的办法
运行ntsysv控制服务
使用ntsysv关闭服务只开
crond 可定义计划任务
network 网络
random 生成随机数,用于ssh的会话对称密钥的生成
sshd ssh服务器端
syslog 系统日志服务
xinetd 超级进程(下面没有服务要用的话,可以关闭)
其实xinetd是类似于init这个超级进程的一个进程,不过可以完全关闭它,因为下面都是些没有用服务监听程序,对于一般的服务器,基本上只需要上面ntsysv所列的服务就行了,其他的都关闭,当然如果你要web当然要开httpd了J
服务关闭完了以后,就是去掉一些不用的用户,用vipw
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#news:x:9:13:news:/var/spool/news:
#uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
#rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
#rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
#nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
#nscd:x:28:28:NSCD Daemon:/:/bin/false
#radvd:x:75:75:radvd user:/:/bin/false
去掉这些用户
上出多余的rpm包
rpm -e softname
rpm -e autofs-3.1.7-28
rpm -e gd-devel-1.8.4-4
rpm -e up2date-2.7.86-7.x.3
rpm -e pump
rpm -e apmd
rpm -e lsapnptools
rpm -e redhat-logos
rpm -e mt-st
rpm -e kernel-pcmcia-cs
rpm -e setserial
rpm -e redhat-release
rpm -e eject
rpm -e kudzu
rpm -e gd
rpm -e raidtools
rpm -e mailcap
rpm -e setconsols
rpm -e gnupg

修改/etc/fstab
只给分区必须的权限
像这样LABEL=/bakups /bakups ext3 nosuid,noexec 1 2

noexec表示不能在这个分区运行程序,nosuid不能使用nosuid的程序,根据情况自行设置其他分区,一般来说/tmp,/usr都要nosuid

到此我们做了一些基本的安全设置,当然你也可以考虑,比如启用wheel组,只能让wheel组的用户能够变为su但是一般来说管理员都不用考虑这些,因为只有你一人能够登录这台机器,:),这些细节的设置我也会在下篇文章详细说明,应为毕竟这不是我这篇文章主要的东西。他们会同IDS等内容在下一篇文章详细呈现给大家。

5、防火墙设置

上面的基本安全设置做完了,那么接下来一个比较主要的安全就是防火墙,这是很重要的,如果你的设置没有作得很好,也许软件还有一些漏洞,但是防火墙设置得好的话,基本上可以帮你弥补这些问题,给大家一个基本的单个服务器的防火墙脚本,里面不包括端口转发,伪装等网关功能的内容,如果大家对这方面有兴趣,欢迎给我来信探讨
#!/bin/bash

#启用转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

#显示开始信息
echo “Start FireWall for this server…”

#清空目前的规则
iptables -F

#编辑默认策略为不能通过,数据接入链
iptables -P INPUT Drop

#转发链默认drop
iptables -P FORWARD Drop

#数据输出链默认drop
iptables -P OUTPUT Drop

#输出链允许源地址是xxx.xxx.xxx.xxx的数据输出,也可以指定网卡例: –i eth0
iptables -A OUTPUT -s xxx.xxx.xxx.xxx -j ACCEPT

#接入链允许端口为15818的源地址为xxx.xxx.xxx.xxx的数据通过
iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx –dport 15818 -j ACCEPT

#如果需要添加端口就在下面修改,xxx处添加端口号
#iptables -A INPUT -p tcp -d xxx.xxx.xxx.xxx –dport xxx -j ACCEPT

#允许所有udp包通过
iptables -A INPUT -d xxx.xxx.xxx.xxx -p udp -j ACCEPT

#限制ping包每一秒钟一个,10个后开始
iptables -A INPUT -p icmp -d xxx.xxx.xxx.xxx -m limit –limit 1/s –limit-burst 10 -j ACCEPT

#限制IP碎片,每秒钟只允许100个碎片,防止DoS攻击
iptables -A INPUT -f -m limit –limit 100/s –limit-burst 100 -j ACCEPT

恭喜你,到目前为止,你有一个相对安全的系统了,但是记住,最重要还是你要把root的密码记住哦,呵呵,希望写了这么多,对大家有所帮助,这是我最大的愿望,希望大家觉得我写得还行的话任意拷贝,广泛传播,但是不要修改哦,如果觉得有什么问题希望和我探讨的话,我也虚心接受大家的意见和建议,请给我email:ttii@linuxaid.com.cn,希望和大家成为朋友,共同学习linux探讨问题,为中国的软件事业贡献我的微薄之力,谢谢

 ttii写著 ‘其实说起IDS我想管理员朋友们一定不陌生,不过我还是想简单的说一下IDS的定义,这样更有利于大家理解后面的应用,这篇文章还是基于redhat7.3的,为什么呢?希望大家看过我的第一篇文章《浅谈linux安全》,在建立了那种系统的基础上,我们来实现IDS吧。

其实说起IDS我想管理员朋友们一定不陌生,不过我还是想简单的说一下IDS的定义,这样更有利于大家理解后面的应用,这篇文章还是基于redhat7.3的,为什么呢?希望大家看过我的第一篇文章《浅谈linux安全》,在建立了那种系统的基础上,我们来实现IDS吧。
IDS就是入侵监测系统的简称,其主要的作用,我个人理解就是能够收集入侵的蛛丝马迹,然后报告你,当然也不确保它的准确性,这要看软件的分析能力了,现在有很多收费和免费的IDS应用程序,其中比较强的是snort,可能大家都知道的(是地球人都知道:))就是Tripwire,它也是一种入侵监测系统,不过它是监视你的文件是否被修改
今天我给大家介绍一种,没有太繁华的功能,简单实用,能够有效地阻止很多攻击,能够对非法的端口扫描做出反应,经过配置,极端一点的作法甚至能够将扫描你的人的端口反扫描回来,而且阻断它对你主机的所有连接(服务器可不能这么做哦,要不一天阻断几百人,过短时间老板就来说了:最近业绩不好呢?呵呵,服务器真是可怜)

1、理论介绍篇

言归正传,这个软件就是portsentry感知攻击的IDS应用
下载地址
ftp://194.199.20.114/linux/redhat/6.2/en/powertools/i386/i386/portsentry-0.99.1-1.i386.rpm
下载后就是安装了不用我多说
rpm –ivh portsentry-0.99.1-1.i386.rpm

先说说portsentry有什么厉害的功夫吧,他能做下面的事情
1、 丢弃所有使用route命令返回到主机的数据包
2、 自动更新/etc/hosts.deny来阻断基于xinetd的连接,简单的阻断一台主机
3、 自动使用防火墙ipchian,ipfwadm等来阻断连接,相当于添加一条厉害的规则,这个比较实用而且安全的
4、 日志的额外连接,他能将观察到的扫描记录到日志,这个功能很有用,你可以什么都不做,但是不能不没有日志的生成,这样让你有空就看看谁再搞你的宝贝服务器吧
5、 自定义的操作,可能对扫描你主机的机器做一些操作,比如反扫描,呵呵然后记录信息,比较酷吧
说了这么多好处,下面我们来在机器上实现一下吧,安装完毕后,你能够在
/usr/psionic/portsentry
下看到一些文件
ignore.csh 用于忽略的主机脚本
portsentry 执行程序
portsentry.conf 主要配置文件
portsentry.ignore 忽略的主机
portsentry.history 运行和阻断主机才会产生,记录详细的阻断信息
现在开始配置,实现我们的功能吧
vi portsentry.conf
这个文件看上去有几个章节,现在我分别介绍一下它们的配置
其实大家一看他的配置文件基本上都有个数了,配置文件写得很好,我在这里就不一一翻译了,呵呵比我E文好得多了,说几个重要配置吧
Port Configurations
定制那些端口希望被监控,如果你有特殊的端口,加入,就能被监控,注意用逗号分割。

Advanced Stealth Scan Detection Options
监控的范围,
ADVANCED_PORTS_TCP=”1024″
ADVANCED_PORTS_UDP=”1024″
表示监控的范围在1024之下的端口,如果你希望监控如65423这样的端口,那么将这是数字设置大些

Configuration Files
就是配置文件位置,一般不用修改

Ignore Options
忽略的端口设置

Dropping Routes
丢弃路由方案
一般用这个可以
KILL_ROUTE=”/sbin/route add -host $TARGET$ reject”
其他的可以根据操作系统来定,或者根据实际来定
也可以写入一段iptalbes 的代码,后面有

TCP Wrappers
这就是我说得简单的加入hosts.deny来阻断发起扫描的主机
KILL_HOSTS_DENY=”ALL: $TARGET$ : DENY”
把原来那句关闭,上面这句打开,我们用的都是redhat哦

External Command
扩展命令,可以执行很多自定义操作,比如nmap扫描你的主机,反扫描他,后面事例中给他家说说

Port Banner Section
理论上是可以给监听你服务的人一个警告,修改PORT_BANNER=这行,写点吓人的话,不过我也不知道其作用不,呵呵

设置完毕后,用portsentry –stcp来启动,这样能够防止SYN等隐蔽的扫描,你可以找个机器用nmap等扫描器扫描一下,看看日志是不是记录了?你的主机是不是被添加到/etc/hosts.deny了。

有几点需要注意的,据说实施了portsentry后一些扫描软件可能会挂起,汗~~~不过我觉得不像,但是确实能防止一点点,
第二,据说portsentry把你的网卡开为混杂模式,但是据我观察网卡并没有变为混杂模式,不过还是提醒大家,因为混杂模式可能会降低系统的反应,就要看你自己权衡了。
个人认为,服务器上实施portsentry软件,不用作出什么反应,只需要记录就行了,定期的查看一下,我觉得能做的就是去掉路由啊,或者nmap扫描入侵的主机,可以这样做,让他自动反扫描扫描你的主机

External command部分
加入
KILL_RUN_CMD=”/usr/bin/nmap –O $TARGET$”>> /var/log/scanIP.log
然后可以在/var/log/scanIP.log中查看这些主机的信息。你扫描他哦,呵呵
最后记得运行哦,忘记给大家说几种运行参数了
-tcp 基本简单的监听tcp
-udp 基本简单监听udp
-stcp 建议使用这个参数,可以监听带欺骗的tcp扫描,比如SYN,FIN等扫描,很强
-atcp 禁止所有portsentry.conf中指定的连接,必须手工配置合法的主机,不建议使用
-sudp 同stcp差不多,不过是udp
-adup 和atcp差不多,不过是udp

注意,如果你需要转贴到你的网站或者论坛,可以随意转贴,也请你发邮件告诉我一声转到什么地方了,谢谢,我的联系方式qq:8537798,email:ttii@sohu.com’

通常情况下人们在服务器端采用各种冗余磁盘阵列(RAID)技术来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器。对于资金实力有限的中小企业来讲,在Linux下通过软件来实现硬件的RAID
功能,这样既节省了投资,又能达到很好的效果。何乐而不为呢?

作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID的支持(关于 RAID的背景知识请见附文),这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本。下面就让我们看一个Redhat Linux AS 4下的软件RAID配置实例吧。

系统配置情况

假设某单位新上了一套使用Oracle数据库的能量采集系统,该系统数据量极大并且读写非常频繁,实时性要求高,高峰时有近40名用户在线,对数据库服务器的磁盘子系统提出了很高的要求。由于预算比较紧张,经过多方比较,最终选择了采用Linux系统做软件RAID5的方案。

其配置情况如下:

● 操作系统为RedHat Linux AS 4;

● 内核版本为2.6.9-5.EL;

● 支持RAID0、RAID1、RAID4、RAID5、RAID6;

● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。

在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期 Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。

实现过程

1.创建分区

五块SCSI磁盘分别对应/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一块磁盘/dev/sda分两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且将分区类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。

# fdisk /dev/sdb

进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。

2.创建RAID 5

这里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下:

# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1

命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、 5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB;“/dev/sd[b, c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。

3.查看阵列状态

当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]

[>………………..] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec

unused devices:

当新建或重构完成后,再次查看/proc/mdstat文件:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减1;“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成 [_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于 n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F)。 
 
 

4.生成配置文件

mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚

 

持把这一步做完。

在mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

以上的这些信息可以通过扫描系统的阵列来获取,命令为:

# mdadm -Ds

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件

# vi /etc/mdadm.conf

5.创建文件系统并挂接(mount)使用

RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:

# mkfs -t ext3 /dev/md0

当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:

# mount /dev/md0 /mnt/raid

为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:

/dev/md0 /mnt/raid ext3 defaults 0 0

故障模拟

上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。

我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。

1.将/dev/sdb1标记为已损坏的设备

# mdadm /dev/md0 -f /dev/sdb1

查看当前阵列状态

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]

[=>……………….] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec

unused devices:

因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。

经过几分钟后,再次查看当前阵列状态。

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。

2.移除损坏的设备

# mdadm /dev/md0 -r /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

损坏的sdb1已经从阵列中移掉。

3.将新设备添加到阵列中

因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1。

# mdadm /dev/md0 -a /dev/sdb1

查看当前阵列的状态:

# more /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]

75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]

unused devices:

这时sdb1作为备份设备再次出现在阵列中

常用阵列维护命令

1.启动阵列

# mdadm -As /dev/md0

该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。

#mdadm -As

该命令指启动mdadm.conf文件中的所有阵列。

#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1

如果没有创建mdadm.conf文件则可以采用上面这种启动方式。

2.停止阵列

# mdadm -S /dev/md0

3.显示指定阵列的详细信息

# mdadm -D /dev/md0

链接

RAID简介

RAID 是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。

磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。

1.RAID 0

特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。

磁盘利用数:n(假设有n个磁盘)。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。

2.RAID 1

特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。

磁盘利用数:n/2。

配置条件:最低两块磁盘,且分区大小尽量相同。

应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。

3.RAID 5

特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。

磁盘利用数:n-1。

配置条件:最低三块硬盘,且分区大小尽量相同。

应用领域:适合于事务处理环境,例如民航售票处、销售系统等。