2013年六月月 发布的文章

LVS在大流量下基于OSPF的负载均衡实施方案

 

 

随着开源技术的发展,以及商业设备价格的不断攀升。大公司总是希望能使用开源的方案来替换过去使用的商业设备。比如之前大家用的很多的F5和A10,现在已经在逐步被LVS替换。传统的单个lvs的性能是比不上商业设备的,而且稳定性等也相对会差些。告诉大家很多大公司都在用这些技术的。

 

基本思路就是把多个LVS组成一个OSPF集群,这样可以使得LVS集群的性能可以远远超过单个传统的商业设备(当然,对于F5等等其实也可以做这样的集群做水平化的扩展)

 

原来就是把服务器也模拟成ospf中的一份子,是他可以在实现ospf的负载均衡,以及高可用性。

 

在这里网络层的东西就不写了,往简单配置,没意思。往难里配置我也不懂,上线服务器的时候,这些东西都是网络组的负责,我只是负责服务器上的ospf的介入和业务方面的。

我这里只是简单的说下ospf的框架

045644257

 

 

 

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。

ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。

特点:

 

1
2
3
4
4
层负载均衡,效率高
配置简单,只需安装基于linux的路由软件quagga
无法进行监控检查,服务异常无法处理
无session保持等,功能过于简单

 

贴上一个操作的例子:

 

 

 

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior
 
Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决
 
策路由。
 
ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络
 
环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处
 
于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可
 
以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路
 
的数据传输。
 
特点:
1
4
层负载均衡,效率高
2
.配置简单,只需安装基于linux的路由软件quagga
3
.无法进行监控检查,服务异常无法处理
4
. 无session保持等,功能过于简单

 

路由器上的ospf的操作 ,这只是简单的配置,大家可以按照自己的想法和网络组的同学们扯淡提需求就行了。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
配置命令:
R0配置:
Router>en
Router#config t
Enter configuration commands, one per line.  End 
with

 

CNTL/Z.
Router(config)#hostname r0
r0(config)#
r0(config)#
int

 

e1/
0
r0(config-
if
)#ip address 
192.168
.
2.222

 

255.255
.
255.0
r0(config-
if
)#no shutdown
r0(config)#
int

 

e1/
1
r0(config-
if
)#ip address 
192.168
.
0.111

 

255.255
.
255.0
r0(config-
if
)#no shutdown
r0(config-
if
)#exit
r0(config)#router ospf 
100
r0(config-router)#net
r0(config-router)#network 
192.168
.
0.0

 

0.0
.
0.255

 

area 
0
r0(config-router)#network 
192.168
.
2.0

 

0.0
.
0.255

 

area 
0
r0(config-router)#exit
r0(config)#
int

 

e1/
1
r0(config-
if
)#ip ospf cost 
2
r0(config-
if
)#
int

 

e1/
0
r0(config-
if
)#ip ospf cost 
2
r0(config-
if
)#end
r0#ping 
192.168
.
0.14
Type 
escape

 

sequence to abort.
Sending 
5
100
-byte ICMP Echos to 
192.168
.
0.14
, timeout 
is

 

2

 

seconds:
!!!!!
Success rate 
is

 

100

 

percent (
5
/
5
), round-trip min/avg/max = 
64
/
93
/
1
==========================================================================

 

cisco默认的是hello时间是10s,死亡时间是hello时间的4倍,默认为40s,当然这个时间是可以修改的。

在接口模式下面,通过命令:

ip ospf hello-interval <time>来修改hello时间。

ip ospf dead-interval <time>来修改死亡时间。

 

服务器端的配置

其实就是安装一个软路由,让他进到ospf的圈子里面。

先说下qugga的基本安装配置

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
1
.       下载源码
quagga-
0.99
.
10
.tar.gz
2
.       解压缩
tar xzvf quagga-
0.99
.
10
.tar.gz
3
.       配置
cd quagga-
0.99
.
10
    
./configure --prefix =/usr
                
--sysconfdir=/etc/quagga
                
--localstatedir=/
var
/run/quagga
                
--enable-vtysh
                
--enable-user=
'test'
                
--enable-group=
'test'
                 
--enable-vty-group=
'test'
配置输出:
                                                                                                                                                                                                                                                                                                                                                                                                   
Quagga configuration
--------------------
quagga version          : 
0.99
.
10
host operationg system  : linux-gnu
source code location    : .
compiler                : gcc
compiler flags          : -Os -fno-omit-frame-pointer -g -std=gnu99 -Wall -Wsign-compare -Wpointer-arith -Wbad-
function
-cast -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wchar-subscripts -Wcast-qual
make                    : make
includes                :
linker flags            :  -lcrypt   -lcap  -ltermcap -lreadline -lm
state file directory    : /
var
/run/quagga
config file directory   : /etc/quagga
example directory       : /etc/quagga
user to run 
as

          

: test
group to run 
as

         

: test
group 
for

 

vty sockets   : test
config file mask        : 
0600
log file mask           : 
0600
                                                                                                                                                                                                                                                                                                                                                                                                   
The above user and group must have read/write access
to the state file directory and
to the config files 
in

 

the config file directory.
4
.       编译和安装
make ;make install
5
.       添加test组和用户
groupadd test;
    
useradd test -g test
6
.       改变权限 
//最好写入启动脚本
chown test:test /
var
/run/quagga
chmod 
777

 

/
var
/run/quagga
chown test:test /etc/quagga 
//需要将配置写入操作系统
chmod 
777

 

