最新发表

解决Out of socket memory

最近有几台服务器日志里大量报这个报错:

Out of socket memory
kernel: TCP: too many of orphaned sockets

导致服务器流量跑不上去。

都是因为net.ipv4.tcp_mem参数设置太小引起的

vim /etc/sysctl.conf
RHEL5里默认是:

net.ipv4.tcp_mem = 786432 1048576 1572864
改大些就可以了。

然后执行sysctl -p就可以了

Apache上安装MOD_SSL,配置HTTPS服务器(2)

Apache2上配置https,实现客户端CA证书认证

第一步实现传统的http,

第二步要实现https, 这里重复一些:
主要是这个文件

$PATH/apache2/conf/extra/ssl.conf:

SSLCertficateFile $PATH/apache2/conf/server.crt
SSLCertificateKeyFile $PATH/apache2/conf/server.key

这两行要打开.

怎么产生server.crt 和 server.key, 用法如下:

cd $PATH/apache2/conf/
openssl genrsa -des3 -out server.key 1024 ##记好server.key的密码(重启apache需要此密码)

openssl req -new -key server.key -out server.csr ##输入server.key的密码

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt ##输入server.key的密码

然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: shanghai 省份名称
Locality Name: shanghai 城市名称
Organization Name: xxxooo 公司名称
Organizational Unit Name: SA 管理主机部门名称
Common Name: 服务器IP或是主机名
Email Address: xxxooo@mail.com SA的Email地址

