存档

‘解决方案’ 分类的存档

php扩展php_curl.dll不加载解决方法

2013年5月3日 没有评论

方法一(已通过测试)已经内置有php_curl.dll,在ext目录下,此DLL用于支持SSL和zlib.
在php.ini中找到有extension=php_curl.dll, 去掉前面的注释.
设置extension_dir=c:\php\ext, 刷新PHP页面时报错, 说找不到模块php_curl.dll.
拷贝php_curl.dll 到windows\system32,还是同样的错.
在网上找了一下,需要将:
libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll
都拷贝到system32目录下,重启apache即可.

方法二也可试试:
这个php_curl.dll就依赖两个文件(ssleay32.dll和libeay32.dll)如果这两个文件没有配置对那么就会提示找不到此动态库,这两个文件在php的目录下面。
解决办法:在Apache的httpd.conf的文件中配置一下:
LoadFile “D:/webserver/php/ssleay32.dll”
LoadFile “D:/webserver/php/libeay32.dll”
然后重启一下apache服务就ok了。

ps:不管是iis还是apache,直接复制以上三个dll文件到system32目录下一般就可以解决问题。反正这三个文件是一定要在一起才生效。不然不行。

linux(centos)绑定ARP的方法

2013年4月16日 没有评论

ARP协议是“Address Resolution Protocol”(地址解析协议) 的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主 机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标 MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

而ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。

在工作中经常遇到有服务器受到ARP欺骗攻击,严重影响了网络的正常运营,于是想到将网关的ARP条目进行绑定。

本文是关于linux服务器下arp网关的绑定

1、查看网关的arp信息
[root@Vtest ~]# arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.103 ether 00:16:ea:27:7b:04 C eth0
192.168.1.1 ether 40:16:9f:6c:39:1e C eth0

说明:
Address: 主机的IP地址
Hwtype: 主机的硬件类型
Hwaddress:主机的硬件地址
Flags Mask:记录标志,”C”表示arp高速缓存中的动态条目,”CM”表示静态的arp条目。

我们需要绑定的就是192.168.1.1所在的一行。

2、建立一个静态IP –>>mac对应的文件
[root@Vtest ~]#echo ’192.168.1.1 40:16:9f:6c:39:1e’>>/etc/ip-mac

3、设置开机自动绑定

arp信息重启后会清空,所以需要开机的时候自动绑定。服务器启动过程最后运行的脚本是rc.local,我们把绑定的命令就加到这个文件的最后一行。

[root@Vtest ~]#echo ‘arp -f /etc/ip-mac’ /etc/rc.local

4、手动绑定一下
[root@Vtest ~]#echo arp -f /etc/ip-mac

[root@Vtest ~]#arp -s 192.168.1.1 40:16:9f:6c:39:1e
5、验证
[root@Vtest ~]# arp -a
(192.168.1.103) at 00:16:ea:27:7b:04 [ether] on eth0
(192.168.1.1) at 40:16:9f:6c:39:1e [ether] PERM on eth0
[root@Vtest ~]# arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.103 ether 00:16:ea:27:7b:04 C eth0
192.168.1.1 ether 40:16:9f:6c:39:1e CM eth0

从以上显示的信息来看,已经绑定成功了,第一个命令结果中的”PERM”表示Permanent,永久的意思,即绑定成永久arp条目。到这里绑定就完成了,你的网关arp绑定了么,为了稳定运行,赶快绑定吧。

6、这只能防住一些arp攻击,如果将网内所有ip mac导入ethers文件,能有效的防止arp攻击
安装nmap:

rpm -vhU http://nmap.org/dist/nmap-6.25-1.i386.rpm
rpm -vhU http://nmap.org/dist/zenmap-6.25-1.noarch.rpm
rpm -vhU http://nmap.org/dist/ncat-6.25-1.i386.rpm
rpm -vhU http://nmap.org/dist/nping-0.6.25-1.i386.rpm
扫描同网段所有ip
nmap -sP 192.168.1.0/24 2>&1 | tee ip.log
扫描,结果我的arp表里就有那个网段所有机器的mac,将所有信息复制至/etc/ip-mac文件

