2008年12月31日星期三

centos 5 yum install wine +Dreamweaver 8 安装笔记

centos 5 yum install wine +Dreamweaver 8 安装笔记
新建一个yum 源

vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
enabled=0
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

命令

yum --enablerepo=dag install wine

配置 wine

wget http://sidenet.ddo.jp/winetips/files/wine-config-sidenet-1.9.1.tgz
tar xvzf wine-config-sidenet-1.9.1.tgz
cd wine-config-sidenet
/blog/bibouroku/./setup

设置字体

ln -s ~/.fonts/ipagui-mona.ttf ~/c//windows/fonts/

Dreamweaver 8

用WindowsPC复制到以下文件夹

C://Program Files/Macromedia
/home/lam/c/Program Files/Macromedia

C://Program Files/Common Files
/home/lam/c/Program Files/Common Files

C://WINNT/system32/MACROMED
/home/lam/c/windows/system32/Macromed

C://Documents and Settings/All Users/Application Data/Macromedia
/home/lam/c/windows/profiles/All Users/Application Data/Macromedia

regedit
HKEY_LOCAL_MACHINE/Software/Macromedia/
macromedia.regLinux
yum install recode
recode ucs-2..ascii macromedia.reg
wine regedit macromedia.reg

Dreamweaver重启

wine "c:\Program Files\Macromedia\Dreamweaver 8\Dreamweaver.exe"

就可以使用了

http://fedoraproject.org/wiki/AndreasBierfert/Wine

2008年12月30日星期二

linux时间同步

hwclock --systohc
hwclock --hctosys

2008年12月27日星期六

目录下文件按数字顺序集体重命名(awk)

bbskuang@ubuntu:~$ ls | awk '{print "mv "$1, NR".txt"}' | sh
mv: `1.txt' and `1.txt' are the same file

bbskuang@ubuntu:~$ ls
1.txt 11.txt 13.txt 15.txt 17.txt 19.txt 3.txt 5.txt 7.txt 9.txt
10.txt 12.txt 14.txt 16.txt 18.txt 20.txt 4.txt 6.txt 8.txt

bbskuang@ubuntu:~$ ls -al



http://freebsd.chinaunix.net/bbs/thread-1340676-1-1.html

杀掉某终端用户的shell(含正则)

echo "系统当前用户"
echo "---------------"
who | awk '{print $2}'
echo "---------------"
echo "输入要杀死终端的终端号:"
read $TTY
kill -9 ${K}`ps -t $TTY | grep [0-9] | awk '{print $1}'`

2008年12月22日星期一

Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份

作者:李晨光

作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份、重要数据库系统的备份工作。由于备份是个频繁而琐碎的工作,如何能把这个工作做得即简单又灵活呢?下面就来介绍在Linux下如何使用SSH和Crontab以及Rsync工具来进行数据的自动备份与同步。
一、SSH无密码安全登录
为什么要选择SSH 呢?SSH又是什么呢?可以说它是替代以前Telnet的远程登录工具,SSH的英文全称是Secure Shell。用户可以把所有传输的数据进行加密,这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。而且SSH的数据传输是经过压缩的,可以加快传输的速度,这就是SSH 目前能替代Telnet远程登录工具的原因。
说到安全,SSH提供两种级别的安全验证,一种是基于口令的安全验证。只要用户知道自己账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证用户正在连接的服务器就是用户想连接的服务器,可能会有别的服务器在冒充真正的服务器,这存在着潜在的威胁。一种是基于密匙的安全验证。需要依靠密匙, 也就是用户必须为自己创建一对公匙,密钥,并把公用密匙放在需要访问的服务器上。如果需要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求使用用户的密匙进行安全验证。服务器收到请求之后,先在服务器上用户的主目录下找到该用户的公用密匙,然后把它和用户发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询” 之后就可以用用户的私人密匙解密再把它发送给服务器。
下面做的就是利用第二种基于密匙的安全验证的登录,具体方法如下:
使用如下命令在需要备份的机器上创建一对公钥/密钥:
#ssh-keygen -t rsa
Generation public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identiflcation has been save in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_ras.pub.
The key fingerprint is:
c3:a0:de:f8:24:8e:f6:0d:ed:0a:b0:a2:2d:aa:d3:8b root@localhost.localdomain
这期间一直按回车即可,这样公匙/密钥就创建完毕。
使用如下命令把公匙传到需要备份的服务器上:
#ssh 192.168.1.2
#mkdir .ssh;chmod 0700 .ssh
远程登录到需要备份的服务器上并且创建.ssh目录。
#scp .ssh/id-rsa.pub 192.168.1.2 : .ssh/authorized_keys2
上述命令可以把公钥远程传过去。
这样一个SSH基于密匙的安全验证登录就简单的做完了,现在就可以从192.168.1.1直接用“ssh 192.168.1.2”无密码自动登录过去了,这样就简单而又安全的实现了自动登录目的, 可以为下面定时做备份打下前题。
二、定时数据同步
这里把定时触发和同步一起来简单介绍一下,Crontab是个能定时执行命令的一个工具, 它是用来让使用者在固定时间或固定间隔执行程式之用,下面就介绍一下这个命令的常用参数。
Crontab命令参数:
-e执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器(比如说setenvVISUALjce)。
-r删除目前的时程表。
-I列出目前的时程表。
Crontab时程表示格式如下:f1 f2 f3 f4 f5 command
其中,f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。Command表示要执行的命令。当f1为 时表示每分钟都要执行command,f2为*时表示每小时都要执行程式,其余类推。当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行。当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其余类推。当f1为a,b,C,......时表示第a,b,C,......分钟要执行,f2为a,b,C,...... 时表示第a,b,C,......个小时要执行,其余类推。当然也可以将要定时执行的命令存放在预备文档里,这里就得用crontab file的方式来设定时程表。
三、数据同步
现在来介绍一下如何让数据同步的一个工具,Rsync可以让数据同步,下面看一下一些Rsync的主要参数:
-V,--verbose 输出的信息;
-q,--quiet 安静模式,几乎没有信息产生.常用在以cron执行rsync;
-a,--archive archive mode权限保存模式,相当于-rlptgoD 参数;
-p,--perms 保留档案权限;
-O,--owner保留档案所有者(root only);
-g,--g rouP 保留档;案群;
-D,--devices 保留device 信息(root only);
-e,--h=COMMAND定义所使用的remote shell;
-4, --ipv4 使用IPv4协议;
-6, --ipv6 使用IPv6协议;
下面看一下如何通过SSH和Rsync工具组合使用方法:
#rsync -ave ssh 192.168.1.2:/home/ftp/pub/ /home/ftp/pub/
需要注意的是,源端目录名称末尾的/。在源说明中后缀/通知rsync复制该目录的内容,但不复制目录文件自身。要想把目录包含在要复制内容的最顶层就要去掉/;
使用SSH传输rsync流量具有下述优点, 可通过网络加密数据,而且速度非常快,使用SSH客户端密钥建立的任何信任关系。如果要在两台计算机之间保持大型、复杂目录结构的同步性(尤其是两者间的差异很小时), 那么rsync就是一种使用起来极为方便(并且执行速度很快)、随心所欲的工具。
#crontab -e
0 17 * * 1-5 rsync -ave ssh 192.168.1.2:/my /my
上面的操作"crontab-e"命令是编辑定时启动脚本,然后在周一到周五的每天下午5点执行SSH远程自动登录然后把192.168.1.2的/my目录下的所有东西同步到本地的/my目录下,这样就达到了自动数据同步备份的目的了。

2008年12月15日星期一

关于引入日期的shell用法

#! /bin/bash

. /home/orarun/.bash_profile


#得到今天星期几的数字
DATE_n=`date +%u`
echo `date` > /backup/exp_bak/daily_exp.log

cd /backup/exp_bak
rm msprod_$DATE_n.dmp.gz
#删除上周这一天的备份
#今天周五就删除/backup/exp_bak/msprod_5.dmp.gz

2008年12月13日星期六

mtop 实时监控 MySQL

Requires the following perl modules: Module Available At
------------ --------------------------------------------------------
Curses http://cpan.linuxforum.net/authors/id/G/GI/GIRAFFED
DBI Distributed as Bundle::DBI: http://www.cpan.org/authors/id/TIMB
DBD::mysql http://www.cpan.org/modules/by-module/DBD
Getopt::Long (Distributed with Perl 5)
Net::Domain Part of libnet: http://www.cpan.org/authors/id/GBARR
# perl -e 'use Curses'
# perl -e 'use DBI'
# perl -e 'use DBD::mysql'
# perl -e 'use Getopt::Long'
# perl -e 'use Net::Domain'没有输出就是模块已经安装了,有错误就是相应的模块没有安装。可以在上面给出的地址下载相应模块的最新版本。
安装所需的 Perl 模块:
# tar zxvf Curses-x.xx.tar.gz
# cd Curses*
# perl Makefile.PL
# make
# make installyum 仓库里有 perl-DBI ,所以直接 yum 安装,# yum -y install perl-DBI因为是编译安装的 MySQL ,所以需要把 lib 的路径加入 ld.so.conf ,# vi /etc/ld.so.conf
/usr/local/mysql/lib/mysql
# ldconfig虽然 yum 仓库里有 perl-DBD-MySQL ,但其依赖 mysql ,所以还是编译安装,# tar zxvf DBD-mysql-x.xxxx.tar.gz
# cd DBD-mysql*
# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
# make
# make install安装 mtop :# tar zxvf mtop-0.6.6.tar.gz
# cd mtop-0.6.6
# perl Makefile.PL
# make
# make install添加相应的 MySQL 数据库用户:
# mysql -uroot -pPASSWORD
mysql> GRANT RELOAD,PROCESS,SUPER ON *.* TO 'mtop'@'localhost' IDENTIFIED BY 'mtop';
mysql> FLUSH PRIVILEGES;
mysql> exit运行:因为自定义了 mysql.sock 的位置,所以需要做个链接 mtop 才能运行,
# ln -s /var/run/mysqld/mysql.sock /tmp/mysql.sock
# mtop --dbuser=mtop --password=mtop

2008年12月10日星期三

Linux Iptables 内核2.6.18添加time模块

  系统:CentOS 5.1 内核:2.6.18-53.1.19.el5
  iptables 版本 1.3.5(系统自带的)
  下载一个内核:linux-2.6.18 解压到/usr/src/linux
  #cd linux
  #make mrproper
  #make menuconfig
  什么也不做,退出.
  vi Makefile
  把EXTRAVERSION = 更改为EXTRAVERSION = -53.1.19.el5
  保持跟uname -a 的版本一致
  下载一个iptables1.3.5解压到/usr/src/iptables (下面会用到)
  (下载)patch-o-matic-ng-20080214.tar.bz2
  wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.0.tar.bz2
  #cd patch-o-matic-ng-20080214
  #./runme --download
  ...........
  应用time补丁到内核:
  选y ,至此,netfilter的补丁打完了,如果你需要别的模块可以根据需要加上.
  编译kernel的modules
  #cd /usr/src/linux
  #make menuconfig
  在Device Drivers->;Networking support->;Networking options->;Network packet filtering (replaces ipchains)
  ->;IP: Netfilter Configuration中把下面的两项M选中.
  ; TIME match support
  保存,退出.
  编译安装模块
  下面就是最重要的步骤了,因为我们的原则是节省时间,不重新编译内核,而只编译其中的模块,这点2.4的内核跟2.6的内核有所不同,2.4内核的模块是以*.o形式的,而2.6内核是以*.ko形式的,
  [root@jiecho]# make modules
  HOSTCC scripts/basic/fixdep
  HOSTCC scripts/basic/split-include
  HOSTCC scripts/basic/docproc
  HOSTCC scripts/conmakehash
  HOSTCC scripts/kallsyms
  CC scripts/empty.o
  HOSTCC scripts/mk_elfconfig
  MKELF scripts/elfconfig.h
  HOSTCC scripts/file2alias.o
  HOSTCC scripts/modpost.o
  HOSTCC scripts/sumversion.o
  HOSTLD scripts/modpost
  HOSTCC scripts/pnmtologo
  HOSTCC scripts/bin2c
  到这里就可以ctrl+c中止了,因为我们不是要编译所有的模块,这样太浪费时间,而仅仅是netfilter的模块,但是如果你直接执行make modules SUBDIRS=net/ipv4/netfilter就会出错,这就是2.4和2.6的区别,我们先生成了scripts目录下的一系列需要的文件后就可以make modules SUBDIRS=net/ipv4/netfilter,并用modpost等等把*.o文件生成为*.ko文件.
  #make modules SUBDIRS=net/ipv4/netfilter
  编译完成netfilter的模块后拷贝编译完成的模块
  #chmod +x /usr/src/linux/net/ipv4/netfilter/ipt_time.ko
  # cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.18-53.1.19.el5/kernel/net/ipv4/netfilter/
  #depmod -a 或 insmod /usr/src/linux/net/ipv4/netfilter/ipt_time.ko
  #lsmod | grep ip
  此时,能看到以下东东
  ipt_time 6400 1
  但现在还不能用,还却少libipt_time.so 这个东东
  现编译下载的iptables
  #cd /usr/src/iptables
  #make KERNEL_DIR=/usr/src/linux
  # make install KERNEL_DIR=/usr/src/linux (我编译时出现不少警告,错误!)
  完了以后,
  #cp /usr/src/iptables/extensions/libipt_time.so /lib/iptables中
  到此结束, iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri

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

Ettercap-交换环境下的嗅探器使用方法

一:安装
你可以在网上很多地方下载到它的最新版本,下载完后,先解压缩:
[root@CIEL root]#tar zxpvf ettercap-0.6.tar.gz
[root@CIEL root]#cd ettercap-0.6
[root@CIEL ettercap-0.6]#./configure&&make&&make install
[root@CIEL ettercap-0.6]#make plug-ins
[root@CIEL ettercap-0.6]#make plug-ins_install
安装完成后,输入"ettercap --help"就可以看见帮助文档.基本用法是
ettercap [option] [host:port] [host:port] [mac] [mac]