(这个是自己给自己认证,你也可以先产生这个server.csr, 然后去verisign 用它30天免费的server.crt

到此,你的HTTPS应该可以起来.如果看见一些错误.error 98 mod_socket之类的. 多数是httpd.conf 文件中, 要有Include conf.d/httpd-ssl.conf

而同时使用port 443, 与 $PATH/apache2/conf/extra/ssl.conf文件中port 443重复使用了. 基本上httpd.conf不用改,而只改ssl.conf就可以了. (折腾了我好一会这里,:-( )

现在你的https可以起来, 但人人可以去,我们最终的目的是只有你签发的certificate的用户才可以,所以接着走…

第三步https的CA认证:
1、ssl.conf 文件中要去掉如下行前的#:

SSLCACertificateFile $PATH/apache2/conf/myca.crt
SSLVerifyClient require
SSLVerifyDepth 1

2、在 cd $PATH/apache2/conf/

openssl genrsa -des3 -out myca.key 1024 ##记好myca.key的密码
openssl req -new -x509 -days 3650 -key myca.key -out myca.crt ##输入myca.key的密码

然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: shanghai 省份名称
Locality Name: shanghai 城市名称
Organization Name: xxxooo 公司名称
Organizational Unit Name: SA 使用部门名称
Common Name: sakia 客户端使用者
Email Address: xxxooo@mail.com 客户端使用者Email地址

现在我们有了这个myca.crt, 这个CERT相当与一个图章,用这个图章盖过的请求才可以访问你的HTTPS, 这才是目的.

3、生成一个csr文件和privkey.pem文件

openssl req -new > public.csr ##输入public.csr的密码

生成privkey.pem和public.csr两个文件
用户产生了一个请求CSR文件. 用图章盖过印的CSR请求, 产生一个cert才有效,这就是这个目的.

4、$PATH/apache2/conf/目录下应该有你刚才产生的myca.key & myca.crt

openssl x509 -req -in public.csr -out public.crt -signkey myca.key -CA myca.crt -CAkey myca.key -CAcreateserial -days 3650
##输入myca.key的密码,再次输入maca.key的密码

在$PATH/apache2/conf/下面,应该产生了public.crt这个文件. 也就是一个盖过章的certificate.

5、这个certificate是BASE64形式的,要转成PKCS12才能装到IE,/NETSCAPE上.所以你要:

cd $PATH/apache2/conf/

openssl pkcs12 -export -in public.crt -inkey myca.key -out public.pfx ##先输入myca.key的密码验证,然后定义客户端证书的密码

6、到此为止,基本上大功告成. 把这个public.pfx装到你的IE下,证书下.用default 安装,不用变革路经.
在客户端安装证书的方法:
安装你在第一步生成的ca.crt文件,打开web浏览器,“工具”—“Internet选项”—“内容”—“证书”选择导入证书,然后按照提示一步一步完成安装。或者你双击证书文件按照提示一步一步安装证书。

7、重起HTTPS, 在用有certificate的IE去访问. ——– 如果一切顺利,是不是心情很爽?

主人和奴隶

一群孩子在一位老人家门前嬉闹,叫声连天。几天过去,老人难以忍受。

于是,他出来给了每个孩子25美分,对他们说:“你们让这儿变得很热闹,我觉得自己年轻了不少,这点钱表示谢意。”

孩子们很高兴,第二天仍然来了,一如既往地嬉闹。老人再出来,给了每个孩子15美分。他解释说,自己没有收入,只能少给一些。15美分也还可以吧,孩子仍然兴高采烈地走了。

第三天,老人只给了每个孩子5美分。

孩子们勃然大怒,“一天才5美分,知不知道我们多辛苦!”他们向老人发誓,他们再也不会为他玩了!

——————————
在这个寓言中,老人的算计很简单,他将孩子们的内部动机“为自己快乐而玩”变成了外部动机“为得到美分而玩”,而他操纵着美分这个外部因素,所以也操纵了孩子们的行为。寓言中的老人,像不像是你的老板、上司?而美分,像不像是你的工资、奖金等各种各样的外部奖励?

人的动机分两种:内部动机和外部动机。如果按照内部动机去行动,我们就是自己的主人。如果驱使我们的是外部动机,我们就会被外部因素所左右,成为它的奴隶。

Apache上安装MOD_SSL,配置HTTPS服务器(1)

apache的mod_ssl只能静态编译进去,不能动态加载上去
编译参数 –enable-ssl
编译安装时要安装openssl

手工签署证书的方法
虽然在安装MOD_SSL时已经使用 make certificate 命令建立了服务器
的证书签名,但是有时你可能需要改变它。

当然有很多自动的脚本可以实现它,但是最可靠的方法是手工签署
证书。

首先我假定你已经安装好了openssl和MOD_SSL,如果你的openssl安装时的prefix设置为/usr/local/openssl,那么把/usr/local/openssl/bin加入执行文件查找路径。

第一步:先建立一个 CA 的证书
1、首先为 CA 创建一个 RSA 私用密钥

openssl genrsa -des3 -out ca.key 1024

##系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。
## -des3 加参数有提示输入密码,无此参数无需输入密码.此密码做重启apache时使用,保证安全 ###

chmod 400 ca.key

##生成 ca.key 文件,将文件属性改为400,并放在安全的地方。

openssl rsa -noout -text -in ca.key

##你可以用下列命令查看它的内容,

1、利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构)

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

##然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: An Hui 省份名称
Locality Name: Bengbu 城市名称
Organization Name: Family Network 公司名称
Organizational Unit Name: Home 部门名称
Common Name: Chen Yang 你的姓名
Email Address: sunstorm@263.net Email地址

chmod 400 ca.crt

##生成 ca.crt 文件,将文件属性改为400,并放在安全的地方

openssl x509 -noout -text -in ca.crt

##你可以用下列命令查看它的内容

lighttpd,thttpd,shttpd - 轻量级webserver介绍

国内绝大部分的web server不是IIS就是Apache,而论市场占有率,Apache是大赢家了,至少是占据了半壁江山。

但除了IIS/Apache外,其实我们有很多选择,对于高负载/大并发的网站而言,高性能、轻量级的web server是一剂良药。
这里介绍一下这些可选的对象:
lighttpd | thttpd | shttpd

lighttpd
官方主页:www.lighttpd.net
Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。

lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。

实用起来lighttpd确实非常不错,曾今做过下载网站的web server,很烂的机器上,连接多,apache一跑就要死机的机器改用lighttpd居然跑的很好。
上文提到的apache overload的问题,用lighttpd就完全解决了。apache主要的问题是密集并发下,不断的fork()和切换,以及较高(相对于 lighttpd而言)的内存占用,使系统的资源几尽枯竭。而lighttpd采用了Multiplex技术,代码经过优化,体积非常小,资源占用很低,而且反应速度相当快。

利用apache的rewrite技术,将繁重的cgi/fastcgi任务交给lighttpd来完成,充分利用两者的优点,现在那台服务器的负载下降了一个数量级,而且反应速度也提高了一个甚至是2个数量级!

thttpd

官方网站:http://www.acme.com/software/thttpd/
thttpd 是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持,在其官方网站上有一个与其他web server(如Apache, Zeus等)的对比图+Benchmark,可以参考参考。此外,thttpd 也类似于lighttpd,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。因此效能很好。

Thttpd支持多种平台,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。对于小型web server而言,速度快似乎是一个代名词,通过官方站提供的Benchmark,可以这样认为:thttpd至少和主流的web server一样快,在高负载下更快,因为其资源占用小的缘故。

Thttpd还有一个较为引人注目的特点:基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。象Apache就必须使用插件实现,效率较thttpd低。

shttpd
官方网站:http://shttpd.sourceforge.net/Shttpd是另一个轻量级的web server,具有比thttpd更丰富的功能特性,支持CGI, SSL, cookie, MD5认证, 还能嵌入(embedded)到现有的软件里。最有意思的是不需要配置文件!
由于shttpd可以嵌入其他软件,因此可以非常容易的开发嵌入式系统的web server,官方网站上称shttpd如果使用uclibc/dielibc(libc的简化子集)则开销将非常非常低。以下是其特点:

Stand-alone server, or embeddable into existing C/C++ program
GET, POST, PUT, DELETE methods
CGI
SSL
Digest (MD5) authorization
Multiple (and user defineable) index files
Directory listing
Standard logging
Cookies
inetd mode
User-defineable mime types
No configuration files
No external dependencies

由于shttpd可以轻松嵌入其他程序里,因此shttpd是较为理想的web server开发原形,开发人员可以基于shttpd开发出自己的webserver!

nagios被监控机nrpe安装脚本

自动安装脚本install.sh如下

#!/bin/sh

tar zxf nagios-plugins-1.4.13.tar.gz
tar zxf nrpe-2.12.tar.gz

groupadd ngroup
useradd nuser -g ngroup -d /nonexistent -s /sbin/nologin

cd nagios-plugins-1.4.13
./configure –prefix=/opt/nagios –enable-perl-modules –with-nagios-user=nuser –with-nagios-group=ngroup
make
make install && cd -

cd nrpe-2.12
./configure –prefix=/opt/nagios –with-ssl –with-nrpe-user=nuser –with-nrpe-group=ngroup –with-nagios-user=nuser –with-nagios-group=ngroup
make all
make install-plugin
make install-daemon
make install-daemon-config && cd -

chown nuser:ngroup /opt/nagios
chown -R nuser:ngroup /opt/nagios/libexec

INTRANET=`ifconfig | grep -w -A 1 eth1 | grep ‘inet addr’ | head -1 | awk -F: ‘{print $2}’ | awk ‘{print $1}’`

sed -i ’s/server_address=127.0.0.1/server_address=’${INTRANET}’/’ /opt/nagios/etc/nrpe.cfg

sed -i.bak /’nrpe/d’ /etc/rc.d/rc.local && \
echo ‘/opt/nagios/bin/nrpe -c /opt/nagios/etc/nrpe.cfg -d’ >> /etc/rc.local && \
kill -9 `cat /var/run/nrpe.pid` ; /opt/nagios/bin/nrpe -c /opt/nagios/etc/nrpe.cfg -d

将次脚本install.sh和nagios-plugins-1.4.13.tar.gz,nrpe-2.12.tar.gz放在同一个目录,然后执行install.sh即可,方便部署

PuTTY自带的plink.exe实现ssh tunnel

公司现在做了防火墙和监控,针对一些服务做了限制,为了绕开这个限制,这里就发一个利用PuTTY和plink绕墙/开代理的办法。

理论上说,支持ssh version2远程登录的主机可以当成一台socks5代理服务器。

PuTTY的图形化界面也可以配置出一个代理,但是那个用鼠标点击的不自动
1

PuTTY完整版自带的PLINK.exe可以完美的做这个事情,命令是:

PLINK.EXE -C -N -D 127.0.0.1:7000 est@202.115.22.x:21314

解释成中文:

PLINK.EXE -启用数据压缩 -不要shell -端口动态转发 代理IP:端口 远程主机用户名@远程主机IP:端口

就这么简单。

如果是Linux下,直接使用ssh命令就可以了:

ssh -CfNg -D 127.0.0.1:7000 est@202.115.22.x:21314

代理设置好了之后,在Firefox下这样设置:

2

最后,到http://www.ip138.com/检查自己的IP是否变成代理服务器的IP了

卡巴斯基报CNZZ统计代码有病毒!

卡巴斯基报CNZZ统计代码有病毒截图

卡巴斯基报CNZZ统计代码有病毒!

早上上班看了几个网站都报有病毒,不知道是卡巴斯基误杀还是CNZZ被挂马,反正有一方肯定有问题,回顾历史,卡巴的杀伤力人尽皆知,我估计是卡巴的问题,只是猜测!

nagios问题 NRPE: Command ‘check_disk’ not defined

状态信息: NRPE: Command ‘check_disk’ not defined

在命令行下:
[root@nagiosserver etc]# ../libexec/check_nrpe -H 192.168.1.12 -c check_disk
NRPE: Command ‘check_disk’ not defined

这个需要监控与被监控端命令配置要必须一致,否则就会出现如上的错误。

被监控机:
etc/nrpe.cfg
错误

command[check_hda1]=/opt/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1:

正确

command[check_disk]=/opt/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1

CHECK_NRPE: Error - Could not complete SSL handshake 错误解决

CHECK_NRPE: Error - Could not complete SSL handshake

1、Different versions. Make sure you are using the same version of the check_nrpe plugin and the NRPE daemon. Newer versions of NRPE are usually not backward compatible with older versions.
2、SSL is disabled. Make sure both the NRPE daemon and the check_nrpe plugin were compiled with SSL support and that neither are being run without SSL support (using command line switches).
3、Incorrect file permissions. Make sure the NRPE config file (nrpe.cfg) is readable by the user (i.e. nagios) that executes the NRPE binary from inetd/xinetd.
4、Pseudo-random device files are not readable. Greg Haygood noted the following… “After wringing my hair out and digging around with truss, I figured out the problem on my Solaris 8 boxen. The files /devices/pseudo/random* (linked through /dev/*random, and provided by Sun patch 112438) were not readable by the nagios user I use to launch NRPE. Making the character devices world-readable solved it.”
5、Unallowed address. If you’re running the NRPE daemon under xinetd, make sure that you have a line in the xinetd config file that say “only_from = xxx.xxx.xxx.xxx”, where xxx.xxx.xxx.xxx is the IP address that you’re connected to the NRPE daemon from.

简单说一下,大概的内容,不是严格翻译。
1. 确认check_nrpe 和 nrpe daemon的版本一定要一致。
2. 确认 check_nrpe和nrpe deamon端同时启用或者禁用ssl支持。
3. 确认nrep.cfg可以被nrpe(或者nagios,反正是执行nrep或者xinetd/inetd程序的)用户正常读取。
4. 有关伪随机设备的问题。这个只会在solaris 8上出现,需要一个补丁Sun patch 112438。
5. 确定nagios主机在xinetd的 only_from中,如果没有使用xinetd,则要确认nrpe.cfg中的配置。

另外,赠送l两个,
1. 检查一下你的Windows或者Linux自带的防火墙,是否把端口给filter掉了。
2. 把nrpe的的log打开,可以发现更多有用的信息。

很有可以能是客户端的配置文件 nrpe.cfg

allowed_hosts=192.168.200.29

这行没加server端的许可ip