解决mysql数据库Forcing close of thread 的错误提示

2013年4月8日 没有评论

今天发现客户的网站老出现打不开的情况,发现连接数有超出的现象,但观察系统事件日志,都是下面的错误:

MySQL: Forcing close of thread **** user:”

事件类型: 警告
事件来源: MySQL
事件种类: 无
事件 ID: 100
日期: 2013-4-8
事件: 12:21:01
用户: N/A
计算机: vps12com0630
描述:
MySQL: Forcing close of thread 123756 user: ”

For more information, see Help and Support Center at http://www.mysql.com.

检查系统资源和连接数都是正常的情况下,没有找到解决办法。

在mysql配置文件my.ini 的 [mysql] 下面加上这个解决问题了!

skip-locking
skip-name-resolve

其他的同类错误要注意查看日志。新版本mysql的写法应该是:

skip-external-locking
skip-name-resolve

利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数

2013年3月5日 没有评论

利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数。

这几天在学习研究shell脚本,写的一些系统负载、CPU、内存、硬盘、用户数监控脚本程序。在没有nagios监控的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统资源的使用情况。

一、编写linux系统告警邮件脚本

1
# vim /scripts/sys-warning.sh
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
#!/bin/bash
#监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。
 
#提取本服务器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
 
# 1、监控系统负载的变化情况,超出时发邮件告警:
 
#抓取cpu的总核数
cpu_num=`grep -c 'model name' /proc/cpuinfo`
 
#抓取当前系统15分钟的平均负载值
load_15=`uptime | awk '{print $12}'`
 
#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
 
#取上面平均负载值的个位整数
average_int=`echo $average_load | cut -f 1 -d "."`
 
#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
load_warn=0.70
 
#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
if (($average_int > 0)); then
echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" test@126.com
else
 
#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
load_now=`expr $average_load \> $load_warn`
 
#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
if (($load_now == 1)); then
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" test@126.com
fi
 
fi
 
# 2、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
 
#取当前空闲cpu百份比值(只取整数部分)
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
 
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
if (($cpu_idle < 20)); then
echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" test@126.com
fi
 
# 3、监控系统交换分区swap的情况,当使用超过80%的时候发告警邮件:
 
#系统分配的交换分区总量
swap_total=`free -m | grep Swap | awk '{print $2}'`
 
#当前剩余的交换分区free大小
swap_free=`free -m | grep Swap | awk '{print $4}'`
 
#当前已使用的交换分区used大小
swap_used=`free -m | grep Swap | awk '{print $3}'`
 
if (($swap_used != 0)); then
#如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
 
#设置交换分区的告警值为20%(即使用超过80%的时候告警)。
swap_warn=0.20
 
#当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
swap_now=`expr $swap_per \> $swap_warn`
 
#如果当前交换分区使用超过80%(即剩余小于20%,上面的返回值等于0),立即发邮件告警
if (($swap_now == 0)); then
echo "$IP服务器swap交换分区只剩下 $swap_free M 未使用,剩余不足20%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器内存告警" test@126.com
fi
 
fi
 
# 4、监控系统硬盘根分区使用的情况,当使用超过80%的时候发告警邮件:
 
#取当前根分区(/dev/sda3)已用的百份比值(只取整数部分)
disk_sda3=`df -h | grep /dev/sda3 | awk '{print $5}' | cut -f 1 -d "%"`
 
#设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
if (($disk_sda3 > 80)); then
echo "$IP 服务器 /根分区 使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器硬盘告警" test@126.com
fi
 
#5、监控系统用户登录的情况,当用户数超过3个的时候发告警邮件:
 
#取当前用户登录数(只取数值部分)
users=`uptime | awk '{print $6}'`
 
#设置登录用户数的告警值为3个,如果当前用户数超过3个,立即发邮件告警
if (($users >= 3)); then
echo "$IP 服务器用户数已经达到$users个,请及时处理。" | mutt -s "$IP 服务器用户数告警" test@126.com
fi
1
# chmod a+x /scripts/sys-warning.sh