/etc/quagga/*              
7
.       增加log权限
//最好写入启动脚本
Mkdir  /
var
/log/quagga/
Vi /
var
/log/quagga/zebra.log
Chmod 
777

 

/
var
/log/quagga/zebra.log
                                                                                                                                                                                                                                                                                                                                                                                                    
8
.       修改 /etc/services  
//just for telnet
                
zebrasrv    
2600
/tcp     # zebra service
                
zebra         
2601
/tcp    # zebra vty
                
ripd           
2602
/tcp    # RIPd vty
                
ripngd       
2603
/tcp    # RIPngd vty
                
ospfd        
2604
/tcp    # OSPFd vty
                
bgpd         
2605
/tcp    # BGPd vty
                
ospf6d      
2606
/tcp    # OSPF6d vty
                
ospfapi     
2607
/tcp    # ospfapi
                
isid           
2608
/tcp    # ISISd vty
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                    
9
.       编辑配置文件
copy /etc/quagga/zebra.conf.example   /etc/quagga/zebra.conf
! -*- zebra -*-
!
! zebra sample configuration file
!
hostname Router
password zebra
enable password zebra
log file  /
var
/log/quagga/zebra.log
//注意zebra.conf启用log,这样便于查找错误
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                   
10
.     启动
zebra –d
如果启动不成功,察看/
var
/log/quagga/zebra.log
一般由于权限设置会出现以下错误:
2008
/
10
/
22

 

16
:
59
:
22

 

ZEBRA: Could not lock pid_file /
var
/run/quagga/zebra.pid, exiting
                                                                                                                                                                                                                                                                                                                                                                                                   
11
.    登陆
telnet localhost zebra(0r 
2601
)
[root@localhost quagga-
0.99
.
10
]# telnet localhost 
2601
Trying 
127.0
.
0.1
...
Connected to localhost.
Escape character 
is

 

'^]'
.
                                                                                                                                                                                                                                                                                                                                                                                                   
Hello, 
this

 

is

 

Quagga (version 
0.99
.
10
).
Copyright 
1996
-
2005

 

Kunihiro Ishiguro, et al.
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                   
User Access Verification
                                                                                                                                                                                                                                                                                                                                                                                                   
Password:
Router> enable
Password:
Router# help
Quagga VTY provides advanced help feature.  When you need help,
anytime at the command line please press 
'?'
.
                                                                                                                                                                                                                                                                                                                                                                                                   
If nothing matches, the help list will be empty and you must backup
 
until entering a 
'?'

 

shows the available options.
Two styles of help are provided:
1
. Full help 
is

 

available when you are ready to enter a
command argument (e.g. 
'show ?'
) and describes 
each

 

possible
argument.
2
. Partial help 
is

 

provided when an abbreviated argument 
is

 

entered
   
and you want to know what arguments match the input
   
(e.g. 
'show me?'
.)
                                                                                                                                                                                                                                                                                                                                                                                                   
Router#

 

在lvs server上的配置

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
安装
Web服务器
192.168
.
0.14
192.168
.
0.15
上安装quagga软件
配置
1
).    配置web服务器quagga
使用root用户登录
192.168
.
0.14
192.168
.
0.15
cd /etc/quagga
cp ospfd.conf.sample ospfd.conf
chkconfig zebra on
chkconfig ospfd on
service zebra start
service ospfd start
telnet localhost ospfd
输入默认密码zebra
ospfd> en
ospfd# conf t
ospfd(config)# router ospf
ospfd(config-router)# router-id 
192.168
.
2.64
ospfd(config-router)# network 
192.168
.
0.23
/
32

 

area 
0.0
.
0.0
(lo IP)
ospfd(config-router)# network 
192.168
.
2.64
/
24

 

area 
0.0
.
0.0
(接口IP)
ospfd(config-router)#end
ospfd#wr
2
).    配置交换机端
根据交换机类型配置ospf与主机quagga建立ospf邻居关系
3
).    配置主机
使用root用户分别在
2
台web服务上执行以下命令
ifconfig lo:
0

 

192.168
.
0.23

 

netmask 
255.255
.
255.255

 

up
验证
多次访问http:
//192.168.0.23显示相应页面即说明负载成功
                                                                                                                                                                                                                                                                                                                                                           
3.2

   

功能测试
负载均衡测试
多次访问http:
//192.168.0.23显示realserver ip address 在192.168.0.14和
192.168
.
0.15
之间切换
服务切换测试
Down掉
192.168
.
0.14
/
15
上的服务IP 
192.168
.
0.23
可以正常访问应用

 

总结,淘宝的lvs已经做了fullnat的技术,原理也是ospf的负载的,腾讯不少业务也早已经用这样的方案了,知道腾讯的dns为啥能抗住几百万的流量请求并发,10g网压力测试能保持在1800w 流量请求并发, 除了dns的性能牛逼外,网络的框架用的就是这个方案。当然里面有些具体的流程方案不方便向大家show出来,比如 各种情况下的健康度检查,ospf的hello包的判断,自动化的ospf的配置,定时的负载调整。  但这些东西可以自己用shell配合网络组的同学们一起搞定制的。

 

Linux下源码搭建extmail邮件服务器

Extmail 是一个以perl语言编写,面向大容量/ISP级应用,它是一款免费的高性能Webmail软件  满足用户多变的需求,能快速进行开发、改进和升级,支持Maildir,索引技术,速度超快。支持多国语言同屏显示,支持巨型邮箱(超过1GB)海量文件,支持无限尺寸附件,I/O能力强,模板化,多语言,修改非常容易。适应能力强的webmail系统  对于国内的电子邮件系统来说,无论是从系统功能、易用性还是中文化等方面,ExtMail 平台都是一个相当不错的选择。其工作原理如下图所示:

 

6758400_1370057259u59d

一.准备工作

1.准备工具

apr-1.4.6.tar.gz      apr-util-1.5.1.tar.gz

httpd-2.4.4.tar.bz2    courier-authlib-0.65.0.20130314.tar.bz2

mysql-5.5.15-linux2.6-i686.tar.gz

postfix-2.8.2.tar.gz    dovecot-2.0.16.tar

extmail-1.2.tar.gz     Unix-Syslog-1.1.tar.gz

extman-1.1.tar.gz

2.准备开发环境

[root@lly ~]# mkdir /mnt/cdrom    建立光盘挂载点

[root@lly ~]# mount /dev/cdrom  /mnt/cdrom   挂载光盘

[root@lly ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo    编辑yum客户端构建一个repo  id

6758400_13700572819k2m

[root@lly ~]# yum grouplist   检查开发环境

6758400_1370057304rUwi

注:软件依赖这几个开发环境,如果预先没有安装开发环境的话,可以用yum进行安装。

二.软件包的安装

1.安装apache

[root@lly ~]# tar -zxvf apr-1.4.6.tar.gz -C /usr/local/src/   拆解apr软件包

[root@lly src]# cd /usr/local/src/apr-1.4.6/

[root@lly apr-1.4.6]# ./configure   –prefix=/usr/local/apr把apr安装到/usr/local/apr目录下

[root@lly apr-1.4.6]#make

[root@lly apr-1.4.6]#make install

[root@lly apr-1.4.6]# cd

[root@lly ~]# tar -zxvf apr-util-1.5.1.tar.gz -C /usr/local/src/  拆解apr-util软件包

[root@lly src]# cd apr-util-1.5.1/

[root@lly apr-util-1.5.1]# ./configure –with-apr=/usr/local/apr/bin/apr-1-config

[root@lly apr-util-1.5.1]# make

[root@lly apr-util-1.5.1]# make install

[root@lly apr-util-1.5.1]# cd

[root@lly ~]# tar -jxvf httpd-2.4.4.tar.bz2 -C /usr/local/src/     拆解httpd软件包

[root@lly ~]# cd /usr/local/src/httpd-2.4.4/    进入拆解的apache目录

[root@lly httpd-2.4.4]# ./configure –prefix=/usr/local/apache  –sysconfdir=/etc/httpd  –enable-so   –enable-ssl  –enable-rewrite  –with-apr=/usr/local/apr/bin/apr-1-config   –with-apr-util=/usr/local/apr/bin/apu-1-config –with-pcre  -with-z –enable-mpms-shared=all

[root@lly httpd-2.4.4]# make

[root@lly httpd-2.4.4]# make install

[root@lly httpd-2.4.4]#cd /usr/local/apache/man

[root@lly man]# vim /etc/man.config   把apache的man手册添加到man路径方便查看apache的man手册

[root@lly apache]# ln -s /usr/local/apache/include/   /usr/include/apache为apache的头文件做一个符号链接

[root@lly ~]# cd /etc/init.d/

[root@lly init.d]# vim httpd   编辑apache的启动脚本

脚本如下

#!/bin/sh

#set -x

HTTPD=’/usr/local/apache/bin/httpd’

CONFFILE=’/etc/httpd/httpd.conf’

#description: http server

#chkconfig: 2345 88 60

start(){

[ -f /var/lock/subsys/httpd ]&& echo “apache is started” && exit

echo -n  “starting apache……”

sleep  1

$HTTPD  -f $CONFFILE && RETVAL=0 ||RETVAL=1

[ $RETVAL -eq 0 ]&& touch /var/lock/subsys/httpd && echo “ok” || echo “fail”

}

stop(){

[ ! -f  /var/lock/subsys/httpd ] && echo “httpd is stoped…” && exit

echo -n “stoping httpd……..”

sleep  1

/bin/rm -rf /var/lock/subsys/httpd

$HTTPD -k  stop  && RETVAL=0 ||RETVAL=1

[ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/httpd && echo “ok” || echo “fail”

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

*)

echo “start|stop|restart”

;;

esac

[root@lly init.d]# chmod a+x /etc/init.d/httpd   为apache服务添加可执行权限

[root@lly init.d]# service httpd start   启动apache服务

[root@lly init.d]# netstat -tupln |grep http  查看80端口是否启动

6758400_1370059925OYiW

[root@lly init.d]# chkconfig –add httpd  添加自启动

[root@lly init.d]# chkconfig –list  |grep http   查看添加开机启动是否成功

6758400_13700599326cfN

2.安装cmake

安装mysql的时候需要用到cmake工具

[root@lly ~]# tar -zxvf cmake-2.8.10.2.tar.gz -C /usr/local/src/

[root@lly ~]# cd /usr/local/src/cmake-2.8.10.2/

[root@lly cmake-2.8.10.2]# ./configure –prefix=/usr/local/cmake

[root@lly cmake-2.8.10.2]# make && make install

Waiting…………………..

[root@lly cmake-2.8.10.2]# cd /usr/local/cmake/

为了日后能快速访问cmake下的bin,把cmke下的bin添加路径

[root@lly cmake]# vim /etc/profile

6758400_137005994666u1

注:只有下次进入之后路径才会添加成功。

3.安装mysql

[root@lly ~]# tar zxvf mysql-5.6.10.tar.gz -C /usr/local/src/

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# less INSTALL-SOURCE

mysql的使用说明,我们可以按照安装说明进行安装。

6758400_137006023557z6

 

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# cmake .

[root@lly mysql-5.6.10]# make  &&  make install

6758400_1370275195YmKT

这个是很耗时的。Please  waiting  for  a  long time。。。。。。。。。。。。。。。。。。。。。。。。。。

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# less INSTALL-SOURCE

Mysql安装说明中的配置的步骤

6758400_1370275243Gcj7

[root@lly mysql-5.6.10]# cd /usr/local/mysql/

创建帐号信息

[root@lly mysql]# groupadd mysql

[root@lly mysql]# useradd -r -g mysql mysql

[root@lly mysql]# chown -R mysql .

进行初始化

[root@lly mysql]# scripts/mysql_install_db  –user=mysql

[root@lly mysql]# chown -R root .

[root@lly mysql]# chown -R mysql data

[root@lly mysql]# cd support-files/

[root@lly support-files]# cp my-default.cnf   /etc/my.cnf

[root@lly support-files]# cp mysql.server   /etc/init.d/mysqld

[root@lly support-files]# chmod a+x  /etc/init.d/mysqld

[root@lly support-files]# service mysqld start

Starting MySQL…..                                        [  OK  ]

mysqld 服务成功启动

[root@lly support-files]# netstat -tupln |grep mysqld

6758400_1370275252k2Ji

[root@lly support-files]# cd ..

[root@lly mysql]# pwd

/usr/local/mysql

[root@lly mysql]# vim /etc/profile

6758400_1370275258BCM6

[root@lly bin]# . /etc/profile

[root@lly ~]# mysql

mysql> show databases;

+——————–+

| Database           |

+——————–+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+——————–+

4 rows in set (0.00 sec)

[root@lly ~]# mysqladmin -u root -p password ‘123’设置一个管理员帐号密码123

[root@lly ~]# mysql -u root -p以后就可以以此帐号登陆了

6758400_1370275269Umpy

注:mysql生成的/usr/local/mysql/lib库文件不是标准路径系统无法识别(/lib 或者/usr/lib为标准路径)所以需做如下配置

[root@lly mysql]# vim /etc/ld.so.conf.d/mysql.conf

写入

/usr/local/mysql/lib

[root@lly mysql]# ldconfig

[root@lly mysql]# ln -s /usr/local/mysql/include/   /usr/include/mysql   对mysql的头文件include做一个连接

 

4.安装dns服务器

[root@lly ~]# yum install -y  bind  bind-chroot caching-nameserver

[root@lly ~]# service mysqld start

这里创建本地域126.com   邮件服务器域mail.126.com  本机地址192.168.126.129

[root@lly ~]# cd /var/named/chroot/etc/

[root@lly etc]# cp -p named.caching-nameserver.conf  named.conf

[root@lly etc]# vim named.conf  编辑dns配置

6758400_1370275281TxRV

[root@lly etc]# vim named.rfc1912.zones 编辑区域的声明文件

6758400_1370275308WBF4

[root@lly etc]# cd /var/named/chroot/var/named/

[root@lly named]# cp -p localhost.zone  126.com.zone  生成区域文件

[root@lly named]# vim 126.com.zone  编辑区域文件

6758400_1370275317VfO0

[root@lly named]# service named start  启动dns

[root@lly named]# chkconfig named on  添加自启动

[root@lly named]# vim /etc/resolv.conf    dns指向

6758400_1370275321MAxk

[root@lly named]# vim /etc/sysconfig/network   修改主机名(邮件服务器)

6758400_1370275324k2ri

[root@lly named]# vim /etc/hosts   修改hosts文件

6758400_1370275328JcmI

[root@lly named]# hostname mail.126.com   重新启动,或者修改下主机名

[root@mail ~]# nslookup mail.126.com   查看dns解析

6758400_1370275334MOIE

[root@mail ~]# dig -t mx 126.com   测试126.com区域的邮局

6758400_13702753444Mk0

一切正常。。。

5.安装postfix

[root@mail ~]# service sendmil stop

[root@mail ~]# chkconfig sendmail off   如果安装了sendmail,要先把sendmail服务关闭

[root@mail ~]# tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/

[root@mail ~]# cd /usr/local/src/postfix-2.8.2/

没有configure文件可以改变makefile文件来代替configure

注:Postfix是一种服务,需要为其添加帐号。

[root@mail postfix-2.8.2]# groupadd -g 2121  postfix 添加postfix组,组id 2121

[root@mail postfix-2.8.2]# useradd -u 2121 -g postfix -s /sbin/nologin  -M postfix   创建账号 用户名postfix 组的名字postfix

[root@mail postfix-2.8.2]# groupadd -g 2122  postdrop

[root@mail postfix-2.8.2]# useradd -u 2122 -g postfix -s /sbin/nologin  -M postdrop   为队列管理服务创建帐号

[root@mail postfix-2.8.2]# make makefiles ‘CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ‘ ‘AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2   -lssl –lcrypto’

注:(没有configure文件可以改变makefile文件来代替configure  这条命令相当于./configure)

[root@lly postfix-2.8.2]# make

[root@lly postfix-2.8.2]# make install

6758400_1370275372sUfi

其他的都可以直接回车默认值就行

6758400_1370275376T1Yo

注:之后会生成etc目录下aliases,这个文件是和sendmail结合的,为了让其与postfix结合,执行一下

[root@mail postfix-2.8.2]# /usr/bin/newaliases 执行

说明:这里调用redhat系统自带的启动脚本。由于postfix安装的时候基本都是默认安装,路径都是默认路径,所以使用系统自带的脚本没问题,基本不用修改就能用。

[root@mail postfix-2.8.2]# mkdir /tmp/abc

[root@mail postfix-2.8.2]# cd /tmp/abc/

[root@mail abc]# cp /mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm ./   把光盘上的拷贝过来

[root@mail abc]# rpm2cpio  postfix-2.3.3-2.1.el5_2.i386.rpm |cpio -id拆解postfix包

[root@mail abc]# cd etc

[root@mail etc]# cd rc.d

[root@mail rc.d]# cd init.d

[root@mail init.d]# cp -p postfix  /etc/init.d/   拷贝配置文件

[root@mail init.d]# service postfix start   启动postfix服务

6758400_1370275380B9As

[root@mail ~]# netstat -tupln |grep 25

6758400_1370275383hX75

[root@mail ~]# vim /etc/postfix/main.cf

6758400_1370275387AB9D

6758400_137027538866Qk

6758400_1370275390FLr8

6758400_1370275392xrum

6758400_1370275396WbAb

[root@mail ~]# service postfix restart  重启服务

[root@mail sbin]# useradd user1  添加user1用户

[root@mail sbin]# passwd user1  为user1用户添加密码123

[root@mail ~]# telnet 127.0.0.1 25   向user1发送一封测试邮件

6758400_1370275403lunB

查看user1是否收到邮件了

[root@mail ~]# su – user1   以user1用户登录查看邮件

[user1@mail ~]$ mail

6758400_1370275416ybz6

注:Postfix身份验证功能需要结合sasl

[root@mail ~]# cd /usr/lib/sasl2/

6758400_1370275419LgNh

[root@mail sasl2]# cp -p Sendmail.conf smtpd.conf

[root@mail sasl2]# vim smtpd.conf    编辑其配置文件

6758400_13702754220vb4

[root@mail sasl2]# service saslauthd start  启动sasl

[root@mail sasl2]# chkconfig saslauthd on  设置为开机启动

[root@mail ~]# vim /etc/postfix/main.cf 要想sasl对smtp生效,需要添加sasl的一些验证语句

6758400_1370275429MLpw

[root@mail sasl2]# service postfix restart重启postfix服务

6758400_1370275441KCkF

 

6.安装courier-authlib

[root@mail ~]# tar -jxvf courier-authlib-0.63.1.20111230.tar.bz2 -C /usr/local/src/

[root@mail ~]# cd /usr/local/src/courier-authlib-0.63.1.20111230/

[root@mail courier-authlib-0.63.1.20111230]# ./configure  –prefix=/usr/local/courier-authlib  –sysconfdir=/etc   –with-authmysql    –with-mysql-libs=/usr/local/mysql/lib/   –with-mysql-includes=/usr/include/mysql    –with-redhat    –with-authmysqlrc=/etc/authmysqlrc    –with-authdaemonrc=/etc/authdaemonrc    –with-ltdl-lib=/usr/lib    –with-ltdl-include=/usr/include

[root@mail courier-authlib-0.63.1.20111230]# make

[root@mail courier-authlib-0.63.1.20111230]# make install

[root@mail courier-authlib-0.63.1.20111230]# service postfix restart

[root@mail etc]# cp authdaemonrc.dist    authdaemonrc  验证时使用的模块

[root@mail etc]# cp authmysqlrc.dist    authmysqlrc

[root@mail etc]# vim authdaemonrc

6758400_1370275450h9F0

[root@mail etc]# vim authmysqlrc

6758400_1370275454icki

6758400_1370275457jyKX

6758400_13702754585r7q

6758400_1370275459NHEU

6758400_1370275481OHAd

6758400_1370275483nMNt

6758400_1370275486CXXq

6758400_1370275488PyCT

6758400_1370275489BIeE

6758400_1370275491MUgt

6758400_1370275498ZnTE

6758400_1370275502oPCw

[root@mail src]# cd /usr/local/src/courier-authlib-0.63.1.20111230/

[root@mai courier-authlib-0.63.1.20111230]#cp courier-authlib.sysvinit  /etc/init.d/courier-authlib 拷贝启动脚本

[root@mail courier-authlib-0.63.1.20111230]# chmod a+x /etc/init.d/courier-authlib 修改权限可执行

[root@mail courier-authlib-0.63.1.20111230]# chkconfig courier-authlib on添加开机启动

[root@mail courier-authlib-0.63.1.20111230]# service courier-authlib start启动courier-authlib

[root@mail courier-authlib-0.63.1.20111230]# cd /usr/local/courier-authlib/

[root@mail courier-authlib]# vim /etc/ld.so.conf.d/courier-authlib.conf导入库文件

6758400_13702755068b8z

[root@mail lib]# ldconfig

[root@mail lib]# ldconfig -pv |grep courie

6758400_1370275512YedU

[root@mail lib]# cd ..

[root@mail courier-authlib]# ln -s /usr/local/courier-authlib/include/   /usr/include/courier-authlib对头文件做一个符号链接

[root@mail courier-authlib]# vim /etc/postfix/main.cf

添加如下内容以便让postfix支持虚拟域和虚拟账号

6758400_1370275525cS0p

新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户

[root@mail ~]# mkdir -pv /var/mailbox

[root@mail ~]# chown -R postfix /var/mailbox

重新配置SMTP 认证

[root@mail postfix]# vim /usr/lib/sasl2/smtpd.conf

6758400_1370275537cRIH

7.安装extman

[root@mail ~]# tar -zxvf extman-1.1.tar.gz

[root@mail ~]# cd extman-1.1

[root@mail extman-1.1]# cd docs/

[root@mail docs]# mysql -u root -p <extmail.sql    导入数据库

[root@mail docs]# mysql -u root -p <init.sql

[root@mail docs]# mysql -u root -p 登陆数据库进行账号授权

mysql>  GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY ‘extmail’;

mysql>  GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY ‘extmail’;

mysql> FLUSH PRIVILEGES;刷新授权

[root@mail docs]# cp mysql_virtual_*  /etc/postfix/

[root@mail postfix]# service postfix restart重启postfix服务

8.安装dovecot

[root@mail ~]# useradd  -M  -s  /sbin/nologin  dovecot   创建账号

[root@mail ~]# cd /usr/local/src/dovecot-2.0.16/

[root@mail dovecot-2.0.16]# ./configure –sysconfdir=/etc  –with-mysql

[root@mail dovecot-2.0.16]#make

[root@mail dovecot-2.0.16]#make install

[root@mail dovecot-2.0.16]#cd /usr/local/share/doc/dovecot/

[root@mail dovecot]# cp example-config/dovecot.conf  /etc/dovecot/dovecot.conf

6758400_1370275545DI6t

6758400_1370275554M3Hi

6758400_1370275558p307

 

[root@mail ~]# vim /etc/dovecot-mysql.conf   创建mysql.conf文件,让dovecot与mysql进行结合

6758400_13702755631yUl

[root@mail ~]# vim  /etc/postfix/main.cf

6758400_1370275565MAx3

9.安装extmail

[root@mail ~]# tar -zxvf extmail-1.2.tar.gz

[root@mail ~]# mkdir -pv /var/www/extsuite

[root@mail ~]# mv extman-1.1  /var/www/extsuite/extman

[root@mail ~]#mv extmail-1.2  /var/www/extsuite/extmail

[root@mail ~]# cd /var/www/extsuite/extmail/

[root@mail extmail]# cp webmail.cf.default webmail.cf

[root@mail extmail]# vim webmail.cf

6758400_1370275567hpLf

6758400_1370275570JPj9

6758400_13711953300egy

6758400_1371195335wHxU

注:Apache和extmail的结合是靠cgi进行的

[root@mail extmail]# vim /etc/httpd/conf/httpd.conf    修改apache配置虚拟主机

6758400_1371195351SKKA

[root@mail extmail]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/修改 cgi执行文件属主为apache运行身份用户

[root@mail extmail]# service httpd restart

extmail将会用到perl的Unix::syslogd功能,把补丁打上去

[root@mail ~]# tar zxvf Unix-Syslog-0.100.tar.gz  -C /usr /local/src/ Unix-Syslog-0.100

[root@mail ~]# cd Unix-Syslog-0.100

[root@mail Unix-Syslog-0.100]# perl Makefile.PL

[root@mail Unix-Syslog-0.100]# make

[root@mail Unix-Syslog-0.100]# make install

[root@mail Unix-Syslog-0.100]# cd /var/www/extsuite/extman/

[root@mail extman]#cp webman.cf.default   webman.cf

[root@mail extman]#vim webman.cf

6758400_1371195361zqmq

6758400_1371195366UT3N

[root@mail extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/   修改cgi目录的属主

[root@mail extman]# vim /etc/httpd/conf/httpd.conf

6758400_1371195374iftN

[root@mail extman]# service httpd restart

三、登录管理

启动各种服务

地址栏输入http://192.168.126.129/extmail

6758400_1371195389BPZF

选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org  密码为:extmail*123*

6758400_1371195405eQkw

之后就可以进行管理了。

【Ubuntu 12.04 64位】Linux下常用命令

 

以下命令在 Ubuntu 12.04 64位下测试通过。

 

在linux中一切都是文件,包括文件夹也是一种特殊的文件,甚至设备也是文件。

 

查看当前系统的版本

 

  1. cat /proc/version
  2. #Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012
  3. uname -a
  4. #Linux web 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
  5. cat /etc/issue
  6. #Ubuntu 12.04.1 LTS n l

 

显示一个命令的路径

 

  1. which adduser
  2. /usr/sbin/adduser
  3. which groups
  4. /usr/sbin/groups
  5. which ls
  6. /bin/ls

 

查看在线的用户

who

 

显示当前用户的账号

whoami

 

重启

reboot

 

关机

shutdown

 

查看当前用户

users

 

查看当前用户所在的组

groups

 

修改当前用户的密码

passwd

 

修改用户user1的密码

passwd user1

 

切换用户user1

su user1

 

切换到root用户

su

 

创建目录

mkdir dir1

 

删除目录

rmdir dir1

 

切换目录

cd

 

返回上级目录

cd ..

 

 

新建文件file1

touch file1

 

新建并编辑文件file1

vi file1

 

删除文件

rm

 

显示文件内容

cat file1

more file1

less file1

 

cat还有一个功能就是可以新建文件,并且同时将输入的内容保存到文件中

cat >> file1

敲入上面的命令后,你就可以开始输入文件的内容了,还可以换行,如果输入完毕,就同时按下ctrl+D,就会结束输入,并且把刚才输入的内容保存到文件中。

 

 

 

显示文件的前面10行

通过参数可以指定显示前面的N行

head file1

 

显示文件的最后10行

通过参数可以指定显示后面的N行

tail file1

 

列出【home】目录的所有文件

ls /home

 

用列表的方式列出【home】目录的所有文件,不包括隐藏文件

会显示文件的权限,所有者,大小,最后更新时间

ls -l /home

 

用列表的方式列出【home】目录的所有文件,包括隐藏文件,以 . 开头的文件就是隐藏文件。

会显示文件的类型,权限,所有者,所有者的用户组,大小,最后更新时间

ls -al /home

 

更改文件的所有者

chown user1:group1 file1

 

更改文件的权限

a所有用户,+添加权限,rwx读、写、执行权限

chmod a+rwx file1

 

 

显示一个命令的说明

说明包括用法和解释

man cat

 

显示一个命令的参数和基本用法

在命令后面加上–help

cat –help

 

很多时候,如果不知道一个命令的具体用法,或者是有哪些参数,参数是什么意思,都可以使用上面的两个命令来查看一下。

 

添加用户user1

adduser user1

 

添加用户组

addgroup group1

 

添加用户的同时,初始化用户到一个组

adduser –ingroup group1 user11

 

添加已有用户到已有的组

adduser user12 group1

 

cut命令

cut命令可以对文件做一些分隔,分析的处理,是基于行来处理文件。将文件的每一行按照规律分隔,获取其中的部分内容。

比如说我想得到系统中的所有用户的登录账号,大家都知道系统中有一个/etc/passwd文件,里面有这些内容,但是同时也有其他的内容。

 

  1. cut -d: -f1 /etc/passwd

上面的命令做什么呢?-d参数用来指明分隔符,因为passwd文件的每一行是用冒号分隔的,-f参数指明你想要的字段,这里指明要第一个字段,也就是登陆账号字段,最后指明文件的位置就可以了。

如果是想要几个字段,可以使用-f1-3代表第一个到第三个字段,-f1,3代表第一个和第三个字段。

 

  1. cut -d: -f1 /etc/passwd >> /tmp/users

使用上面的命令,cut命令的结果就会保存到/tmp/users文件中。

 

wc命令

wc命令用来统计文件的行数,字符数,单词数,字节数信息。

 

  1. root@web:/home# wc -l file1
  2. 4613 file1
  3. root@web:/home# wc -c file1
  4. 221987 file1
  5. root@web:/home# wc -c file1
  6. 221987 file1
  7. root@web:/home# wc -m file1
  8. 220166 file1
  9. root@web:/home# wc -L file1
  10. 393 file1
  11. root@web:/home# wc -w file1
  12. 11902 file1

 

vi编辑器

vi newfile

两种模式:命令模式和插入模式。

首先进入的是命令模式,按a,i,o可以进入插入模式,在最下面的一行显示– INSERT –,代表现在可以编辑文件了。如果想回到命令模式,需要按下ESC键。

按下a会在下一个字符开始插入,按下i会在当前位置开始插入,按下o会从新的一行开始插入。

在命令模式下常用的命令包括

:w newfile2,另存为newfile2。
:wq,保存并且退出。
:q!,强行退出,不保存。
:w,只保存,不退出。

gg,回到文件的第一个字符。
G,到达文件的最后一个字符。
dd,删除光标所在的当前行。

x,删除光标所在位置的一个字符。

X,删除光标所在位置之前的一个字符。
h,向左移动一个字符。
j,向下移动一个字符。
k,向上移动一个字符。
l,向右移动一个字符。
ctrl+b,向后移动一页。
ctrl+f,向前移动一页。
ctrl+u,向后移动半页。
ctrl+d,向前移动半页。
w,跳到下个单词的开头。
e,跳到下个单词的结尾。
$,移动到光标所在行的末尾。
0,移动到光标所在行的开头。
u,undo操作,在误操作之后可以使用。
:set nu,在每一行前面列出行号。
:100,可以直接跳到第100行。

ggdG,清空文件的内容。

在某些时候,需要清空文件内容,而不删除文件。比喻有些日志文件(log.txt);在linux下的命令为:

 

清空文件log.txt的内容。

  1. true > log.txt

 

 

查询命令locate

locate是查询索引,在索引中查询是否存在匹配条件的文件,这就需要先做索引,系统每天自动进行索引工作。

也可以通过手动执行updatedb来建立索引。

 

  1. updatedb
  2. locate file1

 

查询命令find

find是实时搜索,所以查询消耗的时间要比locate长。

 

  1. find / -name ”file1″

 

查询命令grep

grep的查询对象是文件的内容,以行为单位进行条件的匹配。

 

  1. grep -c ”using” file1

在file1中查询using出现的个数。

grep是一个强大的文本搜索工具,通过正则表达式搜索匹配的文本,进行输出。

 

重定向

将hello重定向到readme文件中

 

  1. echo ”hello” > readme

 

将1,2,3重定向追加到readme文件中,追加是两个>符号。

 

  1. echo ”1,2,3″ >> readme

 

管道

将前一个命令的输出作为下一个命令的输入,|符号链接两个命令。

 

  1. user1@web:~$ cat /etc/passwd | cut -d: -f1
  2. root
  3. daemon
  4. bin
  5. sys
  6. sync
  7. games
  8. man
  9. lp
  10. mail
  11. news
  12. uucp
  13. proxy
  14. www-data
  15. backup
  16. list
  17. irc
  18. gnats
  19. nobody
  20. libuuid
  21. syslog
  22. messagebus
  23. sshd
  24. ntp
  25. user1
  26. user11
  27. user12
  28. mysql

 

/etc/passwd文件

这个文件存放所有的用户信息

user1:x:1000:1000:user1.web,,,:/home/user1:/bin/bash

信息分为几个部分,每部分用冒号:隔开。

第一部分,登陆账号。

第二部分,密码,密码放在另外一个文件/etc/shadow中(密文),这里用一个字符占位。如果为空,代表用户没有密码。

第三部分,用户ID。

第四部分,用户初始化组的ID。

第五部分,用户描述信息,全名等信息。

第六部分,用户主目录,工作目录,登录之后所处的目录。

第七部分,用户的shell。

 

/etc/group文件

这个文件存放所有用户组的信息。

user1:x:1000:user1,user11

信息分为几个部分,每部分用冒号:隔开。

第一部分,组名称。

第二部分,组密码。

第三部分,组ID。

第四部分,组包含的用户,用逗号分隔。上面的用户组user1中包含user1和user11两个用户。

 

/etc/shadow文件

这个文件保存所有用户的密码信息。

 

  1. user1:$6$UA2YOwOJ$tn.u3BmF1AjESuzbmmoMkMdjC1B4oUs3I0aA4bq2v.9auayz4Baz3SuZYCtM1xRqQUhjYYmPb4FF1XzPtE1l4/:15636:0:99999:7:::

信息分为几个部分,每部分用冒号:隔开。

第一部分,登陆账号。

第二部分,经过加密的密码,如果不想让当前用户登录,把这部分的内容修改为*或者!。

第三部分,最近更改密码的日期,日期以1970年1月1日作为第一天,然后依次加1。

第四部分,密码不可更改的天数。

第五部分,密码需要重置的天数。

第六部分,密码重置前的警告天数,就是在到达必须重置的日期之前的几天就会提示你更改密码。

第七部分,密码过期的宽限天数,就是在密码到达重置的天数,还没有重置,在后面的几天还可以继续使用。

第八部分,账号失效时间。

第九部分,保留。

 

chkconfig

查看开机自启动列表

 

  1. chkconfig –list

 

很多时候,我们需要编译源代码,然后安装一个应用。

源代码通常是tar.gz或者tar.bz2的,需要先解压释放,然后在进行编译和安装。

 

  1. tar zxvf apr-1.4.6.tar.gz
  2. cd apr-1.4.6
  3. ./configure
  4. make
  5. sudo make install

 

tar是一个归档的命令,就是将一堆文件,归档成一个文件,在需要的时候再进行释放。同时还支持压缩。

c,创建归档文件

x,释放归档文件

z,gz压缩

 

  1. tar cf demo.tar demo
  2. tar xf demo.tar
  3. tar czf demo.tar.gz demo
  4. tar xzf demo.tar.gz

 

link

建立连接,ln

-s,软连接,符号链接,有点像windows中的快捷方式。删除源文件,链接文件还存在,但是打开连接文件会失败,提示找不到文件。

-d,硬链接,有点像备份。删除源文件,连接文件依然存在,而且可以打开。

修改源文件,对应的软硬链接都会同步修改。硬链接应该是分配了新的空间,但是信息会和源文件进行同步。

两者在用ls -l查看的时候显示不一样。

 

  1. ls -s/-d target link_name
  1. user1@web:~$ ln -s demo1 demo1-slink
  2. user1@web:~$ ln -d demo1 demo1-dlink
  3. user1@web:~$ ls -l demo1
  4. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1
  5. user1@web:~$ ls -l demo1*
  6. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1
  7. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1-dlink
  8. lrwxrwxrwx 1 user1 user1 5 Oct 25 10:25 demo1-slink -> demo1

 

查询进程

  1. ps -ef | grep nginx

 

杀死进程

  1. kill 进程号

 

取消开机启动

  1. update-rc.d -f nginx remove

 

停止一个apache2网站

  1. a2dissite blog
  2. service apache2 reload

 

启动一个apache2网站

  1. a2ensite blog
  2. service apache2 reload

 

 

踢出登陆的用户

  1. Last login: Thu Oct 25 23:23:27 2012 from 106.3.102.45
  2. root@web:~# who
  3. root     pts/3        2012-10-25 23:27 (106.3.102.45)
  4. root     pts/0        2012-10-25 21:40 (106.3.102.45)
  5. root     pts/2        2012-10-25 22:12 (106.3.102.45)
  6. root     pts/4        2012-10-25 22:21 (106.3.102.45)
  7. root     pts/5        2012-10-25 23:23 (106.3.102.45)
  8. root@web:~# pkill -KILL -t pts/0
  9. root@web:~# pkill -KILL -t pts/2
  10. root@web:~# pkill -KILL -t pts/4
  11. root@web:~# pkill -KILL -t pts/5
  12. root@web:~# who
  13. root     pts/3        2012-10-25 23:27 (106.3.102.45)

 

清屏命令

  1. clear

 

查看系统信息

查看内存使用情况

  1. free

 

查看系统资源使用情况

包括内存,进程,cpu

 

  1. top

 

I/O监视器-iotop

iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具。如下图所示,Iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息。
1、安装

  1. ubuntu:apt-get install iotop
  2. centos:yum install iotop

2、使用方法
iotop [OPTIONS]

主要选项有:
-o :只显示有io操作的进程
-b :批量显示,无交互。主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid
-u USER:监控的进程用户。

iotop

Centos 禁Ping

1.关闭ping请求

sysctl -w net.ipv4.icmp_echo_ignore_all=1
sysctl -p

2.开启ping请求

sysctl -w net.ipv4.icmp_echo_ignore_all=0
sysctl -p

监控网络状态工具- Smokeping

一.安装软件
1.使用yum 命令安装所需的工具
yum install gcc freetype-devel zlib-devel libpng-devel libart_lgpl-devel httpd-devel apr-util-devel apr-devel cairo cairo-devel pango pango-devel libxml2 libxml2-devel perl-XML-Simple.noarch perl-Crypt-SSLeay perl-Digest-HMAC

2. 安装rrdtool
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.6.tar.gz
tar zxvf rrdtool-1.3.6.tar.gz
cd rrdtool-1.3.6
./configure –disable-tcl
make
make install

3. 安装cgilib
wget http://down1.chinaunix.net/distfiles/cgilib-0.5.tar.gz
tar zxvf cgilib-0.5.tar.gz
cd cgilib-0.5
make
cp libcgi.a /usr/local/lib
cp cgi.h /usr/include

4. 安装fping
wget http://fping.sourceforge.net/download/fping.tar.gz
tar zxvf fping.tar.gz
cd fping-2.4b2_to
./configure
make
make check
make install

5.安装 echoping
wget http://jaist.dl.sourceforge.net/project/echoping/echoping/6.0.0/echoping-6.0.0.tar.gz
tar zxvf echoping-6.0.0.tar.gz
cd echoping-6.0.0
./configure
make
make test
make install

6.安装 CGI-SpeedyCGI
wget ftp://195.220.108.108/linux/epel/5/x86_64/mod_speedycgi-2.22-4.el5.x86_64.rpm
wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/5/x86_64/perl-CGI-SpeedyCGI-2.22-4.el5.x86_64.rpm
rpm -ivh –force perl-CGI-SpeedyCGI-2.22-4.el5.x86_64.rpm
rpm -ivh mod_speedycgi-2.22-4.el5.x86_64.rpm
wget http://mirrors.163.com/cpan/authors/id/H/HO/HORROCKS/CGI-SpeedyCGI-2.22.tar.gz
tar zxvf CGI-SpeedyCGI-2.22.tar.gz
cd CGI-SpeedyCGI-2.22
perl Makefile.PL
遇到问题选择默认选项(no)
make
make test
make install

7.安装smokeping
wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.3.6.tar.gz
tar zxvf smokeping-2.3.6.tar.gz
mv smokeping-2.3.6 /usr/local/smokeping
cd /usr/local/smokeping

二.配置smokeping
1. 修改文件名
修改/usr/local/smokeping/bin下的smokeping.dist
cp smokeping.dist smokeping
修改etc/ 下的 basepage.html.dist,config.dist,smokemail.dist
cp basepage.html.dist basepage.html
cp config.dist config
cp smokemail.dist smokemail
chmod 600 smokeping_secrets.dist
修改htdoc/下的smokeping.cgi.dist
cp smokeping.cgi.dist smokeping.cgi

2. 修改配置文件

配置 bin/smokeping
vi /usr/local/smokeping/bin/smokeping
在这个文件里面我们需要修改前面两个 lib 和后面 config 文件的 path。
两个 lib 分别是 smokeping 的 lib 和 rrdtool 的 lib (红色为修改后的内容)
#!/usr/sepp/bin/perl-5.8.4 -w
#!/usr/bin/perl -w
use lib qw(/usr/pack/rrdtool-1.2.23-mo/lib/perl);
use lib qw(/usr/local/rrdtool-1.3.6/lib/perl);
use lib qw(lib);
use lib qw(/usr/local/smokeping/lib);
use Smokeping 2.003006;
Smokeping::main(“etc/config.dist”);
Smokeping::main(“/usr/local/smokeping/etc/config”);
配置 htdocs/smokeping.cgi,方法与上面相同
vi /usr/local/smokeping/htdocs/smokeping.cgi
************************
#!/usr/sepp/bin/speedy -w

#-*-perl-*-
#!/usr/bin/speedy -w
# -*-perl-*-
# use lib qw(/usr/pack/rrdtool-1.0.33-to/lib/perl);
use lib qw(/usr/local/rrdtool-1.3.6/lib/perl/);
# use lib qw(/home/oetiker/data/projects/AADJ-smokeping/dist/lib);
use lib qw(/usr/local/smokeping/lib);
use Smokeping 2.003006;
Smokeping::cgi(“/home/oetiker/data/projects/AADJ-smokeping/dist/etc/config”);
Smokeping::cgi(“/usr/local/smokeping/etc/config”);
配置 etc/config
vi usr/local/smokeping/etc/config   将以下几行替换为已经安装的相关软件的路径
*** General ***
imgcache = /home/oetiker/public_html/smokeping-ms/cache
imgcache = /usr/local/smokeping/htdocs/cache
imgurl = cache
imgurl = cache
datadir = /tmp/smokeping-ms/data
datadir = /usr/local/smokeping/var
piddir = /tmp/smokeping-ms/var
piddir = /usr/local/smokeping/var
cgiurl = http://some.url/smokeping.cgi
cgiurl = http://本机IP/htdocs/smokeping.cgi;
smokemail = /home/oetiker/checkouts/smokeping/trunk/software/etc/smokemail.dist
smokemail = /usr/local/smokeping/etc/smokemail
tmail = /home/oetiker/checkouts/smokeping/trunk/software/etc/tmail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
*** Presentation ***
template= /home/oetiker/checkouts/smokeping/trunk/software/etc/basepage.html.dist
template = /usr/local/smokeping/etc/basepage.html
*** Probes ***
+ FPing
binary = /usr/sbin/fping
binary = /usr/local/sbin/fping
#** Database ***
step = 60
pings = 10

修改ping的频率,默认为300秒ping20 次,我们可以根据需要调整,这里修改为60秒 ping 10次。
*** Targets ***
#=================================
#这里用于配置监控目标,以+号分层,+为首页,++为子层,我们以百度和搜狐为例。
+TEST
menu= TEST
title = TEST
++ baidu
menu = baidu
title = baidu
host = 115.239.210.27
++ sohu
menu = sohu
title = sohu
host = 121.14.0.97
#=================================
3. 添加目录

建立下面三个目录用于保存smokeping的数据等

mkdir /usr/local/smokeping/data

mkdir /usr/local/smokeping/var

mkdir /usr/local/smokeping/htdocs/cache

chown –R apache:apache /usr/local/smokeping

4. 修改apache配置文件

vi /etc/httpd/conf/httpd.conf
添加下面内容:
Alias /smokeping/ “/usr/local/smokeping/htdocs/”
Alias /cache/ “/usr/local/smokeping/cache/”
<Directory “/usr/local/smokeping/htdocs”>
Options FollowSymLinks ExecCGI
AllowOverride None
AddHandler cgi-script cgi
Order allow,deny
Allow from all
</Directory>

三.启动
1.重启apache
service httpd restart

2.重启smokeping
/usr/local/smokeping/bin/smokeping restart

完成。

sed 取某时段内apache的访问日志

导出 2013-05-24 15:00:00 ~ 2013-05-28 16:00:00 之间的apache访问日志

Apache日志格式为:

222.92.115.194 - - [28
/May/2013
:17:01:00 +0800] 
"GET /media/js/jquery.eislideshow.js HTTP/1.1"

 

304 -
222.92.115.194 - - [28
/May/2013
:17:01:00 +0800] 
"GET /media/style/tpl/tpl_buy_left/tpl_buy_left.js HTTP/1.1"

 

304 -
222.92.115.194 - - [28
/May/2013
:17:01:01 +0800] 
"GET /favicon.ico HTTP/1.1"

 

404 17846
222.92.115.194 - - [28
/May/2013
:17:01:01 +0800] 
"GET /large-display/interactive/ HTTP/1.1"

 

200 21382
222.92.115.194 - - [28
/May/2013
:17:01:02 +0800] 
"GET /favicon.ico HTTP/1.1"

 

404 17846
222.92.115.194 - - [28
/May/2013
:17:01:04 +0800] 
"GET /large-display/single/ HTTP/1.1"
200 21386
222.92.115.194 - - [28
/May/2013
:17:01:04 +0800] 
"GET /favicon.ico HTTP/1.1"

 

404 17846
222.92.115.195 - - [28
/May/2013
:17:01:05 +0800] 
"GET /dsc/ HTTP/1.1"

 

200 34530
222.92.115.195 - - [28
/May/2013
:17:01:05 +0800] 
"GET /media/img/channel_icon.jpg HTTP/1.1"

 

404 17846
222.92.115.195 - - [28
/May/2013
:17:01:06 +0800] 
"GET /favicon.ico HTTP/1.1"

 

404 17846

截取命令:

[root@style logs]# sed

 

-n
'/24/May/2013:15:00:01/,/28/May/2013:16:59:58/p' xxxx-access_log > 20130524.15-20130528.16-access_log.txt

PS:需要注意的是如果起始时间在日志中不存在,则整个截取将返回 0 行结果。而如果结束时间在日志中不存在,则会截取到日志的最后一条。所以在截取前得要找到最日志中最合适的起始点和结束点。
我的做法是先使用grep去找到两个点  再使用sed去截取

# 找出 2013-05-24 15点第一条记录的时间
[root@style logs]# grep '24/May/2013:15' xxxx-access_log | head

 

-1
10.200.114.183 - - [24/May/2013:15:00:01 +0800] "GET /gp10/pic_259_218_1368781965.png HTTP/1.0" 401 484
# 找出 2013-05-28 16点最后一条记录的时间
[root@style logs]# grep '28/May/2013:16' xxxx-access_log | tail

 

-1
222.92.115.195 - - [28/May/2013:16:59:58 +0800] "GET /favicon.ico HTTP/1.1" 404 17846
# 然后取这两个时间段之间的记录

Pptp+FreeRadius+Ldap实现VPN用户认证

由于公司使用OpenLDAP统一管理员工的账号密码信息
而现在需要搭建VPN以方便出差员工能访问公司内部网络
在对比流行的几种VPN类型后,选择了PPTP方式
OpenVPN/ipsec VPN虽然安全性比较高,但操作较麻烦,而公司大多数的员工对电脑都不是太懂,所以放弃
PS: 本人只讲如何结合PPTP+Freeradius+LDAP,并不涉及PPTP及LDAP的配置
系统环境: Centos 6.4 x86_64      已经配置好PPTP及LDAP

配置Radius
1.安装Radius:

[root@ldap ~]# yum install freeradius freeradius-ldap freeradius-utils

2.测试
编辑

/etc/raddb/users

 ,在最后加入一行

test Cleartext-Password := "123456"

启动radius

[root@ldap ~]# /etc/init.d/radiusd start

测试服务器是否连通

[root@ldap ~]# radtest test 123456 localhost 0 testing123
# 解释: # radtest username password server port key

如果看到Access-Accept就说明连接成功了。如果看到类似“Ignoring request to authentication address * port 1812 from unknownclient”的文字, 可能需要去修改

/etc/raddb/clients.conf

,将

client localhost

段下的

ipaddr

改为服务器的IP,而不是127.0.0.1。

在测试成功之后,就可以将 

/etc/raddb/users

中添加的内容删除掉了

3. 下载ppp源码,需要用到其中radius的配置文件

[root@ldap ~]# tar zxvf ppp-2.4.5.tar.gz
[root@ldap ~]# cp

 

-R

 

/root/ppp-2.4.5/pppd/plugins/radius/etc/ /etc/radiusclient

4. 编辑

/etc/radiusclient/servers

,添加服务器和密钥

1
[root@ldap ~]# echo 'localhost MyVPN' >> /etc/radiusclient/servers

5. 下载

dictionary.microsoft

字典文件

[root@ldap ~]# cp dictionary.microsoft /etc/radiusclient/

 

-f

6. 更改 

/etc/radiusclient/dictionary

 文件
在文件末尾加入两行
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft

7. 修改 /etc/raddb/clients.conf 文件

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/clients.conf  | grep

 

-v
'^$'
client localhost {
    
ipaddr = 127.0.0.1
    
secret  = MyVPN
    
require_message_authenticator = no
    
shortname   = pptp
}

8. 更改 /etc/raddb/radiusd.conf

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/radiusd.conf  | grep

 

-v
'^$'
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid
user = radiusd
group = radiusd
max_request_time = 30
cleanup_delay = 5
max_requests = 1024
listen {
    
type = auth
    
ipaddr = *
    
port = 0
}
listen {
    
ipaddr = *
    
port = 0
    
type = acct
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions    = yes
log {
    
destination = files
    
file = ${logdir}/radius.log
    
syslog_facility = daemon
    
stripped_names = no
    
auth = no
    
auth_badpass = no
    
auth_goodpass = no
}
checkrad = ${sbindir}/checkrad
security {
    
max_attributes = 200
    
reject_delay = 1
    
status_server = yes
}
proxy_requests  = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
    
start_servers = 5
    
max_servers = 32
    
min_spare_servers = 3
    
max_spare_servers = 10
    
max_requests_per_server = 0
}
modules {
    
mschap {
        
use_mppe = yes
        
require_encryption = yes
        
require_strong = yes
    
}
    
$INCLUDE ${confdir}/modules/
    
$INCLUDE eap.conf
}
instantiate {
    
exec
    
expr
    
expiration
    
logintime
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/

9.  编辑 /etc/raddb/sites-available/default

authorize {
    
preprocess
    
chap
    
mschap
    
digest
    
suffix
    
eap {
        
ok = return
    
}
    
files
    
ldap
    
expiration
    
logintime
    
pap
}
authenticate {
    
Auth-Type PAP {
        
pap
    
}
    
Auth-Type CHAP {
        
chap
    
}
    
Auth-Type MS-CHAP {
        
mschap
    
}
    
digest
    
unix
    
Auth-Type LDAP {
        
ldap
    
}
    
eap
}
preacct {
    
preprocess
    
acct_unique
    
suffix
    
files
}
accounting {
    
detail
    
unix
    
radutmp
    
exec
    
attr_filter.accounting_response
}
session {
    
radutmp
}
post-auth {
    
exec
    
Post-Auth-Type REJECT {
        
attr_filter.access_reject
    
}
}
pre-proxy {
}
post-proxy {
    
eap
}

10.  编辑 /etc/raddb/modules/ldap

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/modules/ldap  | grep

 

-v
'^$'
ldap {
    
server = "localhost"
    
identity = "cn=root,dc=verystar,dc=cn"
    
password = 此处为LDAP root的密码
    
basedn = "ou=Users,dc=verystar,dc=cn"
    
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
    
password_attribute = userPassword
    
ldap_connections_number = 5
    
timeout = 4
    
timelimit = 3
    
net_timeout = 1
    
tls {
        
start_tls = no
    
}
    
dictionary_mapping = ${confdir}/ldap.attrmap
    
edir_account_policy_check = no
    
keepalive {
        
idle = 60
        
probes = 3
        
interval = 3
    
}
}

11. 编辑  /etc/raddb/proxy.conf

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/proxy.conf  | grep

 

-v
'^$'
proxy server {
    
default_fallback = no
}
home_server localhost {
    
type = auth
    
ipaddr = 127.0.0.1
    
port = 1812
    
secret = testing123
    
require_message_authenticator = yes
    
response_window = 20
    
zombie_period = 40
    
revive_interval = 120
    
status_check = status-server
    
check_interval = 30
    
num_answers_to_alive = 3
    
max_outstanding = 65536
    
coa {
        
irt = 2
        
mrt = 16
        
mrc = 5
        
mrd = 30
    
}
}
home_server_pool my_auth_failover {
    
type = fail-over
    
home_server = localhost
}
realm example.com {
    
auth_pool = my_auth_failover
}
realm LOCAL {
    
type        = radius
    
authhost    = LOCAL
    
accthost    = LOCAL
}
realm NULL {
    
authhost    = LOCAL
    
accthost    = LOCAL
    
secret      = MyVPN
    
type        = radius
    
nostrip
}
# 更改最后两段就行了

12. 为LDAP添加radius支持

[root@ldap ~]# cp /usr/share/doc/freeradius-2.1.12/examples/openldap.schema /etc/openldap/schema/radius.schema
[root@ldap ~]# vim /etc/openldap/slapd.conf
添加一行
include         /etc/openldap/schema/radius.schema

13. 修改 /etc/ppp/options.pptpd ,添加对radius的支持
在文件最后添加以下三行
plugin /usr/lib64/pppd/2.4.5/radius.so
plugin /usr/lib64/pppd/2.4.5/radattr.so
radius-config-file      /etc/radiusclient/radiusclient.conf

14.修改 /etc/radiusclient/radiusclient.conf ,将里面所有配置文件路径由 /usr/local/etc/xxx 改为 /etc/xxx

[root@ldap ~]# grep

 

-v

 

'#' /etc/radiusclient/radiusclient.conf  | grep

 

-v

 

'^$'
auth_order  radius
login_tries 4
login_timeout   60
nologin /etc/nologin
issue   /etc/radiusclient/issue
authserver  localhost:1812
acctserver  localhost:1813
servers     /etc/radiusclient/servers
dictionary  /etc/radiusclient/dictionary
login_radius    /usr/local/sbin/login.radius
seqfile     /var/run/radius.seq
mapfile     /etc/radiusclient/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local /bin/login

15. 重启 radius / pptpd / slapd

[root@ldap ~]# /etc/init.d/slapd restart
[root@ldap ~]# /etc/init.d/pptpd restart
[root@ldap ~]# /etc/init.d/radiusd restart

一步一步加固自己的linux系统

介绍

这个教程将一步步的指引你,使你的Linux系统变得安全。
任何默认安装的操作系统都是不够安全的,本文将指引你如何建立一个
相对安全的Linux系统。
========================================================================
1.BIOS
你应该总是在系统启动的时候设置一个BIOS密码和禁用从CD-ROM和软盘引导。
这将防止一些人未经允许访问你的系统和更改BIOS设置

2.SSH安全
SSH是一个协议,利用它可以登录到一个远程系统或远程执行系统命令,
默认允许root登录,并且sshv1存在缺陷,我们应该在
sshd_config禁止root访问和使用sshv2来让ssh更加安全。

方法:

vi /etc/ssh/sshd_config
把协议改为2

PermitRootLogin = no
重启

sshd /etc/rc.d/init.d/sshd restart

 

3.禁用telnet
早期的Linux默认开启telnet服务,telnet,ftp,rlogin都是明文传输的协议
是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因
如果你必须要使用telnet,那么至少应该隐藏banner信息

方法:
修改

/etc/xinetd.d/telnet
disable=yes
4.禁用代码编译
你可以禁用代码编译并且只把编译的权限分配给一个用户组
方法:
添加编译用户组

/usr/sbin/groupadd compiler ,cd /usr/bin
把常见的编译器所属组赋给编译用户组

chgrp compiler *cc*
chgrp compiler *++*
chgrp compiler ld
chgrp compiler as
设置mysqlaccess的访问

chgrp root mysqlaccess
设置权限

chmod 750 *cc*
chmod 750 *++*
chmod 750 ld
chmod 750 as
chmod 755 mysqlaccess
把用户添加到组里
修改/etc/group

compiler:x:520:user1,user2
5.ProFTP
你可以通过修改proftpd.conf来禁止root登陆
方法:
修改/etc/proftpd.conf

Add RootLogin off
重启

proftpd /sbin/service proftpd stop
/sbin/service proftpd start
6.TCP wrappers
编辑hosts.allow和hosts.deny可以限制或允许访问inet服务

方法:
限制访问inet服务
修改/etc/hosts.allow
建议格式:

#Approved IP addresses
ALL:192.168.0.1
ALL:192.168.5.2
#CSV uploader machine
proftpd:10.0.0.5
#pop3 from antwhere
ipop3:ALL
修改/etc/hosts.deny

ALL:ALL EXCEPT localhostENY
7.创建SU用户组
因为我们在SSH禁止了root用户访问并且禁用了telnet,所有我们应该
分配给一些用户su权限来获取root特权

方法:
vi /etc/group
添加一行 wheel:x:10:root,user1,user2

chgrp wheel /bin/su
chmod o-rwx /bin/su
8.root通知
当一个具有root权限的用户登录的时候发mail
方法:
编辑/root下的.bashrc ,当有root权限的用户登录时发生email通知

echo ‘ALERT ? Root Shell Access (Server Name) on:’ `date` `who` | mail -s “Alert: Root Access from `who | cut -d”(” -f2 | cut -d”)” -f1`” your@email.com
9.history安全
这是一个避免删除.bash_history或重定向到/dev/null的好主意
因此他不能清除或删除他最后执行的命令
方法:

chattr +a .bash_history
chattr +i .bash_history
获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务

10.使用欢迎信息
你必须提供一些信息让攻击者知道该系统不对公众开放。
在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息,
这种情况下法院不能做任何裁决,因为系统说welcome

方法:
删除/etc/redhat-release
编辑/etc/issue /etc/motd并显示警告信息

11.禁用所有特殊账户
你应该从系统中删除所有默认用户和组
例如news,lp,sync,shutdown,uucp,games,halt 等
方法:
删除账户userdel name
删除组 groupdel name
锁定特定账户:

/usr/sbin/usermod -L -s /bin/false user
12.chmod危险文件
这可能是限制不具有root权限的用户执行下面这些命令的好主意
方法:

chmod 700 /bin/ping
chmod 700 /usr/bin/finger
chmod 700 /usr/bin/who
chmod 700 /usr/bin/w
chmod 700 /usr/bin/locate
chmod 700 /usr/bin/whereis
chmod 700 /sbin/ifconfig
chmod 700 /usr/bin/pico
chmod 700 /usr/bin/vi
chmod 700 /usr/bin/which
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/make
chmod 700 /bin/rpm
13.指定允许root登陆的TTY设备
/etc/securetty文件允许你指定root可以从哪个TTY设备登录
方法:

vi /etc/securetty
只留2个连接

tty1
tty2
14.选择一个安全的密码
在/etc/login.defs文件中定义了shadow密码的具体配置
默认密码长度最短为5字符,你应该至少设置为8
方法:

vi /etc/login.defs
PASS_MIN_LEN 8
15.检测Rootkit
用chkrootkit或rkhunter,以chkrootkit为例
方法:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5
首先检查md5校验值: md5sum chkrootkit.tar.gz
然后解压安装

tar -zxvf chkrootkit.tar.gz
cd chkrootkit
./configure
make sense
然后运行./chkrootkit
我们可以将其添加到contrab使其每天自动扫描:

vi /etc/cron.daily/chkrootkit.sh
#!/bin/bash
# 输入chkrootkit的安装目录

cd /root/chkrootkit/
# 输入你想收到检测报告的email

./chkrootkit | mail -s “Daily chkrootkit from Server Name” your@email.com
16.安装补丁
你要经常检查更新以修复某些缺陷或系统稳定性的改进
否则你存在漏洞的系统将会不时的遭受新的攻击
方法:

列出可用更新:up2date -l
安装未排除的更新:up2date -u
安装包括排除的更新up2date -uf
17.隐藏Apache信息
你应该隐藏Apache的banner信息使攻击者不知道Apache的版本,从而使他们难以利用漏洞
方法:
修改/etc/httpd/conf/httpd.conf
改变服务器签名:

ServerSignature Off
重启Apache /sbin/service httpd restart

18.隐藏php信息
你应该隐藏php的banner信息,原因同上
方法:
修改php.ini
改变

expose_php=Off
重启Apache

19.关闭不用的服务
你应该把任何未使用的服务关闭,可以在/etc/xinetd.d文件夹里找到
方法:

cd /etc/xinetd.d
grep disable *
这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务

20.检测监听的端口
检测是否有必要开放端口是非常重要的
方法:

netstat -tulp或
lsof -i -n | egrep ‘COMMAND|LISTEN|UDP’或
nmap!
21.关闭端口和服务
重点是关闭在系统启动时打开的不需要的端口
方法:
对于正在运行的服务,可以执行chkconfig -list | grep on
禁用服务可以执行chkconfig servicename off
然后停止正在运行的服务:/etc/init.d/service stop

22.删除不用的rpm包
首先应该清楚你的系统的作用,它是web,mail,file服务器或其他
然后觉得哪些包是必要的,之后删除不需要的软件包
方法:
首先列出安装列表rpm -qa
更详细的信息rpm -qi rpmname
还可以检测删除包可能出现的冲突rpm -e ?test rpmname

23.禁用危险的php函数
你应该禁用php的危险函数防止在网站上执行系统命令
方法:

whereis php.ini
vi /usr/local/lib/php.ini
编辑

disable_functions = “symlink,shell_exec,exec,proc_close,proc_open,popen,
system,dl,passthru,escapeshellarg, escapeshellcmd”
24.安装配置防火墙
高级策略防火墙(APF)是一种IP表(网络过滤),它是基于当今互联网部署服务器防火墙系统的基本需要和客户部署LINUX安装的唯一需要而设计的。 它是最好的开源防

火墙之一。

配置APF防火墙方法:
下载APF:wget http://www.r-fx.ca/downloads/apf-current.tar.gz
解压安装:

tar -zxvf apf-current.tar.gz
cd apf-0.9.7-1
./install.sh
然后我们配置它vi /etc/apf/conf.apf
一般配置:
启用防火墙使用DShield.org块列表
USE_DS=”1″
然后我将列出常规的配置和CPanel配置方式,因为CPanel是应该最广泛的虚拟主机管理软件

1.常规配置(DNS,Mail,Web,FTP)

Common ingress (inbound)
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,995″
#
# Common ingress (inbound) UDP ports IG_UDP_CPORTS=”53″
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF=”1″
# Common egress (outbound) TCP ports
EG_TCP_CPORTS=”21,25,80,443,43″
#
# Common egress (outbound) UDP ports
EG_UDP_CPORTS=”20,21,53″
2.CPanel配置
Common ingress (inbound) ports
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS=”21,22,25,53,80,110,143,443,2082,2083, 2086,2087,
2095, 2096,3000_3500″
#
# Common ingress (inbound) UDP ports
IG_UDP_CPORTS=”53″
Common egress (outbound) ports
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF=”1″
# Common egress (outbound) TCP ports
EG_TCP_CPORTS=”21,25,80,443,43,2089″
#
# Common egress (outbound) UDP ports
EG_UDP_CPORTS=”20,21,53″
之后启动防火墙 /etc/apf/apf -s
如果运行良好我在回去修改配置文件,使DEVM=”0″
然后我们配置APF的AntiDos: vi /etc/apf/ad/conf.antidos

找到下面的内容并替换成你的资料

# Organization name to display on outgoing alert emails
CONAME=”Your Company”
# Send out user defined attack alerts [0=off,1=on]
USR_ALERT=”0″
#
# User for alerts to be mailed to
USR=you@yourco.com
你应把USR_ALERT改为1
保存后重启APF:/etc/apf/apf ?r

To make the firewall start with the Operating System: chkconfig ?level 2345 apf on
APF开机自启动:chkconfig ?level 2345 apf on
禁止一个IP用/etc/apf/apf -d ip或vi /etc/apf/deny_hosts.rules
允许一个IP用/etc/apf/apf -a ip或vi /etc/apf/deny_hosts.rules

25.安装配置BFD(暴力破解检测)
BFD是一个用于分析应用日志和检测验证失败的模块化shell脚本
而且安装配置和用法都是非常容易的。使用BFD的原因很简单。
其实在LINUX领域几乎没有结合防火墙或实时设备来监控不验证和
暴力攻击审计的程序。在用BFD之前你必须安装APF防火墙。

方法:

wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
tar -zxvf bfd-current.tar.gz
cd bfd-0.9
然后我们来配置它 vi /usr/local/bfd/conf.bfd
把以下内容改为你的资料

# Enable/disable user alerts [0 = off; 1 = on]
ALERT_USR=”1″
#
# User alert email address
EMAIL_USR=”your@mail.com”
#
# User alert email; subject
SUBJ_USR=”Brute Force Warning for $HOSTNAME”
#
然后vi /usr/local/bfd/ignore.hosts
把你的IP设置成允许主机,避免意外的锁定自己。
之后重启BFD /usr/local/sbin/bfd -s

26.内核加固(sysctl.conf)
sysctl.conf用来加固内核,目的是避免DOS和欺骗攻击
方法:
到/proc/sys目录或sysctl -a命令了解下当前配置的大概情况
然后vi /etc/sysctl.conf
添加如下内容:

# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
#Prevent SYN attack
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Disables packet forwarding
net.ipv4.ip_forward=0
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
14
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Modify system limits for Ensim WEBppliance
fs.file-max = 65000
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
# Set maximum amount of memory allocated to shm to 256MB
kernel.shmmax = 268435456
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# Improve virtual memory performance
vm.buffermem = 90 10 60
# Increases the size of the socket queue (effectively, q0).
net.ipv4.tcp_max_syn_backlog = 1024
# Increase the maximum total TCP buffer-space allocatable
net.ipv4.tcp_mem = 57344 57344 65536
# Increase the maximum TCP write-buffer-space allocatable
net.ipv4.tcp_wmem = 32768 65536 524288
15
# Increase the maximum TCP read-buffer space allocatable
net.ipv4.tcp_rmem = 98304 196608 1572864
# Increase the maximum and default receive socket buffer size
net.core.rmem_max = 524280
net.core.rmem_default = 524280
# Increase the maximum and default send socket buffer size
net.core.wmem_max = 524280
net.core.wmem_default = 524280
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000
# Allowed local port range
net.ipv4.ip_local_port_range = 16384 65536
# Increase the maximum memory used to reassemble IP fragments
net.ipv4.ipfrag_high_thresh = 512000
net.ipv4.ipfrag_low_thresh = 446464
# Increase the maximum amount of option memory buffers
net.core.optmem_max = 57344
# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 1024
## DO NOT REMOVE THE FOLLOWING LINE!
## nsobuild:20051206
重启后生效
/sbin/sysctl -p

sysctl -w net.ipv4.route.flush=1
27.更改SSH端口
更改SSH默认端口号在一定程度上可以提高安全性
方法:
vi /etc/ssh/sshd_config
Port 22改为其他端口
当然不要忘记把更改的端口加进防火墙
然后重启生效/etc/init.d/ssh restart
如果安装了APF并把端口添加之后,还要重启APF:/etc/init.d/apf restart

28./tmp,/var/tmp,/dev/shm分区的安全
/tmp,/var/tmp,/dev/shm目录是不安全的,任何用户都可以执行脚本。
最好的解决办法是挂载ncexec和nosuid选项的参数
注意:不建议在CPanel使用
方法:
/tmp目录:
cd /dev
创建 100M (“count”) 的存储文件:
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
设为一个扩展的文件系统:

/sbin/mke2fs /dev/tmpMnt (“…is not a block special device. continue?”回答yes)
备份现有临时文件:

cp -R /tmp/ /tmp_backup
用noexec挂载新文件系统:

mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
chmod 0777 /tmp
把备份的文件拷贝回去:

cp -R /tmp_backup/* /tmp/
删除备份:

rm -rf /tmp_backup
修改/etc/fstab 添加下面的条目使其在引导时仍然有效

/dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0
/var/tmp目录:

mv /var/tmp /var/tmpbak
ln -s /tmp /var/tmp
cp /var/tmpbak/* /tmp/
/dev/shm目录:
编辑/etc/fstab
把 none /dev/shm tmpfs defaults,rw 0 0
改为

none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0

Linux防火墙iptables简明教程

Linux防火墙iptables简明教程

  1. 安装iptables
  2. 查看现有的iptables规则
  3. 删除某iptables规则
  4. 清除现有iptables规则
  5. 创建规则
  6. 设置开机启动
  7. 保存iptables规则
  8. iptables在手动防CC攻击中的简单应用

 

1.安装iptables

很多Linux已经默认安装iptables,可使用后文的查看命令测试是否安装

CentOS/RedHat下执行:

yum install iptables

Debian/Ubuntu下执行:

apt-get install iptables

 

2.查看现有的iptables规则

命令后面的line-number为显示行号(将规则一则一则输出,并显示行号),可选,方便后文的删除指令。

iptables -L -n –line-numbers

 

3.删除某iptables规则

例如,删除第12行的规则,行号可由之前的命令查看

iptables -D INPUT 12

 

4.清除现有iptables规则

iptables -F
iptables -X
iptables -Z

 

5.创建规则

a).开放端口

命令iptables -A INPUT -j REJECT将屏蔽其他未授权的端口,因此请务必开放22端口以保障SSH连接正常~

#允许本机访问
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

b).屏蔽ip

iptables -I INPUT -s 123.123.123.123 -j DROP

可通过更换上述ip为ip段来达到屏蔽ip段的目的~

若需屏蔽整个ip段(123.0.0.1到123.255.255.254)则换为123.0.0.0/8
若需屏蔽ip段123.123.0.1到123.123.255.254,则换为124.123.0.0/16
若需屏蔽ip段123.123.123.1到123.123.123.254则换为123.123.123.0/24

 

6.设置开机启动

一般在安装iptables完成后,开机启动会自动设置成功,但在个别CentOS系统上,貌似还有些问题,可以使用如下命令手动设置

chkconfig –level 345 iptables on

 

7.保存iptables规则

service iptables save

 

8.iptables在手动防CC攻击中的简单应用

关于获取攻击者ip的方法,可以通过很多方法获取,如查看网站日志等,本文不再赘述。

a).建立要屏蔽的ip/ip段文件,名为ip.txt

#屏蔽的ip
123.4.5.6
#屏蔽的ip段(编写方法,同前文)
123.4.5.6/24

b).建立block_ip.sh脚本文件

#!/bin/sh
# Filename: block_ip.sh
# Purpose:  blocks all IP address/network found in a text file
#               The text file must have one IP address or network per line
#################################################################

# Change the following path/filename to match yours
IP_LIST_FILE=/path/to/ip.txt

#################################################################
# Don't change anything below unless you are a smarty pant!
#################################################################
IPTABLES_BIN=/sbin/iptables

# Get the IP address/network from the file and ignore any line starting with # (comments)
BAD_IP_ADDR_LIST=$(grep -Ev "^#" $IP_LIST_FILE)

# Now loop through the IP address/network list and ban them using iptabels
for i in $BAD_IP_ADDR_LIST
do

echo -n "Blocking $i ...";
$IPTABLES_BIN -A    INPUT -s $i -j DROP
$IPTABLES_BIN -A OUTPUT -d $i -j DROP

echo "DONE.";
done
##################################################################
# END OF SCRIPT - NOTHING TO SEE HERE - THAT'S ALL FOLKS!
##################################################################

c).运行脚本

sh /path/to/block_ip.sh