二:功能介绍
嗅探:它有5种工作模式
-a --arpsniff 基于arp的欺骗,分3小种:arpbased,smartcarp和publicarp
-s --sniff 属于IPBASED,目标可以是任何主机
-m --macsniff 属于MACBASED
需要说明的是-s -m两选项带来的是传统嗅探模式,分别基于IP地址和MAC地址.也就是说它们必需先把网卡置于混杂,然后才可以正常工作。所以在交换环境下,这两项会完全失效,-a选项是基于ARP欺骗的,是一种中间人攻击模型。实质是利用了ARP协议的漏洞,攻击者分别欺骗了A和B机。让A机把数据传给嗅探者,然后再由嗅探机器把数据转发给B机,A和B却没有意识到数据包的中转过程,这样我们就可以劫获数据甚至修改数据包



下面分别介绍五种用法:
1:ettercap -Nza ip1 ip2 mac1 mac2 (arpbased) 劫获IP1与IP2间的数据.缺省状态下
只接收TCP数据包
2: ettercap -Na ip mac (smartcarp) 劫获此ip与外部所有通讯数据,这种方式比较剧烈,启动时采用的是ARP风暴,很容易被发现.如果别人在用TCPDUMP监听,就会看见攻击者发出的无数的ARP请求,再傻的管理员都明白什么事情发生了.不过由于修改了指定主机的ARP表中关于被监听主机的MAC地址,还修改了被监听主机中的那些指定主机的MAC地址,处在完全的中间人工作状态,这时候你可以作的事情多些,比如更改数据包,截取SSH口令
3:ettercap -Nza ip mac (publicarp) 同上,不同点在于发送ARP请求的方式,上面采用的是ARP广播,这里只是对特定主机发送ARP请求.这样,不易引起管理员的怀疑.不过也带来了问题,被监听者自己也会收到这个以广播方式发送的ARP响应包,于是便会弹出"检测到IP地址于硬件地址冲突"之类的警告.不过不会影响目标主机正常通信,还有一点就是发往被监听主机的数据包会送给监听者,而监听者发出的数据包却被直接送往真正的目的主机,没有经过监听者的主机.所以我们只能截取不完全的通信内容
4:ettercap -Nzs IP:80 (ipbased sniffing) 基于IP地址的嗅探。这里仅劫获目标机器HTTP消息,你也可以指定其他端口,比如23 。如果没有指定,所有都会被截取
5:ettercap -zm mac1 mac 2 (macbased) 基于MAC的嗅探.只要输入MAC地址

需要说明的是,4,5两种方式只适合于共享网络,在交换网络下一概无效.MAC地址的获取很简单,直接在终端输入 “ettercap -l"就会列出所有在线主机。或者你先PING一下某个IP,不管有没有回应(没有回应可能是对方开了防火墙),再用ARP命令就可以获取其MAC地址。如果无法获取,则此IP不存在 ,这也是探测防火墙后的主机是否在线的一个好方法。



包过滤:由于网络流量实在很大,当你面对大量记录数据时,你可能会感到手足无措,你想找到自己需要的数据无疑是一项艰巨的工作,这时侯,我们可以通过—F选项加载自己的过滤规则,这样,很多无用的数据就会被忽略,删节。和注射字符一样,我们进行包过滤时有必要的话也要注意到正确的TCP序列号和确认序列号等因素。一旦你加载了自己的过滤链,你就可以有目的的得到自己最需要的数据了。一条过滤规则看起来就象汇编程序一样,当然,还是有差距的,用列阵形容可能更确切些。一条过滤规则大概如下:《协议,源端口,目标端口,承载数据》
一个空的搜索字符串总可以成立,比如端口如果没有指定,所有的都会被记录下来。只要那些规则匹配,你的过滤链就可以工作了
例如有如下数据流
packet 1: "var1=123&var2=400"
packet 2: "var1=124&var2=420"
packet 3: "var1=125&var2=460"
packet 4: "var1=126&var2=540"
packet 5: "var1=127&var2=700
......
......
我们可以写如下规则
Search: "var1=[3*]"
Replace: "var1=000" 网管bitscn_com
被过滤后的流就会如下
packet 1: "var1=000&var2=400"
packet 2: "var1=000&var2=420"
packet 3: "var1=000&var2=460"
packet 4: "var1=000&var2=540"
packet 5: "var1=000&var2=700"
如果“var1”后面没有被指定,默认则“var1=000” 网管u家u.bitsCN.com

最后是关于ssh的嗅探:
由于传输数据被加密,我们必需自己掌握密钥,具体实现方法如下:我们先截取服务器的明码密钥,保存在一边.自己再生成另一明码密钥,用来加密本机与客户机通讯数据,收到客户机数据后,自然可以解密,在用服务器明码密钥加密,发送给服务器,如此一来,可以偷天换柱.



三:工作参数:
下面列出它的主要选项,虽然它本身有28个,不过限于篇幅,下面只列出一些常用的:
-N --simple 非交互方式,很常用的
-z --silent 静模式(启动时不是发送ARP风暴)
-O --passive 被动模式嗅探
-b --broadping 广播PING ,替代了ARPPING
-S --spoof 用IP1这地址发送ARP请求获取其他机器信息
-H --hosts 嗅探的目标主机的IP,可以是很多台
-n --netmask 扫描由输入子网掩码确定的子网
-v --version 检查最新版本
-h --help 帮助文档

组合选项 (一般和N绑定一齐执行)
-u --udp 嗅探UDP数据,缺省是TCP
-p --plugin 运行指定名字的插件
-l --list 列出所有在线主机ip和mac.实质就是发送255个ARP请求,等待回音,如果你的子网掩码是255.255.0.0,就会发送255*255个请求,就是ARP风暴吧!
-C --colletc 仅搜集用户名和对应密码 Eg:ettetcap -NCzs IP:port 它规则不是很严格,所以你IP或PORT不填也没有关系
-c --check 检察网络里有没其他机器正在嗅探
-x --hexview 用16进制表达数据,这样,如果你想自己创建一个包的话会比较方便.比如建个文件写上"\x01\x02\x00\x00\xFF\xFF\x00x02here the pass".注意:ettercap不仅可以嗅探包,也可以创建包的.所以你可以更改穿过你机器的任何一段数据
-L --logtofile 记录所有数据到指定位置
-k --newcert 创建一个新的CERT文件,用以进行HTTPS攻击
-F --filter 从指定文件列加载过滤规则
-f --fingerprint 指定主机的OS判别,采用的是nmap的数据库,所以准确性得到保障,不过也有无法辨别的时候.
-t --linktype 判断自己处在什么样的网络环境中,交换或是HUB



实战篇
210.197.248.192是确定在线的主机,先判断它操作系统
[root@CIEL root]# ettercap -Nf 218.197.248.192
ettercap 0.6.0 (c) 2001 ALoR & NaGA
Your IP: 218.197.248.226 with MAC: 00:00:E8:7B:CA:4E on Iface: eth0
Fingerprinting 218.197.248.192...
Operating System:
Windows NT 5 Beta2 or Beta3
Windows Me or Windows 2000 RC1 through final release
MS Windows2000 Professional RC1/W2K Advance Server Beta3
Windows Millenium Edition v4.90.3000