二、加入任务计划:每十分钟检测一次,有告警则立即发邮件(十分钟发一次)。

1
2
3
# crontab -e
*/10 * * * *  /scripts/sys-warning.sh 
# service crond restart

三、要实现服务器能够发邮件,须开启Sendmail服务或是安装linux下面的一个邮件客户端msmtp软件(类似于一个foxmail的工具)

1、下载安装:http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2?modtime=1217206451&big_mirror=0

1
2
3
4
5
# tar jxvf msmtp-1.4.16.tar.bz2
# cd msmtp-1.4.16
# ./configure --prefix=/usr/local/msmtp
# make
# make install

2、创建msmtp配置文件和日志文件(host为邮件域名,邮件用户名test,密码123456)

1
2
3
4
5
6
7
8
9
10
# vim ~/.msmtprc
account default  
host 126.com
from test@126.com
auth login
user test
password 123456
logfile ~/.msmtp.log
# chmod 600  ~/.msmtprc
# touch ~/.msmtp.log

3、mutt安装配置:(一般linux下有默认安装mutt)

1
2
3
4
5
6
7
set sendmail="/usr/local/msmtp/bin/msmtp"
set use_from=yes
set realname="memory"
set from=test@126.com
set envelope_from=yes
set rfc2047_parameters=yes
set charset="utf-8"

4、邮件发送测试(-s邮件标题)   # echo “邮件内容123456″ | mutt -s “邮件标题测试邮件”   test@126.com

cactiEZ服务器重启后,显示黑条并获取不到图形的解决办法

2013年2月26日 没有评论

如图,cactiEZ服务器重启后,显示黑条并获取不到图形的解决办法!

网上有朋友说:在root下输入两条命令:自动修复下数据库

1
2
3
mysqlcheck --auto-repair --databases syslog
 
mysqlcheck --auto-repair --databases cacti

ps:其实直接用phpmyadmin进入数据库修复下全部的表!然后过一会,就可以恢复取到数据了。

使用U盘启动安装Windows 7/Windows Server 2008 R2

2013年2月1日 没有评论

方案1:

安装前准备一个8g左右的u盘。然后进入win7或是win2008系统下。按以下步骤操作:

步骤一:以管理员身分开启一个cmd.exe,接下来运行diskpart。

步骤二:运行list disk,将目前所有的磁盘列出来。

步骤三:找到您的U盘磁盘,此例子我的U盘是磁盘1,所以运行select disk 1。

步骤四:运行clean,将U盘里面的数据清空。

步骤五:运行create partition primary,建立分区。

步骤六:运行select partition 1选择该分区。

步骤七:运行active,将目前分区标示为活动。

步骤八:运行format fs=ntfs,将目前的分区格式化成NTFS格式。

步骤九:运行exit退出diskpart。

步骤十:将现有的Windows 7或是Windows Server 2008 R2介质放入光驱,然后将所有的文件复制到U盘。
复制完毕之后,在开机的时候,选择透过U盘启动,这时候就可以透过U盘启动安装操作系统了。

 

方案2:

U盘把Windows server 2008光盘镜像做成U盘安装效果和光盘安装一样.下面就是制作方法:

1. 8G U盘一个.  UltraISO软件(下面有下载)

2.首先插入U盘格式化成FAT文件系统,打开UltraISO软件

(1)用UltraISO软件打开Windows server 2008光盘镜像
(2)点击菜单 “启动”-写入硬盘映像
(3)写入方式改成USB-HDD ,点击便捷启动-写入新硬盘主引导记录(MBR)-USB-HDD
(4)点击写入
写入完毕就做好了然后重启把BIOS里的启动项调成USB-HDD启动保存后重启就可以安装了安装windows server 2008过程中会要求重启,这点要注意在重启时一定要把BIOS里的启动项调回硬盘启动。

命令行不能输入中文

2012年12月6日 没有评论

经常用维护服务器时要用到cmd命令窗口的朋友,有时会遇到cmd命令行窗口不能输入中文的情况!反正我是遇到了!以上是正常的。有天突然发现不能输入中文了。