现在小试牛刀,看看对方正在做什么
[root@CIEL root]# ettercap -Nza 218.197.248.192 218.197.248.254 MAC1 MAC2
这里218.197.248.254是网关。这样,我们就是中间人了,它与外网所有数据都会在我们这里流过。不过被嗅探机器的内网数据交换我们将看不到
下面是截取到的2段典型的HTTP交互数据,从第一段可以看出客户正在看的网页,脚本,浏览器语言以及客户的操作系统等信息。从第2段可以看出主机的bannner等等,都是网站的基本资料
GET /pcedu/script/title_edu.js HTTP/1.1.
Accept: */*.
Referer: http://wwwb.pconline.com.cn/pcedu/soft/doc/nt/10308.htm.
Accept-Language: zh-cn.
Accept-Encoding: gzip, deflate.
If-Modified-Since: Mon, 09 Sep 2002 09:18:53 GMT.
If-None-Match: "6f67c-2d5-3d7c677d".
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt).
Host: wwwb.pconline.com.cn.
Connection: Keep-Alive.

HTTP/1.1 200 OK.
Date: Sat, 01 Mar 2003 08:25:37 GMT.
Server: Apache/1.3.20 (Unix) PHP/4.1.2 mod_ssl/2.8.4 OpenSSL/0.9.6a.
X-Powered-By: PHP/4.1.2.
Keep-Alive: timeout=15, max=100.
Connection: Keep-Alive.
Transfer-Encoding: c

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

2008年12月7日星期日

RHELAS4 下 rpmbuild 制作httpd-2.0.59 系列 rpm包

说明: RHELAS4 u2-u4 以Apache 2.0.X Released 产品线最新版本httpd-2.0.59.tar.gz+
apr-0.9.13+apr-util-0.9.13来制作最新版本的rpm软件安装包


第一步 编译环境
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

第二下 下载httpd-2.0.59对应的apr的版本apr-0.9.13+apr-util-0.9.13
rpmbuild -ta --nodeps apr-0.9.13.tar.gz
rpm ivh /root/rpm/RPMS/i386/apr-0.9.13-1.i386.rpm (如果系统里有用 Uvh升级安装)
rpm ivh /root/rpm/RPMS/i386/apr-devel-0.9.13-1.i386.rpm
rpmbuild -ta --nodeps apr-util-0.9.13.tar.gz (系统里有apr-0.9.13才能编译此步) 
rpm ivh /root/rpm/RPMS/i386/apr-util-0.9.13-1.i386.rpm
rpm ivh /root/rpm/RPMS/i386/apr-util-devel-0.9.13-1.i386.rpm


第三步 http://httpd.apache.org 下载
注: Apache 2.2.X Released 为一个产品线
Apache 2.0.X Released httpd-2.0.59.tar.gz为此产品线的最新版本
Apache 1.3.X Released

第四步 提取 httpd.spces
tar -zxvf httpd-2.0.59.tar.gz
cp httpd.spec $HOME/rpm/SPECS下
cp httpd-2.0.59.tar.gz $HOME/rpm/SOURCES

vi $HOME/rpm/SPECS/httpd.spec

%prep
%setup -q
上面插入以下
%package suexec
Group: System Environment/Daemons
Summary: suexec binary for the Apache HTTP server
PreReq: httpd = %{version}-%{release}

%description suexec
This package includes the /usr/sbin/suexec binary which can be installed
to allow the Apache HTTP server to run CGI programs (and any programs
executed by SSI pages) as a user other than the 'apache' user.

在%changelog的上方插入以下
%files suexec
%defattr(-,root,root)
%attr(4510,root,%{suexec_caller}) %{_sbindir}/suexec
%{_mandir}/man8/suexec.8*

下面开始用rpmbuild制作最新httpd-2.0.X 最新rpm安装包
rpmbuild -ba --nodeps $HOME/rpm/SPECS/httpd.spec

到些你就会得到以下提示
Wrote: /root/rpm/SRPMS/httpd-2.0.59-1.src.rpm
Wrote: /root/rpm/RPMS/i386/httpd-2.0.59-1.i386.rpm
Wrote: /root/rpm/RPMS/i386/httpd-devel-2.0.59-1.i386.rpm
Wrote: /root/rpm/RPMS/i386/httpd-manual-2.0.59-1.i386.rpm
Wrote: /root/rpm/RPMS/i386/mod_ssl-2.0.59-1.i386.rpm
Wrote: /root/rpm/RPMS/i386/httpd-suexec-2.0.59-1.i386.rpm
Wrote: /root/rpm/RPMS/i386/httpd-debuginfo-2.0.59-1.i386.rpm

[root@mail bin]# rpm -qa|grep mod
mod_authz_ldap-0.26-2
mod_auth_kerb-5.0-1
mikmod-3.1.6-32.EL4
usermode-gtk-1.74-1
mod_auth_mysql-2.6.1-2.2
mod_python-3.1.3-5.1
mod_auth_pgsql-2.0.1-6
module-init-tools-3.1-0.pre5.3
usermode-1.74-1
mod_perl-1.99_16-4
mod_ssl-2.0.52-19.ent
[root@mail bin]#

用httpd-2.0.59.tar.gz 制作的rpm包 里有个
Wrote: /root/rpm/RPMS/i386/mod_ssl-2.0.59-1.i386.rpm


谢谢观看!!!!!!!!!!!!!

原作者:xhc

如何查找含特定字符串的文件

find . -type f -regex ".*\.c" -print -exec grep "138" {} \;
find . -type f -regex ".*\.c" -exec grep "138" {} \; -print
find . -name "*.c" -exec grep "138" {} \; -print

2008年12月6日星期六

自动备份mysql的shell

filename=`date +%Y%m%d`

mysql_bin_dir/mysqldump –opt dataname -u user -ppassword | gzip > /www/mysqlbackup/name$filename.gz

保存退出

说明:

(1)mysql_bin_dir:mysql的bin路径;

(2)dataname:数据库名;

(3)user:数据库用户名;

(4)password:用户密码;

(5)name:自定义备份文件前缀标识。

2008年12月3日星期三

linux的tcp参数优化

我有几台作cache的linux服务器。
负载比较大,netstat -n|grep TIME_WAIT|wc -l的结果保持在4500左右。
怎么优化?

答:
vi /etc/sysctl.conf
  编辑/etc/sysctl.conf文件,增加三行:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

  说明:
  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

  再执行以下命令,让修改结果立即生效:
  /sbin/sysctl -p

2008年12月1日星期一

Linux下如何知道某个端口在运行什么程序

当我们用netstat -an的时候,我们有时候可以看到类似的输出:



udp 0 0 0.0.0.0:32768 0.0.0.0:*


但是查找/etc/services又没有这个端口的相关说明,怎么办呢?这个是不是黑客程序?有没有办法查看究竟什么程序监听在这个端口?


使用lsof -i :32768就可以看到:



COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
rpc.statd 603 root 4u IPv4 953 UDP *:32768
rpc.statd 603 root 6u IPv4 956 TCP *:32768 (LISTEN)


原来是rpc的程序。


使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接。

本篇文章来源于 黑客基地

2008年11月28日星期五

RHEL4下的kickstart+dhcp+tftp+pxelinux+nfs全自动安装指南

原理:
1、客户机必须自带支持pxe的网卡,并将bios设为网络启动。
2、网卡的启动模块中的固化程序先申请ip地址,dhcp服务器做出应答。
3、dhcp服务器指定客户机的ip、pxelinux启动程序及配置文件的位置。
4、客户机通过dhcp服务器指定的文件位置,通过tftp方式从tftp服务器下载对应文件。包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件
5、根据pxelinux.cfg/default文件,下载nfs目录下的ks.cfg文件,按照该文件的配置,使用nfs自动下载所需的rpm包,并安装。

过程:
tftp、nfs服务器为同一台机器10.0.1.61 dhcp为单独服务器
redhat源文件路径:/home/os/rhel4
tftp主目录:/tftpboot

1、配置/etc/dhcpd.conf,添加:
group {
next-server 10.0.1.61;
filename "rhel4/pxelinux.0";

host netman1 {
hardware ethernet 00:0d:56:10:ae:20;
fixed-address 10.0.1.1;
}
}
其中,
next-server 10.0.1.61 指定tftp服务器的ip
filename "rhel4/pxelinux.0" 指定客户机的启动文件
host {...} 指定要使用pxe安装的客户机ip
重启dhcp服务器:/etc/init.d/dhcpd restart

2、配置tftp服务器
打开/etc/xinetd.d/tftp文件,设disable=no。
启动xinetd:/etc/init.d/xinetd restart
默认情况下,tftp服务器的主目录是/tftpboot,将第一张光盘的isolinux下的所有文件都拷贝到/tftpboot下。
执行:mkdir -p /tftpboot/pxelinux.cfg
mv /tftpboot/isolinux.cfg /tftpboot/pxelinux.cfg/default
修改default文件,添加:
label auto
kernel vmlinuz
append initrd=initrd.img ks=nfs:10.0.1.61:/home/os/rhel4/ks.cfg devfs=nomount ramdisk_size=8192 nofb
其中,ks指定了ks.cfg文件所在的位置。注意,不要将initrd=ininrd.img的位置放到后面,有可能起不出来咯:)
目前,ks好像不支持ftp方式,只支持http和nfs。
http方式的格式为:
ks=http:///

3、配置ks.cfg文件。
这个步骤相对简单,找台linux机器,在x下运行redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4)。配置完保存在nfs服务器的/home/os/rhel4/ks.cfg就可以了。

4、拷贝rhel4的cd1源包到目录/home/os/rhel4下,cd2/3/4下的rpm包都放到/home/os/rhel/RedHat/RPMS/下。

5、配置nfs服务器
配置/etc/exports文件,添加
/home/os/rhel4/ *(rw)
启动portmap、nfs

6、差不多了,打开客户机,在出现boot:下键入auto看看:)

解决apache Web服务器中文网页显示乱码

解决的方法之一:
(1)在每一个网页里增加
< meta http-equiv="Content-Language" content="zh-cn" >;
< meta http-equiv="Content-Type" content="text/html; charset=GB2312" >;
并在APACHE的httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off

解决的方法之二:
直接在httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为
AddDefaultCharset GB2312 .ZH-CN .zh-cn
上述两种方法都可以解决apache Web服务器网页显示乱码的问题。 其中以第二种方法最好最简单,且一劳永逸。

解决的方法之三:
把所有 AddDefaultCharset选项全部禁用,网站会自动选择编码。

2008年11月25日星期二

在用SSH远程操作的时候经常遇到断线的解决办法

问题:
在用SSH远程操作的时候经常遇到断线,怎么回到任务去啊
比如我正在安装编译一个程序,忽然终端段开了,我再次连接上去的时候已经是[root@localhost~]#
怎么才能回到任务中去继续啊,晕啊


回答:
在这种情况下,一般只能重新编译安装。

因为通过这个终端连接到主机所进行的编译与安装操作是基于这个终端的。

P.S. 通过 ps ax 可以查看到系统进程会随着该用户终端的关闭而中止基于这个终端的用户操作。

需要补充的是:根据 y178574112 的描述,虽然已经无法回到断开的任务中继续,但是如果在编译安装时,通过 nohup 来执行,既可以在超时断开,以及登出服务器后也能够继续让其在后台运行。

例如:
# nohup make install

这样即使断开终端,也不会让安装终止,直到安装进行完毕自动结束。

2008年11月23日星期日

linux下查看某个服务的pid

比如看时间服务器的:
[root@web1 ~]# pgrep ntpd
24947

如何为grub加密

为grub密分为二种,一是明文,二是采用MD5算法的加密。
明文加密:编辑 grub.conf文件
vim /boor/grub/grub.conf 在default=0下面加一行 password=1234567890(这个就是明文密码)

MD5加密:先要命令 grub-md5-crypt计算出MD5的值,然后复制这个值到grub.conf文件中 password --md5$BYxEn$e5X/xOTS2pTpPPWtgIMhU1(这个就是用MD5加密后的值)

2008年11月19日星期三

linux重启鼠标命令

重启鼠标命令: /etc/rc.d/init.d/gpm restart

2008年11月14日星期五

linux救援模式,grub篇

  1. 在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键
  2. 再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键
  3. 修改你现在见到的命令行,加入single,结果如下:
  kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/
  4. 回车返回,然后按b键启动,即可直接进入linux命令行
  5. #vi /etc/shadow
  将第一行,即以root开头的一行中root:后和下一个:前的内容删除,
  第一行将类似于
  root::......
  保存
  6.也可以使用命令:passwd 修改密码。
  7. #reboot重启,root密码为空

GRUB下进入单用户模式

在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键
2. 再次用上下键选中你平时启动linux的那一项(类似kernel /boot/vmlinuz-2.4.18-14 ro 然后按e键
3. 修改你现在见到的命令行,加入single,结果如下:
kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ 4. 回车返回,然后按b键启动,即可直接进入linux命令行

kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/
这一行中加single是关键的,在其它很多网站上说的比较模糊涂.

2008年11月13日星期四

如何显示linux系统中注册的用户数(含系统用户)

wc --lines /etc/passwd

36 /etc/passwd

nl /etc/passwd | head

1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news:

需要找出/etc/my.conf文件属于哪个包

执行rpm -qf /etc/my.conf即可。

安装src.rpm

#rpmbuild --rebuild mplayer-0.90pre8.20021004-1.src.rpm
#cd /usr/src/redhat(or other)/RPMS/i386/
#rpm -ivh xxxxx.rpm


rpmbuild那个包第二张盘里有,rpm-build

远程用SSH登陆redhat AS 4服务器,连接记录日志都在哪个文件?

cat /var/log/secure

2008年11月10日星期一

在Linux操作系统下手动分析病毒样本技巧

在Linux操作系统下手动分析病毒样本技巧

 原理:利用md5值的不同进行文件的对比。
  操作背景:

  1. XP安装光盘;

  2. 病毒样本;

  3. U盘;

  4. Ubuntu 7.10 LiveCD

  5.所需的几个对比md5和转化二进制文件格式的程序

  操作过程:

  1. 全盘格式化,同时安装Windows(也可采用ghost回去,但是一定注意其他磁盘可能的病毒感染)

  2. 在刚装好的Windows下,导出注册表。将导出文件放入C盘根目录下。这里我命名为1.reg

  3. 进入Ubuntu系统,注意,进入前f2选择简体中文模式

  4. 挂载C盘:

  mkdir /mnt/hdd1 (生产系统C盘挂载点)

  mount -t ntfs -o iocharset=cp936 /dev/hdd1 /mnt/hdd1 (将系统C盘挂载到/mnt/hdd1下,注意文件格式和设备号视具体情况而定)

  5. 挂载U盘:

  mkdir /mnt/usb (生成U盘挂载点)

  mount -t vfat /dev/sda1 /mnt/usb (将U盘挂载到/mnt/usb下,同样注意文件格式和设备号)

  6. 将导出的注册表信息放入U盘:

  假设U盘上已经有test目录,同时,在test目录下有parse.sh,parseWinReg,ShowList 三个程序

  cp /mnt/hdd1/1.reg /mnt/usb/test (将导出注册表拷贝至/mnt/usb/test目录下)

  cd /mnt/usb/test (进入U盘test 目录)

  ./parseWinReg 1.reg origreg (将导出注册表进行格式转换,生成origreg)

  7. 计算C盘所有文件md5值:

  rm /mnt/hdd1/pagefile.sys (这个文件太大影响计算速度,删除)

  /mnt/usb/test/parse.sh /mnt/hdd1/ > /mnt/usb/origfile (计算磁盘文件md5值,并将结果导出至U盘test目录下origfile)

  8. 重新进入Windows,同时,激发病毒文件

  注意:先将病毒文件放入磁盘,拔掉U盘,拔掉网线,再激发!

  9. 重复3,4,5,6,7步骤

  mkdir /mnt/hdd1

  mount -t ntfs -o iocharset=cp936 /dev/hdd1 /mnt/hdd1

  mkdir /mnt/usb

  mount -t vfat /dev/sda1 /mnt/usb

  cp /mnt/hdd1/2.reg /mnt/usb/test (这里假设导出的注册表是2.reg)

  cd /mnt/usb/test

  ./parseWinReg 2.reg newreg

  rm /mnt/hdd1/pagefile.sys

  /mnt/usb/test/parse.sh /mnt/hdd1/ > /mnt/usb/newfile

  10. 至此,我们得到了原始的系统信息:origreg, origfile,中病毒之后的信息:newreg, newfile

  11. 比较文件不同之处:diff -Nur origfile newfile > filediff

  12. 比较注册表不同之处:diff -Nur origreg newreg > regdiff

  13. 分析filediff 和 regdiff,得到结论

  分析小技巧:一般情况下前面出现+的就是病毒释放的,-就是有过改动的(感染的),如果是md5值是成双成对出现(一个+和一个-),那那一行一般不是,如果前面没有任何标记,那说明也不是。咱们把没用的删除,只留下有单个+或者单个-的,最好看文件路径,即得到了病毒的产生文件或者是感染文件。

2008年11月6日星期四

常用的Linux网络安全工具介绍

常用的Linux网络安全工具介绍
作者:吴阿亭

简介:
  尽管各种版本的Linux distribution 附带了很多开放源的自由软件,但是仍然有大量的有用的工具没有被默认。
  包括在它们的安装光盘内,特别是有一些可以增强Linux网络安全的工具包,它们大多也是开放源的自由软件。

这里简单地介绍一下几个增强Linux网络安全的工具。
1. sudo
   sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果你需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用sudo对你是非常适合的。
sudo的主页在:http://www.courtesan.com/courtesan/products/sudo/
   以Redhat 为例,下面介绍一下安装及设置过程:
  首先,你能从sudo主页上下载for Redhat Linux的rpm package.
它在ftp://ftp.freshmeat.net/pub/rpms/sudo/ 当前最新的稳定版本1.5.9p4。

  执行#rpm -ivh sudo* 进行安装,然后用/usr/sbin/visudo编辑/etc/sudoers文件。
如果系统提示你找不到/usr/bin/vi但实际上你在目录/bin下有vi程序,你需要
ln -sf /bin/vi /usr/bin/vi为vi 在/usr/bin下创建符号链接。(注:我在Redhat 6.1上遇到,Redhat 5.x上没有此问题)
  另外,如果出现某些其它错误,你可能还需要#chmod 700 /var/run/sudo

下面是我的/etc/sudoers文件例子:

[Copy to clipboard] [ - ]CODE:
[root@sh-proxy /etc]# more sudoers
Host_Alias SERVER=sh-proxy

# User alias specification

User_Alias ADMIN=jephe,tome

# Cmnd alias specification

Cmnd_Alias SHUTDOWN=/etc/halt,/etc/shutdown,/etc/reboot

ADMIN SERVER=SHUTDOWN
jephe SERVER=/usr/bin/tail -f /var/log/maillog
jephe SERVER=/usr/bin/tail -f /var/log/messages

# User privilege specification
root ALL=(ALL) ALL
-----------

  既然我经常需要远程登录到服务器观察email log文件/var/log/maillog的变化,因此我加了这一行到 /etc/sudoers,这样我不需要经常登录作为root来完成我的日常工作,改善了安全性。

2. Sniffit
  sniffit 是一个有名的网络端口探测器,你可以配置它在后台运行以检测哪些Tcp/ip端口上用户的输入/输出信息。
  最常用的功能是攻击者可以用它来检测你的23(telnet)和110(pop3)端口上的数据传送以轻松得到你的登录口令和mail帐号密码,sniffit基本上是被破坏者所利用的工具,但是既然想知道如何增强你的站点的安全性,首先你应该知晓闯入者们所使用的各种工具。

  sniffit 的主页在 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html你能从那里下载最新的版本,安装是非常容易的,就在根目录运行#tar xvfz sniff*解开所有文件到对应目录。

  你能运行sniffit -i以交互式图形界面查看所有在指定网络接口上的输入/输出信息。

如:为了得到所有用户通过某接口a.b.c.d接收邮件时所输入的pop3帐号和密码,你能运行
#sniffit -p 110 -t a.b.c.d &
#sniffit -p 110 -s a.b.c.d &
记录文件放在目录/usr/doc/sniffit*下面:
  log file根据访问者的IP地址,随机高端端口号和用来检测的网络接口IP地址和检测端口来命名。它利用了tcp/ip协议天生的虚弱性,因为普通的telnet和pop3所传的用户名和密码信息都是明文,不带任何方式的加密。 因此对telnet/ftp.你可以用ssh/scp来替代. sniffit检测到的ssh/scp信息基本上是一堆乱码,因此你不需要担心ssh所传送的用户名和口令信息会被第三方所窃取。


3. ttysnoop(s)
  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测试这个程序是有趣的,下面是相关指令:

  首先改/etc/inetd.conf中的in.telnetd默认调用login登录程序为/sbin/ttysnoops,象下面这样:

[Copy to clipboard] [ - ]CODE:
[root@jephe /etc]# more inetd.conf | grep in.telnetd
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -L /sbin/ttysnoops
  更改后一定要运行killall -HUP inetd使之生效,确保不要使用阴影口令,用#pwunconv禁止阴影口令。
再编辑文件/etc/snooptab默认配置就可以了。

[Copy to clipboard] [ - ]CODE:
[root@jephe /etc]# more snooptab
ttyS1 /dev/tty7 login /bin/login
ttyS2 /dev/tty8 login /bin/login
* socket login /bin/login
------
  最后,如果在某个终端上有人登录进来(你可以用w命令查看它在哪个终端),如登录终端设备为ttyp0,则你可以登录进服务器打入#/bin/ttysnoop ttyp0(提示输入root口令,再次,上面提到的这个版本不支持阴影口令)以监视用户的登录窗口。

4. nmap
  nmap 是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些tcp/ip端口目前正处于打开状态。你可以运行它来确保已经禁止掉不该打开的不安全的端口号。
  nmap的主页在http://www.insecure.org/nmap/index.html

下面给出一个简单的例子:

[Copy to clipboard] [ - ]CODE:
[root@sh-proxy /etc]# /usr/local/bin/nmap public.sta.net.cn

Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on public.sta.net.cn (202.96.199.97):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
109 open tcp pop-2
110 open tcp pop-3
143 open tcp imap2
513 open tcp login
514 open tcp shell
7000 open tcp afs3-fileserver

Nmap run completed -- 1 IP address (1 host up) scanned in 15 seconds
第二部分

一 John the ripper

  在Linux中,密码以hash格式被存储,你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。

  John the ripper是一个高效的易于使用的密码猜测程序,其主页在http://www.openwall.com/john/
下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入 make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。

  John也可以Crack由htpasswd 生成的用于验证apache用户的密码,如果你用htpasswd -c apachepasswd user创建了一个用户user,并生成了密码,你也可以用john apachepasswd来进行猜测。John在猜测密码时输出在终端上,并把猜测出的密码存于john.pot文件中。
  另一个password Cracker是大家知道的经典的Cracker. 主页在http://www.users.dircon.co.uk/~crypto/

二.Logcheck

  Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux log文件,
象/var/log/messages, /var/log/secure,/var/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送email给管理员。你能设置它基于每小时,或者每天用crond来自动运行。

  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默认记录下所有这些警告发送给你,你可以通过设置忽略掉它们。

  利用logcheck工具分析你的所有logfile,避免了你每天经常手动地检查它们,节省了时间,提高了效率。

三. Tripwire

  Tripwire 是一个用来检验文件完整性的非常有用的工具,你能定义哪些文件/目录需要被检验,不过默认设置能满足大多数的要求,它运行在四种模下:数据库生成模式,数据库更新模式,文件完整性检查,互动式数据库更新。当初始化数据库生成的时候,它生成对现有文件的各种信息的数据库文件,万一以后你的系统文件或者各种配置文件被意外地改变,替换,删除,它将每天基于原始的数据库对现有文件进行比较发现哪些文件被更改,你能根据email的结果判断是否有系统入侵等意外事件。

  Tripwire的主页在 http://www.tripwiresecurity.com , tripwire-1.2.3的版本你能免费使用。如果你使用Redhat Linux 6.1,你也能得到最新的为6.1重建的Tripwire-1.2.3
(http://rufus.w3.org/linux/RPM/powertools/6.1/i386/tripwire-1.2-3.i386.html)当你手动更改了系统中的配置文件或程序时,你能手动再次生成一次数据库文件,运行 tripwire-initialize 在当前目录下创建databases目录并在该目录下生成新的系统数据库文件,然后cp到/var/spool/tripwire目录中覆盖旧的。

Linux安全配置步骤简述

Linux安全配置步骤简述

一、磁盘分区

1、如果是新安装系统,对磁盘分区应考虑安全性:
  1)根目录(/)、用户目录(/home)、临时目录(/tmp)和/var目录应分开到不同的磁盘分区;
  2)以上各目录所在分区的磁盘空间大小应充分考虑,避免因某些原因造成分区空间用完而导致系统崩溃;

2、对于/tmp和/var目录所在分区,大多数情况下不需要有suid属性的程序,所以应为这些分区添加nosuid属性;
    方法一:修改/etc/fstab文件,添加nosuid属性字。例如:

    /dev/hda2 /tmp ext2 exec,dev,nosuid,rw 0 0
^^^^^^
    方法二:如果对/etc/fstab文件操作不熟,建议通过linuxconf程序来修改。

    * 运行linuxconf程序;
    * 选择"File systems"下的"Access local drive";
    * 选择需要修改属性的磁盘分区;
    * 选择"No setuid programs allowed"选项;
    * 根据需要选择其它可选项;
    * 正常退出。(一般会提示重新mount该分区)


二、安装

1、对于非测试主机,不应安装过多的软件包。这样可以降低因软件包而导致出现安全漏洞的可能性。
2、对于非测试主机,在选择主机启动服务时不应选择非必需的服务。例如routed、ypbind等。


三、安全配置与增强

内核升级。起码要升级至2.2.16以上版本。
GNU libc共享库升级。(警告:如果没有经验,不可轻易尝试。可暂缓。)
关闭危险的网络服务。echo、chargen、shell、login、finger、NFS、RPC等
关闭非必需的网络服务。talk、ntalk、pop-2等
常见网络服务安全配置与升级
确保网络服务所使用版本为当前最新和最安全的版本。
取消匿名FTP访问
去除非必需的suid程序
使用tcpwrapper
使用ipchains防火墙
日志系统syslogd


一些细节:

1.操作系统内部的log file是检测是否有网络入侵的重要线索,当然这个假定你的logfile不被侵入者所破坏,如果你有台服务器用专线直接连到Internet上,这意味着你的IP地址是永久固定的地址,你会发现有很多人对你的系统做telnet/ftp登录尝试,试着运行#more /var/log/secure | grep refused 去检查。

2. 限制具有SUID权限标志的程序数量,具有该权限标志的程序以root身份运行,是一个潜在的安全漏洞,当然,有些程序是必须要具有该标志的,象passwd程序。

3.BIOS安全。设置BIOS密码且修改引导次序禁止从软盘启动系统。

4. 用户口令。用户口令是Linux安全的一个最基本的起点,很多人使用的用户口令就是简单的‘password',这等于给侵入者敞开了大门,虽然从理论上说没有不能确解的用户口令,只要有足够的时间和资源可以利用。比较好的用户口令是那些只有他自己能够容易记得并理解的一串字符,并且绝对不要在任何地方写出来。

5./etc/exports 文件。如果你使用NFS网络文件系统服务,那么确保你的/etc/exports具有最严格的存取权限设置,不意味着不要使用任何通配符,不允许root写权限,mount成只读文件系统。编辑文件/etc/exports并且加:例如:

/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)

/dir/to/export 是你想输出的目录,host.mydomain.com是登录这个目录的机器名,
ro意味着mount成只读系统,root_squash禁止root写入该目录。
为了让上面的改变生效,运行/usr/sbin/exportfs -a

6.确信/etc/inetd.conf的所有者是root,且文件权限设置为600 。
[root@deep]# chmod 600 /etc/inetd.conf
ENSURE that the owner is root.
[root@deep]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change:Mon Sep 20 10:22:44 1999(00002.06:12:16)

编辑/etc/inetd.conf禁止以下服务:
ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger,
auth, etc. 除非你真的想用它。
特别是禁止那些r命令.如果你用ssh/scp,那么你也可以禁止掉telnet/ftp。

为了使改变生效,运行#killall -HUP inetd
你也可以运行#chattr +i /etc/inetd.conf使该文件具有不可更改属性。
只有root才能解开,用命令
#chattr -i /etc/inetd.conf

7. TCP_WRAPPERS
默认地,Redhat Linux允许所有的请求,用TCP_WRAPPERS增强你的站点的安全性是举手
之劳,你可以放入
“ALL: ALL”到/etc/hosts.deny中禁止所有的请求,然后放那些明确允许的请求到
/etc/hosts.allow中,如:
sshd: 192.168.1.10/255.255.255.0 gate.openarch.com
对IP地址192.168.1.10和主机名gate.openarch.com,允许通过ssh连接。
配置完了之后,用tcpdchk检查

[root@deep]# tcpdchk
tcpchk是TCP_Wrapper配置检查工具,
它检查你的tcp wrapper配置并报告所有发现的潜在/存在的问题。

8. 别名文件aliases
编辑别名文件/etc/aliases(也可能是/etc/mail/aliases),移走/注释掉下面的行。

# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
#games: root ?remove or comment out.
#ingres: root ?remove or comment out.
nobody: root
#system: root ?remove or comment out.
#toor: root ?remove or comment out.
#uucp: root ?remove or comment out.
# Well-known aliases.
#manager: root ?remove or comment out.
#dumper: root ?remove or comment out.
#operator: root ?remove or comment out.
# trap decode to catch security attacks
#decode: root
# Person who should get root's mail
#root: marc
最后更新后不要忘记运行/usr/bin/newaliases,使改变生效。

9.阻止你的系统响应任何从外部/内部来的ping请求。
既然没有人能ping通你的机器并收到响应,你可以大大增强你的站点的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。

echo 1 >; /proc/sys/net/ipv4/icmp_echo_ignore_all

10. 不要显示出操作系统和版本信息。
如果你希望某个人远程登录到你的服务器时不要显示操作系统和版本信息,你能改变
/etc/inetd.conf中的一行象下面这样:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

加-h标志在最后使得telnet后台不要显示系统信息,而仅仅显示login:

11.The /etc/host.conf file
编辑host.conf文件(vi /etc/host.conf)且加下面的行:

# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We don't have machines with multiple IP addresses on the same card
(like virtual server,IP Aliasing).
multi off
# Check for IP address spoofing.
nospoof on
IP Spoofing: IP-Spoofing is a security exploit that works by tricking
computers in a trust relationship that you are someone that you really aren't.

12. The /etc/securetty file
该文件指定了允许root登录的tty设备,/etc/securetty被/bin/login程序读取,它的
格式是一行一个被允许的名字列表,如你可以编辑/etc/securetty且注释出下面的行。
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
-意味着root仅仅被允许在tty1终端登录。

13. 特别的帐号
禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,你有的帐号越多,就越容易受到攻击。
为删除你系统上的用户,用下面的命令:
[root@deep]# userdel username
为删除你系统上的组用户帐号,用下面的命令:
[root@deep]# groupdel username
在终端上打入下面的命令删掉下面的用户。
[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel mail
如果你不用sendmail服务器,procmail.mailx,就删除这个帐号。
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games
如果你不用X windows 服务器,就删掉这个帐号。
[root@deep]# userdel gopher
[root@deep]# userdel ftp
如果你不允许匿名FTP,就删掉这个用户帐号。
===
打入下面的命令删除组帐号
[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel mail
如不用Sendmail服务器,删除这个组帐号
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games
如你不用X Windows,删除这个组帐号
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers
如果你不用POP服务器,删除这个组帐号
[root@deep]# groupdel slipusers
====
用下面的命令加需要的用户帐号
[root@deep]# useradd username
用下面的命令改变用户口令
[root@deep]# passwd username

用chattr命令给下面的文件加上不可更改属性。
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

14. 阻止任何人su作为root.
如果你不想任何人能够su作为root,你能编辑/etc/pam.d/su加下面的行:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd

意味着仅仅isd组的用户可以su作为root.
然后,如果你希望用户admin能su作为root.就运行下面的命令。

[root@deep]# usermod -G10 admin

16. 资源限制
对你的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks)
如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
编辑/etc/security/limits.con加:

* hard core 0
* hard rss 5000
* hard nproc 20
你也必须编辑/etc/pam.d/login文件加/检查这一行的存在。

session required /lib/security/pam_limits.so

上面的命令禁止core files“core 0”,限制进程数为“nproc 50“,且限制内存使用
为5M“rss 5000”。

17. The /etc/lilo.conf file

a) Add: restricted
加这一行到每一个引导映像下面,就这表明如果你引导时用(linux single),则需要一个password.

b) Add: password=some_password
当与restricted联合用,且正常引导时,需要用户输入密码,你也要确保lilo.conf
文件不能被不属于root的用户可读,也免看到密码明文。下面是例子:
编辑/etc/lilo.conf加:
====
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
Default=linux
restricted ?add this line.
password=some_password ?add this line.
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only
[root@deep]# chmod 600 /etc/lilo.conf (不再能被其他用户可读).
[root@deep]# /sbin/lilo -v (更新lilo配置).
[root@deep]# chattr +i /etc/lilo.conf(阻止该文件被修改)

18. 禁止 Control-Alt-Delete 重启动机器命令

[root@deep]# vi /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
To
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
[root@deep]# /sbin/init q

19. 重新设置/etc/rc.d/init.d/目录下所有文件的许可权限
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
仅仅root可以读,写,执行上述所有script file.

20. The /etc/rc.d/rc.local file
默认地,当你login到linux server时,它告诉你linux版本名,内核版本名和服务器
主机名。它给了你太多的信息,如果你就希望得到提示login: ,编辑
/etc/rc.d/rc.local放#在下面的行前面:
--
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#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
--
然后,做下面的事情:
[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net
[root@deep]# touch /etc/issue
[root@deep]# touch /etc/issue.net

21. 被root拥有的程序的位。
移走那些被root拥有程序的s位标志,当然有些程序需要这个,用命令‘chmod a-s’完成这个。
注:前面带(*)号的那些程序一般不需要拥有s位标志。

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls –lg {} \;
-rwsr-xr-x 1 root root 33120 Mar 21 1999 /usr/bin/at
*-rwsr-xr-x 1 root root 30560 Apr 15 20:03 /usr/bin/chage
*-rwsr-xr-x 1 root root 29492 Apr 15 20:03 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 3208 Mar 22 1999 /usr/bin/disable-paste
-rwxr-sr-x 1 root man 32320 Apr 9 1999 /usr/bin/man
-r-s--x--x 1 root root 10704 Apr 14 17:21 /usr/bin/passwd
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/suidperl
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root mail 11432 Apr 6 1999 /usr/bin/lockfile
-rwsr-sr-x 1 root mail 64468 Apr 6 1999 /usr/bin/procmail
-rwsr-xr-x 1 root root 21848 Aug 27 11:06 /usr/bin/crontab
-rwxr-sr-x 1 root slocate 15032 Apr 19 14:55 /usr/bin/slocate
*-r-xr-sr-x 1 root tty 6212 Apr 17 11:29 /usr/bin/wall
*-rws--x--x 1 root root 14088 Apr 17 12:57 /usr/bin/chfn
*-rws--x--x 1 root root 13800 Apr 17 12:57 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Apr 17 12:57 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8392 Apr 17 12:57 /usr/bin/write
-rwsr-x--- 1 root squid 14076 Oct 7 14:48 /usr/lib/squid/pinger
-rwxr-sr-x 1 root utmp 15587 Jun 9 09:30 /usr/sbin/utempter
*-rwsr-xr-x 1 root root 5736 Apr 19 15:39 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 6 09:35 /usr/sbin/traceroute
-rwsr-sr-x 1 root root 299364 Apr 19 16:38 /usr/sbin/sendmail
-rwsr-xr-x 1 root root 34131 Apr 16 18:49 /usr/libexec/pt_chown
-rwsr-xr-x 1 root root 13208 Apr 13 14:58 /bin/su
*-rwsr-xr-x 1 root root 52788 Apr 17 15:16 /bin/mount
*-rwsr-xr-x 1 root root 26508 Apr 17 20:26 /bin/umount
*-rwsr-xr-x 1 root root 17652 Jul 6 09:33 /bin/ping
-rwsr-xr-x 1 root root 20164 Apr 17 12:57 /bin/login
*-rwxr-sr-x 1 root root 3860 Apr 19 15:39 /sbin/netreport
-r-sr-xr-x 1 root root 46472 Apr 17 16:26 /sbin/pwdb_chkpwd
[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport

你可以用下面的命令查找所有带s位标志的程序:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
>; suid-sgid-results
把结果输出到文件suid-sgid-results中。

为了查找所有可写的文件和目录,用下面的命令:
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; >; ww-files-results
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; >; ww-directories-results

用下面的命令查找没有拥有者的文件:
[root@deep]# find / -nouser -o -nogroup >; unowed-results

用下面的命令查找所有的.rhosts文件:
[root@deep]# find /home -name .rhosts >; rhost-results


建议替换的常见网络服务应用程序

WuFTPD
WuFTD从1994年就开始就不断地出现安全漏洞,黑客很容易就可以获得远程root访问(Remote Root Access)的权限,而且很多安全漏洞甚至不需要在FTP服务器上有一个有效的帐号。最近,WuFTP也是频频出现安全漏洞。
它的最好的替代程序是ProFTPD。ProFTPD很容易配置,在多数情况下速度也比较快,而且它的源代码也比较干净(缓冲溢出的错误比较少)。有许多重要的站点使用ProFTPD。sourceforge.net就是一个很好的例子(这个站点共有3,000个开放源代码的项目,其负荷并不小啊!)。一些Linux的发行商在它们的主FTP站点上使用的也是ProFTPD,只有两个主要Linux的发行商(SuSE和Caldera)使用WuFTPD。
ProFTPD的另一个优点就是既可以从inetd运行又可以作为单独的daemon运行。这样就可以很容易解决inetd带来的一些问题,如:拒绝服务的攻击(denial of service attack),等等。系统越简单,就越容易保证系统的安全。WuFTPD要么重新审核一遍全部的源代码(非常困难),要么完全重写一遍代码,否则WuFTPD必然要被ProFTPD代替。

Telnet
Telnet是非常非常不安全的,它用明文来传送密码。它的安全的替代程序是OpenSSH。
OpenSSH在Linux上已经非常成熟和稳定了,而且在Windows平台上也有很多免费的客户端软件。Linux的发行商应该采用OpenBSD的策略:安装OpenSSH并把它设置为默认的,安装Telnet但是不把它设置成默认的。对于不在美国的Linux发行商,很容易就可以在Linux的发行版中加上OpenSSH。美国的Linux发行商就要想一些别的办法了(例如:Red Hat在德国的FTP服务器上(ftp.redhat.de)就有最新的OpenSSH的rpm软件包)。
Telnet是无可救药的程序。要保证系统的安全必须用OpenSSH这样的软件来替代它。

Sendmail
最近这些年,Sendmail的安全性已经提高很多了(以前它通常是黑客重点攻击的程序)。然而,Sendmail还是有一个很严重的问题。一旦出现了安全漏洞(例如:最近出现的Linux内核错误),Sendmail就是被黑客重点攻击的程序,因为Sendmail是以root权限运行而且代码很庞大容易出问题。
几乎所有的Linux发行商都把Sendmail作为默认的配置,只有少数几个把Postfix或Qmail作为可选的软件包。但是,很少有Linux的发行商在自己的邮件服务器上使用Sendmail。SuSE和Red Hat都使用基于Qmail的系统。
Sendmail并不一定会被别的程序完全替代。但是它的两个替代程序Qmail和Postfix都比它安全、速度快,而且特别是Postfix比它容易配置和维护。

su
su是用来改变当前用户的ID,转换成别的用户。你可以以普通用户登录,当需要以root身份做一些事的时候,只要执行“su”命令,然后输入root的密码。su本身是没有问题的,但是它会让人养成不好的习惯。如果一个系统有多个管理员,必须都给他们root的口令。
su的一个替代程序是sudo。Red Hat 6.2中包含这个软件。sudo允许你设置哪个用户哪个组可以以root身份执行哪些程序。你还可以根据用户登录的位置对他们加以限制(如果有人“破”了一个用户的口令,并用这个帐号从远程计算机登录,你可以限制他使用sudo)。Debian也有一个类似的程序叫super,与sudo比较各有优缺点。
让用户养成良好的习惯。使用root帐号并让多个人知道root的密码并不是一个好的习惯。这就是www.apache.org被入侵的原因,因为它有多个系统管理员他们都有root的特权。一个乱成一团的系统是很容易被入侵的。

named
大部分Linux的发行商都解决了这个问题。named以前是以root运行的,因此当named出现新的漏洞的时候,很容易就可以入侵一些很重要的计算机并获得root权限。现在只要用命令行的一些参数就能让named以非root的用户运行。而且,现在绝大多数Linux的发行商都让named以普通用户的权限运行。命令格式通常为:named -u ; -g ;

INN
在INN的文档中已经明确地指出:“禁止这项功能(verifycancels),这项功能是没有用的而且将被除掉”。大约在一个月前,一个黑客发布了当“verifycancels”生效的时候入侵INN的方法。Red Hat是把“verifycancels”设为有效的。任何setuid/setgid的程序或网络服务程序都要正确地安装并且进行检查以保证尽量没有安全漏洞。





安全守则

1. 废除系统所有默认的帐号和密码。
2. 在用户合法性得到验证前不要显示公司题头、在线帮助以及其它信息。
3. 废除“黑客”可以攻击系统的网络服务。
4. 使用6到8位的字母数字式密码。
5. 限制用户尝试登录到系统的次数。
6. 记录违反安全性的情况并对安全记录进行复查。
7. 对于重要信息,上网传输前要先进行加密。
8. 重视专家提出的建议,安装他们推荐的系统“补丁”。
9. 限制不需密码即可访问的主机文件。
10.修改网络配置文件,以便将来自外部的TCP连接限制到最少数量的端口。不允许诸如tftp,sunrpc,printer,rlogin或rexec之类的协议。
11.用upas代替sendmail。sendmail有太多已知漏洞,很难修补完全。
12.去掉对操作并非至关重要又极少使用的程序。
13.使用chmod将所有系统目录变更为711模式。这样,攻击者们将无法看到它们当中有什么东西,而用户仍可执行。
14.只要可能,就将磁盘安装为只读模式。其实,仅有少数目录需读写状态。
15.将系统软件升级为最新版本。老版本可能已被研究并被成功攻击,最新版本一般包括了这些问题的补救。

2008年11月5日星期三

系统安全防护之UNIX下入侵检测方法

摘要:因为UNIX系统经常承当着关键任务,所以它经常是入侵者攻击的首选目标。于是检测入侵、保护系统安全是管理员的最为重要的任务之一。那么,在没有其它工具帮助的情况下,如何去判断系统当前的安全性?如何去发现入侵呢?下面给大家介绍一些常用到的检查方法 .


因为UNIX系统经常承当着关键任务,所以它经常是入侵者攻击的首选目标。于是检测入侵、保护系统安全是管理员的最为重要的任务之一。那么,在没有其它工具帮助的情况下,如何去判断系统当前的安全性?如何去发现入侵呢?下面给大家介绍一些常用到的检查方法
以LINUX和solaris为例:

1、检查系统密码文件
首先从明显的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。
输入命令
awk –F:’$3==0 {print $1}’ /etc/passwd来检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。顺便再检查一下系统里有没有空口令帐户:
awk –F: ‘length($2)==0 {print $1}’ /etc/shadow

2、查看一下进程,看看有没有奇怪的进程
重点查看进程:ps –aef grep inetd。Inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果你看到输出了一个类似inetd –s /tmp/.xxx之类的进程,着重看inetd –s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中也仅仅是inetd –s,同样没有用inetd去启动某个特定的文件;如果你使用ps命令看到inetd启动了某个文件,而你自己又没有用inetd启动这个文件,那就说明已经有人入侵了你的系统,并且以root权限起了一个简单的后门。
输入ps –aef 查看输出信息,尤其注意有没有以./xxx开头的进程。一旦发现异样的进程,经检查为入侵者留下的后门程序,立即运行kill –9 pid 开杀死该进程,然后再运行ps –aef查看该进程是否被杀死;一旦此类进程出现杀死以后又重新启动的现象,则证明系统被人放置了自动启动程序的脚本。这个时候要进行仔细查找:find / -name 程序名 –print,假设系统真的被入侵者放置了后门,根据找到的程序所在的目录,UNIX下隐藏进程有的时候通过替换ps文件来做,检测这种方法涉及到检查文件完整性,一会我们再讨论这种方法。接下来根据找到入侵者在服务器上的文件目录,一步一步进行追踪。

3、检查系统守护进程
检查/etc/inetd.conf文件,输入:
cat /etc/inetd.conf grep –v “^#”输出的信息就是你这台机器所开启的远程服务。一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。

4、检查网络连接和监听端口
输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。
输入netstat –rn,查看本机的路由、网关设置是否正确。
输入 ifconfig –a,查看网卡设置。

5、检查系统日志
命令last more查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现syslog被非法动过,那说明有重大的入侵事件。
在linux下输入ls –al /var/log
在solaris下输入 ls –al /var/adm
检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。

6、检查系统中的core文件
通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说它并不能100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core –exec ls –l {} \; 依据core所在的目录、查询core文件来判断是否有入侵行为。

7、检查系统文件完整性
检查文件的完整性有多种方法,通常我们通过输入ls –l 文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm –V `rpm –qf 文件名` 来查询,查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man rpm来获得更多的格式。
UNIX系统中,/bin/login是被入侵者经常替换作为后门的文件,接下来谈一下login后门 :
UNIX里,Login程序通常用来对telnet来的用户进行口令验证。入侵者获取login的源代码并修改,使它在比较输入口令与存储口令时先检查后门口令。如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入:这将允许入侵者进入任何账号,甚至是root目录。由于后门口令是在用户真实登录并被日志记录到utmp和wtmP前产生的一个访问,所以入侵者可以登录获取shell却不会暴露该账号。管理员注意到这种后门后,使用”strings”命令搜索login程序以寻找文本信息。
许多情况下后门口令会原形毕露。入侵者又会开始加密或者更改隐藏口令,使strings命令失效。所以许多管理员利用MD5校验和检测这种后门。UNIX系统中有md5sum命令,输入md5sum 文件名检查该文件的md5签名。它的使用格式如下:
md5sum –b 使用二进制方式阅读文件;
md5sum –c 逆向检查MD5签名;
md5sum –t 使用文本方式阅读文件。
在前面提到过守护进程,对于守护进程配置文件inetd.conf中没有被注释掉的行要进行仔细比较,举个简单的例子,如果你开放了telnet服务,守护进程配置文件中就会有一句:
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
可以看到它所使用的文件是 /usr/sbin/in.telnetd,检查该文件的完整性,入侵者往往通过替换守护进程中允许的服务文件来为自己创建一个后门。
LINUX系统中的/etc/crontab也是经常被入侵者利用的一个文件,检查该文件的完整性,可以直接cat /etc/crontab,仔细阅读该文件有没有被入侵者利用来做其他的事情。
不替换login等文件而直接使用进程来启动后门的方法有一个缺陷,即系统一旦重新启动,这个进程就被杀死了,所以得让这个后门在系统启动的时候也启动起来。通常通过检查/etc/rc.d下的文件来查看系统启动的时候是不是带有后门程序。说到这里,另外提一下,如果在某一目录下发现有属性为这样的文件:-rwsr-xr-x 1 root root xxx .sh,这个表明任何用户进来以后运行这个文件都可以获得一个rootshell,这就是setuid文件。运行 find –perm 4000 –print对此类文件进行全局查找,然后删除这样的文件。

8、检查内核级后门
如果你的系统被人安装了这种后门,通常都是比较麻烦的,首先,检查系统加载的模块,在LINUX系统下使用lsmod命令,在solaris系统下使用modinfo命令来查看。这里需要说明的是,一般默认安装的LINUX加载的模块都比较少,通常就是网卡的驱动;而solaris下就很多,没别的办法,只有一条一条地去分析。对内核进行加固后,应禁止插入或删除模块,从而保护系统的安全,否则入侵者将有可能再次对系统调用进行替换。我们可以通过替换create_module()和delete_module()来达到上述目的。另外,对这个内核进行加固模块时应尽早进行,以防系统调用已经被入侵者替换。如果系统被加载了后门模块,但是在模块列表/proc/module里又看不到它们。出现这种情况,需要仔细查找/proc目录,根据查找到的文件和经验来判断被隐藏和伪装的进程,当然目录也可能不是隐藏的。
手工的入侵检测行为对于系统安全来说只是治标而不治本,多半还是依靠管理员的技巧和经验来增强系统的安全性,没有,也不可能形成真正的安全体系,虽然好过没有,可以检测和追踪到某些入侵行为,但如果碰上同样精通系统的入侵者就很难抓住踪迹了。搭建真正的安全体系需要配合使用入侵检测系统,一个优秀的入侵检测系统辅以系统管理员的技巧和经验可以形成真正的安全体系,有效判断和切断入侵行为,真正保护主机、资料。

http://blog.chinaunix.net/u2/69926/showart.php?id=702718
How to Check Loaded Modules [如何检查装入的模块]

2008年11月4日星期二

用Flood进行WEB服务器测试

当你设置好服务器投入使用后,你最关心的事莫过于服务器的性能了。你可以用一些手动的方法进行测试,但手动方法有很多局限性。


  先不论手工测试方法所投入的时间和精力问题,用手工方法测试的一大不足就是它不容易揭示出你的站点的真正问题所在,是服务器设置的问题还是因为一些动态组件又或是网络基础设施造成的问题?


  幸运的Apache HTTP工程包含了一个名为HTTPD-Test的子工程,正如这个名称所揭示的,这是一个Apache的通用测试工具包,这个包里包含了大量的不同工具,而本文将主要介绍其中一个名为洪水(Flood)的工具,它之所以如此命名,是因为它利用向服务器发出洪水般的大量请求测试服务器的响应时间。


  洪水使用一个XML文件来进行必要的测试设置,包括测试中使用的URL和POST数据和准备测试的服务器组,然后Flood开始测量以下一系统操作的时间:


  打开一个到服务器的socket

  
向socket写入对服务器的请求

  
读出服务器的响应

  
关闭socket


  当测试结束,管理员就可以了解到是否存在Apache服务器(或其它HTTP服务器)的设置问题,服务器的实际负荷,硬件的性能表现和是否存在着网络基础设置瓶颈。


  安装Flood


  你可以在Apache网站下载httpd-test和apr/apr-util软件包,后者是当从Apache的CVS服务器上直接build时所需要的。你必需先进行登录(密码是"anoncvs")


  $ cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co httpd-test/flood

  $ cd httpd-test/flood

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr-util


  如果你取得了源码,你可以用下面的命令安装


  $ buildconf

  $ configure

  $ make all


  现在,安装完成了。


  设置Flood


  Flood通过一个XML格式的设置文件来定义测试中使用的各种参数,我们不妨通过一个形象的比喻也说明一下Flood的工作过程和需要设置的各个方面。首先,Flood使用一个模型(profile)来定义一组给定的URL如何被访问,具体的访问由一个或多个农夫(farmer)来进行,而这些农夫又属于一个或多个农场(farm),我们来看一下下面这个示意图:


  如图所示,现在我们使用一个农场,这个农场有两组农夫,其中农夫组Joe使用访问模型A与一个包含五个地址的URL列表,农夫组B使用访问模型B与一个包含三个URL的地址列表,这些家夫直接向WEB服务器请求列表中的地址。Flood使用线程来创建各个农夫,然后比较各个农夫收集到的数据并存入一个单独的文件以便之后做进一步的处理。


  XML文件包括了这个测试需要定义的四个方面:URL列表,访问模型,农夫和农场。


  URL列表也即一组即将被访问的地址的列表,这些URL地址可以被简单的引用进一步定义特定的请求方法(GET,POST,HEAD)。


  访问模型定义测试使用哪一个地址列表,它们如何被访问,使用哪一种Socket,收集的信息如何被报告。


  农夫负责实际的请求过程,对农夫唯一的可设置选项是使用哪一个访问模型和对一个访问模型的调用次数。每个农夫独立的执行自己的访问模型,但一个访问模型可以执行多次,因此最后的请求过程可能是这样:地址一、地址二、地址一、地址二、……。


  对家场的定义涉及到创建农夫的数目和时间,通过增加一个家场创建农夫的数目,可以增加并发请求的数目。并通一些附加的设置,你可以设置一些初始数目的农夫,然后每隔特定的时间增加一定的农夫数量。例如,你可以开始创建两个农夫,然后每5秒钟增加一个农夫,直到农夫数目达到20时停止增加。这可以在一个给定的期间形成一个最大20的并发访问升级过程,然后又逐步将并发请求数降到0。另外也可以模拟这种访问情况,一定数目的访问者长时期的访问一系列页面,并操持最大并发请求数在5-6之间。


  注意:到写这篇文章的时候为止,目前的Flood仅支持一个农场,而且它的名子必须是"Bingo",不过,通过为一个农场定义多个农夫,你可以取得同样的基本效果。


  通过调节农夫,农场和URL列表的参数,你可以控制总请求数,并发请求数,测试时间(基于URL列表,重复次数和农夫的数量可以决定这一点),以及这些请求在整个测试期间的分布,这就允许你针对不同的条件订制你的测试。


  在使用Flood进行测试设置时你应该记住的三个基本点是:


  地址列表定义了农夫们将访问的地址

  
每个农夫的重复数目定义了一个用户访问你的站点的次数。

  
一个农场的农夫数目定义了并发访问用户的数目。


  在Flood发行包里的examples目录下有一个样例设置文件,round-robin.xml可能是一个最适合初学者学习的例子,不过本文并不准备就编辑此XML文件的规则或处理产生的数据文件做进一步的解说。


  这里,我们主要想讲一下如何针对不同类型的WEB服务器来调整测试的参数。为了便于理解后面的内容,这里我们先看一下使用examples目录下的analyze-relative测试脚本得到的一个结果。在这个例子中,测试对象是一台内部服务器。


  Slowest pages on average (worst 5):

  Average times (sec)

  connect write   read   
close   hits   URL

  0.0022  0.0034  0.0268 
0.0280  100    http://test.mcslp.pri/java.html

  0.0020  0.0028  0.0183 
0.0190  700    http://www.mcslp.pri/

  0.0019  0.0033  0.0109 
0.0120  100    http://test.mcslp.pri/random.html

  0.0022  0.0031  0.0089 
0.0107  100    http://test.mcslp.pri/testr.html

  0.0019  0.0029  0.0087 
0.0096  100    http://test.mcslp.pri/index.html

  Requests: 1200 Time: 0.14 Req/Sec: 9454.08


  在这里你可以看到测试中进行连接(connect),请求(write/request),回应(read /response),关闭连接(close)的平均时间。你也可以对服务器每称处理的请求数目有个基本的印象。


  对于新闻类站点的测试


  对于如New York Times、Slashdot之类的新闻站点以及一些BLOG之类,它们都有一个主要的首页,首页上有着众多到栏目页和内容页的连接,对某条信息感兴趣的读者可以点进去仔细阅读。


  通常情况下,这类站点的首页访问量相对固定而对于其它页面,访问量的变化就会更大一些。如果它推出了RSS/RDF订阅服务,那么就会出现一定量的直接到内容页的流量而不经过首页。大部分的此类站点都使用了某种内容的动态化技术,而Flood是测试这类动态站点的一个不错方法,特别你可以将之与一些静态站的响应相对比。


  你可以用以下的参数设置模拟对一个新闻类型的网站的访问:


Farmer Set A



Farmer Set B



Farmer Set C



URL List



Homepage Only



Homepage +3 stories



3 story pages



Repeat Count



1



3



3



Count



100



20



20



Start Count



5



5



5



Start Delay



1



5



5



Notes



Home page only



Homepage+Stories



Stories only (RSS)




  测试在线商店站点


  在线商店,在线商品目录或其它一些更具交互性的网站则有不同的使用模型。虽然仍会有一部分人到达你的首页,一些人会直接进入你站内的某一个页面,大多数用户会在你的站里找来找去,他们可能会在一个产品页上浏览大量的产品,进行一些搜索或者点击进入一些相关的产品页面。


  因此,你应该用更大数量的地址列表测试这类站点,更大的重复次数(以模拟大量的用户)和相对新闻类站点比较低的并发访问数目:


Farmer Set



URL List



10-15 pages



Repeat Count



5



Count



50



Start Count



5



Start Delay



5




  测试 "Slashdot" 效应


  有时,你必须测试你的系统能否应付某个特定时刻大量用户同时访问你的网站的情况。很多网站已经遇到过这个问题,一次重大事件中对于Slashdot网站的几个页面的引用就引发了对这个页面的巨量并发请求。


  典型的情况下这些请求仅针对一个特殊的页面,我们可以通过在Flood中创建成百上千的家夫来并发请求服务器上的特定页面来模拟这种情况,通过设置高重复率和延迟系统来模拟一定时间内大量用户的连续访问。


Farmer Set



URL List



1 page



Repeat Count



50



Count



250



Start Count



100



Start Delay



1




  测试技巧


  为了让以上各类测试都工作得很好,你应该记住以下几点:


  最重要的是,不要直接在WEB服务器上用Flood进行测试,如果你这样做你仅仅是在测试一台机器打开一个网络连接与自己通讯的能力,一定要在另一台机器上进行测试。

  
要对自己机器的一些技术限制有所了解,这包括你机器容许的最大线程数和最大网络连接数,如果你试图创建超过这个限制的农夫将会带来让人难以理解的测试结果。

  
Flood是一个客户端解决方案,因此对于在多台机器上进行测试没有任何限制。事实上我们推荐你这样做,因为这是一个在想进行饱和性测试时避免你的客户机系统的技术限制的好方法。

  
Flood测试由于是在客户机上运行,它的表现也要依赖于客户的性能,如果客户机系统处于繁忙的状态,Flood进程会与其它客户进程一样被阻塞,因此,最好使用一台专用的客户机进行测试,如果客户机上还运行着其它任务,在开始测试之前最好关掉它们。

 原文地址 http://www.bsdlover.cn/html/12/n-1012.html

2008年10月26日星期日

如何将fedora code 1整合一张光盘(转)

用了两天时间研究如何将fedora code 1整合一张光盘,结果昨天竟然发现做了2天无用功。白吃那么多饭了。
问题就出在comps.xml 和hdlist上了。

恩,啥问题呢?comps.xml只是一种解释列表,并没有太大意义。改不改两可。

因为看网上文章说要改comps.xml,然后重构hdlist,我就按照网上的步骤走,怎么都过不去,看着comps.xml那么多东西就烦。

后来居然只用一个命令就解决了我2天的困扰。

具体怎么做呢?(以下未说明均在windows下操作)


1,因不同需要,安装一遍linux,然后将/root下的install.log提出来看里边的文件列表,前边的都是已安装的,也就是你需要做单盘linux安装盘需要的那些文件。后边有列出未安装的列表。


2,根据log显示将3张光盘中需要部分提取,放到一个目录下。准备进行分解iso,哈哈


3,在安装好的linux里增加一个目录

#mkdir /home/linux_cdrom
然后用将第一张光盘放进光驱,用scp软件将整张光盘拷贝到/home/linux_cdrom里。然后将/Fedora/RPMS/目录下所有包删除,将你拷贝下来提出的那些有用的rpm包拷贝进去。


4,在这个linux系统上安装anacronda-runtime这个rpm包,一般fedora1以后的都有,具体那张盘上自己找。然后执行命令
#/usr/lib/anaconda-runtime/genhdlist --productpath Fedora /home/linux_cdrom/
这步是要重建hdlist和hdlist2文件。


5,用scp软件将hdlist和hdlist2拷出来,用winiso打开fedora1的第一张盘,将/Fedora/base/目录下的hdlist和hdlist2删掉,将刚才scp过来的那个新的hdlist和hdlist2放进去。再把/Fedora/RPMS/目录下所有文件删除,将刚才提出的那些rpm包放进去,保存。


6,这样就生成了一个新的单cd linux安装盘了。

----亡灵的内心世界

2008年10月25日星期六

一个HA结构的防火墙+二层交换机结构设定(工作笔记)

为了安全问题,VLAN把WEB与SOCKET层和DB层都隔开了。访问DB的话必须要走10.100.100.0段,而WEB段全部是192.168.100.0段,防火墙本身地址是92,转发地址为91。VPN直接连进192.168.100.0,但是WEB层和SOCKET层都是双网卡,另一块网卡地址都是10.100.100.0段的,在WEB、SOCKET层的机器只为eth0设上192.168.100.0段的网关,另一个eth1不设网关。于是内网通讯没问题。但是访问DB的话,除了VPN以外,外网不易进入。

2008年10月20日星期一

关于Lvs管理包和Cluster的关系

做Lvs的时候,如果勾选了Cluster。就不用再装以下的包了。http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm

2008年10月19日星期日

Jmeter压力测试工具介绍

  Apache JMeter 是100%的Java桌面应用程序。用于对软件做压力测试(例如Web应用)。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。
  另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
  特点
  在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录IE/NETSCAPE的HTTP请求,也可以记录apache等WebServer的log文件来重现HTTP流量。当这些HTTP客户端请求被记录以后,测试运行时可以方便的设置重复次数和并发度(线程数)来产生巨大的流量。JMeter还提供可视化组件以及报表工具把量服务器在不同压力下的性能展现出来。
  相比其他HTTP测试工具,JMeter最主要的特点在于扩展性强。JMeter能够自动扫描其lib/ext子目录下.jar文件中的插件,并且将其装载到内存,让用户通过不同的菜单调用。
  测试结果字段的意义
  1、Label: 定义的HTTP请求名称
  2、Samples: 表示这次测试中一共发出了多少个请求
  3、Average: 访问页面的平均响应时间
  4、Min: 访问页面的最小响应时间
  5、Max: 访问页面的最大响应时间
  6、Error%: 错误的请求的数量/请求的总数
  7、Throughput:每秒完成的请求数
  8、KB/Sec: 每秒从服务器端接收到的数据量
  历史
  Apache Software Foundation 的 Stefano Mazzocchi 是JMeter的最初开发人员。他编写它主要用于测试Apache JServ的性能(一个后来被Apache Tomcat项目替代的项目)。我们重新设计了JMeter,增强了它的GUI和添加了功能测试支持。
  远景
  我们希望看到随着开发人员利用插件架构的优势,JMeter的能力能够迅速扩展。将来开发的主要目标是使得JMeter尽可能地变成一个有用的衰退测试工具,而不损失JMeter地压力测试能力。

2008年10月18日星期六

包管理命令yum

如果您使用过debian系列操作系统,对apt-get命令一定不会陌生,同样地,Fedora系列为我们提供了与apt-get类似的包管理命令yum,它可以从一个软件库里调出用户指定的软件,然后进行安装,并且也具备卸载功能。

以下是对yum的简单说明:如果是第一次使用yum命令,请不用担心,现在将介绍yum的命令行

1、搜索应用程序

#yum search 程序名

可以搜索所有的启动仓库,告诉用户从哪里可以得到需要的软件包。



2、了解包安装信息

#yum info 程序名



3、安装应用程序

#yum install 程序名



4、列出rpm清单

#yum list extras



5、删除rpm包

#yum remove 程序名



6、系统升级

#yum update



7、 查看是否有升级

#yum check-update



8、列出最近升级的RPM包

#yum -qa--last |tac



9、本地安装

#yum localinstall RMP包



10、查看yum的帮助文件

#man yum

2008年10月14日星期二

Linux邮件sendmail+openwebmail配置方案

【IT168 服务器学院】纲要:

  1. 关于Linux邮件服务

  2.启动安装sendmail

  3.openwebmail的安装

  4.企业实战方案

  5。通过Web收发邮件效果演示

  一,关于Linux邮件服务

  sendmail作为一个优秀的MTA,一直是UNXI系统中缺省的邮件服务器。因为sendmail只是一个邮件代理传输软件,并不附带常见的WEB接收发送的功能,所以我们可以利用第三方软件实现,如下安装openwebmail,也可以,利用outlook等软件来收发邮件。

  二,启动安装sendmail

  # rpm –ivv sendmail* (在第一张光盘,和第三张光盘上。)

  #/etc/init.d/sendmail start 启动服务

  1. 添加邮件虚拟主机

  #cd /etc/mail

  # vi local-host-names ,在里面添加邮件虚拟主机

  linuxhero.com

  2.打开SMTP的外部连接

  #vi /etc/mail/sendmail.cf

  将O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA,改为如下:

  O DaemonPortOptions=Port=smtp,Addr=192.168.0.230, Name=MTA

  这样是为了在192.168.0.230端口上监听请求

  3.打开SMTP发信认证

  #vi /etc/mail/sendmail.mc

  dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

  将其改为如下:

  TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

  重启sendmail

  service sendmail restart

  4.打开系统POP3功能

  #vi /etc/xinetd.d/ipop3

  将disable = yes, 将yes改为no

  #service xinetd restart 重新启动xinetd进程

  添加虚拟用户

  #useradd –s /sbin/nologin nestseek

  #passwd netseek

  #vi /etc/mail/virtusertable

  webmaster@linuxhero.com linuxhero_com

  cnseek@linuxhero.com netseek

  5.运行makemap命令为virtusertable重新建立数据库映谢。

  #cd /etc/mail

  #makemap hash virtusertable.db < virtusertable

  三.OpenWebmail的安装:

  安装支持软件

  # rpm -Uvh perl-CGI-2.81-88.i386.rpm

  # rpm -ivh perl-Text-Iconv-1.2-RH80.i386.rpm

  # rpm -ivh perl-suidperl-5.8.0-88.i386.rpm

  安装OpenWebmail:

  #rpm -ivh openwebmail-2.51-1.i386.rpm

  warning: openwebmail-2.51-1.i386.rpm: V3 DSA signature: NOKEY, key ID cfb164d8

  Preparing... ########################################### [100%]

  1:openwebmail ########################################### [100%]

  安装完后,会在/var/www/cgi-bin目录下创建一个openwebmail(该目录保存系统运行是需要的数程序),在/var/www/data目录下也创建了一个openWebmail的目录,该目录保存了一些页面。

  OpenWemail的设置

  # cd /var/www/cgi-bin/openwebmail/etc

  #vi defaults/dbm.conf

  将如下:

  dbm_ext .db

  dbmopen_ext none

  dbmopen_haslock no

  改成

  dbm_ext .db

  dbmopen_ext .db

  dbmopen_haslock yes

  保存退出。

  #cd .. 退到上一级目录

  #./openwebmail-tool.pl -–init

  出现如下信息:

  Base64.pm /usr/lib/perl5/5.8.0/i386-linux-thread-multi/MIME/Base64.pm

  Your MIME::Base64 module is too old (2.12),

  please update to 3.00 or later.

  ./openwebmail-tool.pl –init

  说我的Base64 module 版本太低,要下载更新3。0或以上的版本:

  我下载了一个新包:CGI.pm-3.05.tar.gz,进行安装.

  # tar -zxvf MIME-Base64-3.05.tar.gz

  # cd MIME-Base64-3.05

  #cat REDME 查看安装说明,按照里面的说明做

  [root@linuxhero CGI.pm-3.05]# perl Makefile.PL

  Checking if your kit is complete...

  Looks good

  Writing Makefile for CGI

  # make

  # make test 测试

  # make install

  安装完后,现在执行上面的操作:

  #cd /var/www/cgi-bin/openwebmail

  #./openwebmail-tool.pl –-init

  安装完成

  四,企业实战方案:

  要求:1,启用虚拟域名mail.linuxhero.com(DNS设置见“linux全能web服务器”)

  2.将linuxhero_com用户映射成为webmaster.

  3.通过web收发邮件测试

  配置Openwebmail的虚拟主机(mail.linuxhero.com)

  #vi /usr/local/httpd/conf/httpd.conf ,在里面添加如下:

  #mail.linuxhero.com

  

  ServerAdmin webmaster@linuxhero.com

  DocumentRoot /var/www/cgi-bin/openwebmail

  ServerName mail.linuxhero.com

  DirectoryIndex openwebmail.pl

  ErrorLog /home/linuxhero_com/logs/error_log

  CustomLog /home/linuxhero_com/logs/access_log common

  alias /data /var/www/data

  alias /cgi-bin /var/www/cgi-bin

  

  Options ExecCGI

  


  

  Options ExecCGI

  


  


  保存退出。

  五,通过web收发邮件效果演(略)

2008年10月13日星期一

关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

摘要:在服务器管理中,经常遇到DDOS攻击WWW服务器。对于Apache(httpd)服务器来说,防御DDOS是通过mod_evasive来实现的。本文将介绍mod_evasive模块的安装、配置;


目录



1、 mod_evasive 介绍;
2、 mod_evasive 的安装和配置;

2.1 mod_evasive 的下载地址;
2.2 mod_evasive 的安装;
2.3 mod_evasive 的配置;
2.4 对mod_evasive测试验证 ;

3、mod_evasive 的高级配置;
4、关于本文;
5、参考文档;
6、相关文档;





+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++



1、 mod_evasive 介绍;


mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用,可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙,所以是否这种组合效果有更好的效果,我没办法验证。

mod_evasive 的官方地址: http://www.zdziarski.com/projects/mod_evasive


2、 mod_evasive 的安装和配置;



2.1 mod_evasive 的下载地址;


mod_evasive_1.10.1.tar.gz


2.2 mod_evasive 的安装;


安装 mod_evasive 之前,你要用安装Apache(httpd)服务器软件包,还要安装httpd-devel或 apache-dev。在Slackware 12.0中,安装httpd软件即可;

对于Apache 1.x 请用下面的编译方法;


#/usr/sbin/apxs -iac mod_evasive.c

对于Apache 2.x 可以用下面的办法;


#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/sbin/apxs -i -a -c mod_evasive20.c

注:apxs 用于编译模块工具;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;

我们然后修改/etc/ld.so.conf 文件,把编译出来的动态模块的所在位置指定在 ld.so.conf中;比如我用的是Aapche 2.x ,编译完成后,模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中;那我们就要把 这个目录写入到ld.so.conf中。


#echo "/usr/lib/httpd/modules" >> /etc/ld.so.conf
#ldconfig

注: 具体要与你的系统环境为准,不要照搬照抄,如果你对Linux不太熟的话;


2.3 mod_evasive 的配置;


在编译安装完成后,会自动插入一行到Apache 配置文件中,对于Apache 2.x 版本中,应该在其配置文件中有类似下面的一行;


LoadModule evasive20_module lib/httpd/modules/mod_evasive20.so

对于Apache 1.x来说,也应该差不多,大体只是路径不同罢了;

然后我们再修改 Apache 的配置文件,配置文件名为httpd.conf;

在Apache v1.x 版本中,要加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


在Apache v2.x加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


如果您不知道把这些插入到哪,用下面的办法做也是可以的;

在/etc目录中创建一个文件,比如mod_evasive.conf;


#touch /etc/mod_evasive.conf

然后把根据自己的Apache版本来加入相应的内容;

接着我们再修改 httpd.conf ,在最后一行加入


Include /etc/mod_evasive.conf

修改完成后,我们要重启Apache服务器;

比如在Slackware 12.0中,Apache 2.x的重启,我们要用到


#/etc/rc.d/rc.httpd restart

在Redhat、Fededora、Debian、Ubuntu、CentOS中的Apache,可以用;


#/etc/init.d/httpd restart

#/etc/init.d/apache restart

大体上差不多是这样的……


2.4 对mod_evasive测试验证 ;


防DDOS的模块做好后,我们可以要验证,可以用Apache 自带的ab工具,系统默认安装在/usr/sbin目录中;比如;


#/usr/sbin/ab -n 1000 -c 50 http://www.google.com:80/

注:上面的例子的意思是,如果您的服务器是google的WEB服务器,我们要发送数据请求包,总共1000个,每次并发50个;

另外一个测试工具就是mod_evasive的解压包的目录中,有个test.pl ,你可以修改IP地址,然后用


#perl test.pl

是不是有效果,请根据 ab工具或 测试脚本出来的结果来查看;

因为我们编译mod_evasive时,用的是默认配置,所以日志被存放在/tmp目录中。如果有DDOS攻击,会在/tmp产生日志。日志的文件是以 dos-开头的;


3、mod_evasive 的高级配置;


如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);


#define DEFAULT_HASH_TBL_SIZE 3097ul // Default hash table size
#define DEFAULT_PAGE_COUNT 2 // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT 50 // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL 1 // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL 1 // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10 // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR "/tmp" // Default temp directory

比如我们改改其中的数字,根据英文很容易理解。比如修改日志存放目录,就把/tmp改成别的目录。如果您不知道放在哪好,还是用默认的吧;

如果您在这里更改了参数,不要忘记修改Apache 配置文件中关于mod_evasive 的参数;

如果您想加入一些其它的参数,请查阅源码包中的README,里面有详细说明,大多来说没太大的必要……

这个文件相当重要,如果您想更改某些设置,就要修改这个文件…… 


4、关于本文;


mod_evasive 还是有点用的,安装也不费力气。如果你需要的时候,会想到这个模块的 …… mod_evasive 是否有更高级的用法,也不是在这篇文章里能说的清楚的。如果不懂怎么办?请查看源码包中的README。

本文权当做软件说明 ……

北南 记之

From LinuxSir.Org


5、参考文档;


参考 mod_evasive 源码包中的README ……


6、相关文档;


《PHP加速器 eaccelerator 介绍》

2008年10月12日星期日

使用飞信为系统监控报警

一、飞信机器人软件
官网地址:http://www.it-adv.net/
需要Glibc2.4以上的版本;RHEL5默认安装的Glibc2.5,所不需要额外升级;


二、安装过程
下载包地址LINUX X86/32:支持库 最新程序fetion20080901004-linux.tar.gz
分别下载支持库和最新程序
1.安装支持库
[root@RHEL5 fetion]# tar -xvf lib_lin_32.tar.gz.tar
library_linux32/
library_linux32/libcrypto.so.0.9.8
library_linux32/libACE.so.5.4.7
library_linux32/libACE_SSL.so.5.4.7
library_linux32/libssl.so.0.9.8


[root@RHEL5 fetion]# cd library_linux32/
[root@RHEL5 library_linux32]# cp *so* /usr/lib


2.安装fetion
[root@RHEL5 fetion]# tar -xvf fetion20080901004-linux.tar.gz.tar
[root@RHEL5 fetion]# mv install/ /opt/fetion
3. 测试fetion是否可以正常使用
[root@RHEL5 opt]# cd /opt/fetion/
[root@RHEL5 fetion]# ldd fetion
linux-gate.so.1 => (0x00969000)
libACE.so.5.4.7 => /usr/lib/libACE.so.5.4.7 (0x00e35000)
libACE_SSL.so.5.4.7 => /usr/lib/libACE_SSL.so.5.4.7 (0x00110000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00393000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00791000)
libm.so.6 => /lib/libm.so.6 (0x00d55000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00940000)
libc.so.6 => /lib/libc.so.6 (0x00c0a000)
libdl.so.2 => /lib/libdl.so.2 (0x00d4f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d7e000)
librt.so.1 => /lib/librt.so.1 (0x00d97000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00510000)
libz.so.1 => /usr/lib/libz.so.1 (0x00da2000)
/lib/ld-linux.so.2 (0x00bec000)
所有的库文件都可以正常找到


[root@RHEL5 fetion]# ./fetion -h 查看帮助


三、实际测试
1.登录飞信默认是中文utf8的,如果linux系统不支持utf8会出现乱码:我使用english的方式来登录啦。
测试帐号:13713718888
密码:123456 (如果密码中含有特殊字符,请使用单引号)
./fetion -u 13713718888 -p 123456 -EN
登录后输入?获得帮助
****************************************************************
指令 指令说明
list 好友列表: list
sms 发送短信: sms 飞信号/手机号/编号 短信内容(换行请用\n代替)
chat 在线消息: chat 飞信号/手机号/编号 短信内容(换行请用\n代替)
status 在线状态: status online/busy/away/hidden [个性化信息]
add 添加好友: add 飞信号/手机号 申请信息 本地呢称
del 删除好友: del 飞信号/手机号/编号
invite 邀请好友: invite 手机号 您的姓名(邀请好友开通飞信)
autoaccept 自动接受: autoaccept on/off/status 自动接受加为好友申请
myinfo 修改资料: myinfo nickname/impresa 内容(呢称/心情)
help 帮助菜单: help/?
exit 退出系统: quit/exit
****************************************************************


sms 137******** "this is test message" # 这个就是我们需要的发送短信的指令啦!




2.脚本测试:
可以使用fetion的-b参数来实现p处理;
举例如下:
# vi p.sh
sms 137xxxxxxxx “msyqlserver is down”


保存后执行:
./fetion -u 137xxxxxxxx -p 123456 -b p.sh
就是一次发出报警信息。






3.配合监控脚本
#!/bin/bash
disk=$(df /dev/sda1 |grep /dev|awk '{print $5}'|tr -d "%")
if [ "$disk" -gt "80" ]; then
/opt/fetion/fetion -u 138xxxxxxxx -p 123456 -EN -b /opt/mon.sh >>/opt/fetion.log 2>&1
else :
fi




4.脚本实例
监控网站是否可以正常访问,有问题时报警,恢复后提示 (注:如果复制粘贴,运行出错,注意查一下是否是某些字符复制时格式改变了)


#!/bin/sh


#############################Var################################


errpath=/tmp/alert-err
okpath=/tmp/alert-ok
fetionum=13811012345
fetionpass=12345
admin=13811012345


############################function############################
scan ()
{
rm -rf /tmp/tmp.wget
(time -p wget --delete-after http://127.0.0.1) >/tmp/tmp.wget 2>&1


#setting realtime of run
realtime=$(cat /tmp/tmp.wget |grep "real"|awk '{ print $2}'|awk -F . '{print $1}')
#echo "Wget time is $realtime "


okstate=$(cat /tmp/tmp.wget |grep "OK"|awk '{print $5}')
#echo $okstate


}


alerterr ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $errpath
}




alertok ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $okpath
}
##############################Main###############################


while [ 1 ]
do
sleep 90
scan


if [ "$okstate" != "OK" ] ; then
if [ -f /tmp/err ];then
echo "`date +%Y/%m/%d-%T`wget not ok but has been alert"
#continue
else
echo "sms $admin `date +%Y/%m/%d-%T` wget is not OK " >$errpath
echo "exit" >>$errpath
alerterr
echo "`date +%Y/%m/%d-%T` -----------------------------------> wget is not OK "
touch /tmp/err
fi


else
if [ -f /tmp/err ];then
echo "sms $admin "`date +%Y/%m/%d-%T` Recover!! wget time is $realtime"" >$okpath
echo "exit" >>$okpath
alertok
rm /tmp/err
echo "`date +%Y/%m/%d-%T` ------------------------------------> Recover !!! wget time is $realtime"
#continue
else
echo "`date +%Y/%m/%d-%T` wget time is $realtime running ok"
fi




fi
done

使用htb进行流控

linux流控配置比较麻烦,一般都使用htb进行流控。



HTB 意味着是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的队列, CBQHTB都可以帮助你限制你的链路上的出口带宽;他们允许你把一条物理链路模拟成几条更慢的链路或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中你必须指定怎么分配物理链路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的。





htb本身的配置并不难,也就是配置htb
filter
是最复杂的,难点在于与iptables的结合。

通过webhtb可以进行图形化的配置。











webhtb最好的配置方式在于client,比较直观,
interface->class->client
很好的层次关系。



2008年10月11日星期六

mysql 主从复制读写分离实现

mysql 主从复制读写分离实现
作者:田逸


mysql主从复制
(一)安装mysql(主从服务器皆相同) 先创建用户 useradd mysql -s /sbin/nologin


tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client
注:配置过程指定数据文件的位置及另加的字符集.
make
make install
cp support-files/my-large.cnf /etc/my.cnf
cd /usr/local/mysql
chgrp -R mysql .
生成基本的数据库和表: /usr/local/mysql/bin/mysql_install_db --user=mysql
成功执行后察看数据目录/opt/data,看是否有文件或目录生成.
chown -R mysql:mysql /opt/data
记得给每个数据库设置root密码.
(二)修改配置文件
不同的地方就是server-id,主服务器配置文件不用修改,从服务器的配置文件server-id=10.其他的内容基本相同.
(三)启动服务
/usr/local/mysql/bin/mysqld_safe --user=mysql&
这个过程主辅服务器都相同.
(四)授权(在主服务器上进行)
GRANT REPLICATION SLAVE ON *.* to [email=]'rep1'@'192.168.8.100[/email] identified by 'mylqs';
(五)查询主数据库状态(主服务器上进行)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 235 | | |
+------------------+----------+--------------+------------------+
记下file及position的值,后面做从服务器操作的时候需要用.
(六)配置从服务器
mysql> change master to master_host='192.168.8.101', master_user='rep1', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=235;
正确执行后再执行:
mysql> start slave;
就启用了复制功能.这里我们运行一下 mysql> show slave status\G 来检查一下,一个正常的输出结果应该如下面的形式:
mysql> show slave status\G
*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.8.101

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 235

Relay_Log_File: -relay-bin.000009

Relay_Log_Pos: 235

Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 235

Relay_Log_Space: 235

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0


Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0
1 row in set (0.00 sec)

请注意:slave_IO进程及slave_SQL进程都必须正常运行,在状态输出重表现为: Slave_IO_Running: Yes 及Slave_SQL_Running: Yes 否则都是不正确的状态(如一个值Yes,另外一个是NO则不行).
(七)主数据库有数据的情况:
1、数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK;
2、察看主数据库的状态 mysql> show master status; 照第(五)步记录输出值。
3、把主服务器数据文件复制到从服务器,最好先用tar处理一下。
4、取消主数据库锁定 mysql> UNLOCK TABLES;
5、从服务器的操作。跟前面的步骤一样(略过)



mysql代理安装配置

一、安装mysql-proxy.需要按下列顺序安装其所依赖的包:
(一)安装LUA
tar zxvf lua-5.1.tar.gz
cd lua-5.1
用vi修改Makefile,使"INSTALL_TOP=/usr/local/lua",这样做的目的是为了是lua的所有文件都安装在目录/usr/local/lua/
make posix
make install

(二)安装 libevent
tar zxvf libevent-1.1a.tar.gz
cd libevent-1.1a
./configure --prefix=/usr/local/libevent
make
make install


(三)安装check
tar zxvf check-0.8.4.tar.gz
cd check-0.8.4
./configure
make
make install


(四)设置安装mysql-proxy所需的环境变量.把下面的内容追加到/etc/profile中
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
然后执行 source /etc/profile (安装完mysql-proxy不再需要这些变量,可以删除之)

(五)安装mysql(只安装mysql客户端即可)
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --without-server
make
make install

(六)安装mysql-proxy

tar zxvf mysql-proxy-0.5.0.tar.gz
cd mysql-proxy-0.5.0
./configure –prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
Make
Make install

二、主要的命令行选项
--help-all显示所有的帮助选项
--admin-address=host:port 管理主机及端口,默认是4041
--proxy-address=host:port 代理服务器的监听地址及端口,默认4040
--proxy-read-only-address=host:port 只读连接时,代理服务器的监听地址及端口。默认4042
--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。
--proxy-lua-script=file
指定lua脚本的名称

三、
使用方法
2个mysql服务器的情形
mysql-proxy \




--proxy-backend-addresses=mysql_ip1:3306 \



--proxy-backend-addresses=mysql_ip2:3306

3个服务器的情形:一个主服务器,负责写入;2个从服务器,负责查询。
mysql-proxy --proxy-backend-addresses= :3306\

--proxy-read-only-address=:3306 \

--proxy-read-only-address=:3306


四、mysql-proxy启动
编写脚本/usr/local/bin/mysql-proxy.sh其内容如下:
#!/bin/bash
LUA_PATH="/usr/local/mysql-proxy/share/mysql-proxy/?.lua" mysql-proxy --proxy-read-only-backend-addresses=192.168.1.38:3306 --proxy-
backend-addresses=192.168.1.33:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &
chmod 755 /usr/local/bin/mysql-proxy.sh; 执行命令/usr/local/bin/mysql-proxy.sh启动服务


配置验证
1、主从复制测试:在主数据库服务器上创建库和表,然后再插入记录,再登陆到从服务器,看是否也建立相一致的库和表以及记录。
mysql> create database first_db;
Query OK, 1 row affected (0.01 sec)
在主数据库服务器创建库first_db

mysql> create table first_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
在主数据库服务器创建表first_db

mysql> insert into first_tb values (001,'myself');
Query OK, 1 row affected (0.00 sec)
在主数据服务器的表first_db中插入记录


现在转到从数据库服务器,看是否同步了上面主数据库的数据
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| first_db
|
| mysql
|
| test
|
+--------------------+
4 rows in set (0.01 sec)
数据库自动生成了

mysql> use first_db;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_first_db |
+--------------------+
| first_tb |
+--------------------+
1 row in set (0.00 sec)
表也自动生成了

mysql> select * from first_tb;
+------+--------+
| id | name |
+------+--------+
| 1 | myself |
+------+--------+
1 row in set (0.00 sec)
记录也按照我们的意愿存在了


2、读写分离:用mysql客户端程序如mysql登陆到mysql代理,然后执行读写操作,以测试读写分离的正确性。

本文出自:http://sery.blog.51cto.com/10037/88526

2008年10月9日星期四

linux网络管理员指南读后对iptables的理解


iptables将通信数据分为3个处理点,分别是filter,nat,mangle

filter代表过滤操作.
nat代表转址
mangle代表拆分,其实也是转址的一种.

filter是过滤入站,出站包的检查站(可以叫检查站)
nat是转址之用,当你只有一个IP地址,而有数个电脑时.就需要用到NAT.
nat分为SNAT,DNAT.下面分别解释一下SNATDNAT
SNAT意思为源地址转换,如果只有一个合法地址,其它主机得用保留地址.保留地址是无法与外部通信的.保留地址为10.0.0.0/8  172.16-31.0.0/16  192.168.1.0/24  
保留地址的主机要与外部通信,必须要有一个合法的网络IP地址.为什么不行,原因很简单,因特网没有到这些地址的路由.
SNAT流程:
保留地址的主机---->执行源网络地址转换的主机---->将源地址改为合法地址,目的地址不变---->网关主机用合法地址去请求源码要请求的数据---->接着将数据返回给源地址.
实例:iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

将源络192.168.100/24访问internet转址成218.84.9.X
-p
参数为协议,只有ip标头为tcp的才执行转址,如果是udp,icmp就不干活了.可以将tcp改为ALL

DNAT意思是目的地址转换,这是地址转换的另一种,只不过用处不同.与保留地址也脱不了干系.这种转址也是为保留地址开发的
既然保留地址无法与外界通信,哪么外界主机要想与保留地址的主机通信,哪也得执行转址.
源地址:internet
目的地址:本地  端口:80  内部主机要提供http服务.internet主机的请求并不能进入内部主机.这时可在网关主机上执行DNAT.
实例:
iptables -t nat -A PREROUTING -p tcp -d 218.84.9.X --dport 80 -j DNAT
--to-destination
192.168.1.20

将外部请求218.84.9.X应答的HTTP服务转交给内部主机192.168.1.20
. -p
[tcp|udp|icmp|ALL]

nat正是iptables的拿手好戏,只需要几个命令,就可以实现一台路由器的功能.简单吧.

检查站的五个检查兵(应该可以这么理解的,他们与filter.net.mangle有着某着从属关系)
INPUT
OUTPUT FORWARD PREROUTING POSROUTING

input 
 internet
连接本地,意为输入.本地进程监听远程的连接
output  本地连接internet,意为输出.是本地进程所产生的包。
forward
这个命令应用在机器存在二块以上网卡的情形中.意思是当数据进入一块网卡,又离开,或者进入了别一块网卡.
prerouting
进入系统的有效包.说明在本地主机已经找到目的地址了.一般应用在SNAT/DNAT转址上.
posrouting
数据包已经进入,但马上要离开.该命令应用在ip伪装及snat.



防火墙规则匹配条件
iptables内置了osi协议模形.所以支持tcp/ip标头匹配条件.每个数据包里都有目的地址,源地址,源端口,目的端口.使用的协议等,讲到这,相信你也明白为什么防火必须在网络层了吧.防火墙对应用层的程序是一无所知的,应用层的程序如果发生网络应用,则要经过网络层,iptables就是内置在网络层的拦路虎,对过往数据按照规则逐一进行检查.如果匹配,放过.不匹配,拒绝.或者按默认设定的政策进行处理.

-s
(
代表源地址
 -s
 www.g.cn |
-s 191.1.2.4   
支持域名IP,0/0表示所有地址
-d
(
代表目的地址)
-d
 www.g.cn |
-d 218.84.9.251
支持域名IP,0/0表示所有地址
--dport(代表目的端口)
--dport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085 
--sport(代表源端口)
--sport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085

-p
(protocol
协议)
-p
[TCP | UDP | ICMP | ALL] ALL
选项表示匹配所有协议

-j
(operating
操作,对数据判断之后的后续操作)
-j
[ACCEPT | DROP | LOG | MARK | REJECT | TTL | MASQUERADE | SNAT |
DNAT]

-j的操作选项还有很多,这里并没有一一列出.挑选几个重要的说
ACCEPT
允许,让数据包继续进入下一检查点.
DROP 
 
拒绝,数据包在此检查点消失
LOG 
  LOG
当然是日志了,log还有许多选项的,比喻info
REJECT
抵抗,抵抗与拒绝不同,抵抗还表示与敌方有通话.DROP则表示不理睬你了.REJECT会给对方一个拒绝的回应
TTL 
 
数据包的生期周期,随你的爱好设置,微软的是64,google245,freebsd.org53,kernel.org51  设置过高浪费占用带宽.最高不要超过255
MASQUERADE
也是地址转换的一种,只不过是应用在动态地址上.它与网络接口存在着某种关系
SNATDNAT已经讲过了

-o
output  eth0
内网接口
-i  input 
   eth1
去往internet的接口


来几条命令吧,让你对iptables有点感觉
iptables
-P INPUT DROP

iptables
-t filter -a INPUT -s 0/0 -p tcp --dport 22 -j DROP

iptables
-t filter -a OUTPUT -d 0/0 --dport 80 -p tcp -j ACCEPT

iptables
-t filter -a FORWARD -d
 www.microsoft.com -p
ALL -j
DROP

第一条命令是设置INPUT检查点的缺省规则为拒绝
第二条命令是过滤internet来本地的22端口,协议为tcp,操作为拒绝
第三条命令是:本地请求internet80数据为允许
第四条命令是:去往www.microsoft.com的数据包全部拒绝


语法及用法FAQ:
问我写好了规则,我想保存规则怎么办
:/etc/init.d/iptables
save     //[stop | start]


问我想清空所有规则
iptables
-F       //
清空所有规则
iptables
-t nat -F   //
清空nat表规则

开机启动iptables
/etc/rc.d/rc.local 
 
添加/etc/init.d/iptables
start
或者chkconfig 

寻求帮助
iptables
-p tcp --help     //
单项帮助
iptables
--help          
   //
整项帮助
iptables
-s --help         
//
举一反三

实现路由器功能
将此行echo
"1" >
/proc/sys/net/ipv4/ip_forward
加入开机启动项或者去/etc/sysctl.conf更改
因定IP加此行,原理上面有
iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

动态ip加此行,原理上面有  iptables
-t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
看到这行有个PPP0没有,留你个问题,你想去吧







继续编写中........ 
   
小弟并没有电脑,只有凭以前从书上看到的及偶尔能摸一次linux的机会去回忆这些命令,所以并不能保证命令的正确,这些命令并没有在实例中证实是否可行,如果哪位兄弟的机器不是生产用机。希望能提供个ssh环境,非常感谢
QQ:3645636
近期在研究squid
. Vs/dr