原因:
其实是conime.exe这个程序的问题,conime.exe是输入法编辑器相关程序,允许用户使用标准键盘就能输入复杂的字符与符号! 在运行cmd.exe之后会出现。但是conime.exe并不是cmd.exe的子进程,它的的父进程ID并没有在任务管理器中显示。

解决方案:
首先看看C:\WINDOWS\system32文件夹(我的XP系统装在C盘)下conime.exe文件存不存在,如果存在,就关掉所有命令提示符窗口,然后在运行里输入,regedit打开注册表,找到以下项目:
HKEY_CURRENT_USER\Consolead 在 Loadconime 项目双击把 DWORD值改为1,然后重新开启Cmd命令行试试看吧!

iis下进行伪静态配置时提示系统找不到指定的文件的解决办法

2012年11月25日 没有评论

出现的情况:
windows2003系统iis6环境安装了静态化插件,配置wp及dzbbs时,老显示系统找不到指定的文件。空间是支持伪静态的,其他的网站可正确使用,这个是什么原因?查找了半天。以为是规则文件不对,但确认规则文件正确后,重启iis,还是如此。

查找原因:
iis下进行伪静态配置时提示系统找不到指定的文件的原因基本可以确认为以下几个:
1、检查是否成功添加Helicon目录权限。
2、检查是否成功添加你需要伪静态站点的目录权限。
3、是否重启过IIS。
4、是否有在IIS整个网站中删除ISAPI_Rewrite3,如果没有,重复应用了,也会有冲突。

解决问题:
经查iis网站所在目录少配置了权限NETWORK SERVICE!加入读取和写入权限。问题解决。

MSSQL2000安装SN问题

2012年11月11日 没有评论

在windows 2003 server 以前版本的操作系统上好像从来没有出现过要输入CDKEY,但在windows 2003 server打上SP1和域控制器环境下却在安装过程中出现输入CDKEY的界面,提示提示无法验证产品密钥,CDKEY不对?

解决办法如下:
环境: windows 2003 server + SP2企业VOL版 域控环境
安装数据库: MSSQL 2000

在给出的输入CDKEY的界面中,输入你已经安装的windows server 2003 的CDKEY即可以继续安装,而不是SQL 2000的CDKEY。

比如输入SQL2000的序列号:
SN:311-0432642
CD-KEY:H6TWQ-TQQM8-HXJYG-D69F7-R84VM

不行的时候,输入2003的序列号:JCGMJ-TC669-KCBG7-HB8X2-FXG7M

希望能给遇到这种问题的IT从业人员一个帮助,祝你成功。

如何有效防止phpddos发包

2012年6月18日 没有评论

最近一段时间以来经常发现vps的客户出现发大量udp攻击包,照成网络带宽堵塞。协助客户查了一下原因是有的网站出现的代码漏洞黑客上传了php的udp发包代码。

如何有效的对此类事件的防护及处理呢?

我们可以看到php的upd代码发包过程是由于利用了php的fsockopen函数漏洞进行的。

那我们可以这样限制一下php的代码函数:

下面是两种常用的禁用fsockopen的方法。
1、修改php.ini,将 disable_functions = 后加入 fsockopen
2、修改php.ini,将 allow_url_fopen = On 改为 allow_url_fopen = Off

一般可以写成这样:

disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen

然后我们在对机器对外发udp包进行限制。windows 我已经为大家写好了规则。大家可以直接通过服务器的本地安全策略进行导入。可以有效的限制udp发包。

下载: phpddos.ipsec

Linux系统下可使用iptables防火墙进行限制udp发包,如下:

1
2
3
4
5
6
7
8
9
iptables -F
 
iptables -A OUTPUT -p udp -j DROP
 
iptables -I OUTPUT -p udp --dport 53 -d 168.95.1.1 -j ACCEPT
 
service iptables save
 
service iptables restart

注:168.95.1.1 为你linux服务器的dns。如果不知道可以用以下代码查dns

1
DNSIP=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`