工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:linux

Denyhosts安装与错误排除

最近查看linux系统日志,发现有很多陌生的公网ip在不断对服务器进行暴力破解,企图猜到系统账户和密码,除了设置一个强壮的密码之外,可以使用denyhosts来限制这些ip的不友好访问。
       Denyhosts是一个用Python编写的脚本,它会分析sshd的日志文件,当发现重复的攻击时就会记录IP/etc/hosts.deny文件,从而达到自动屏IP的功能。具体见原文档:
 
What is DenyHosts?
DenyHosts is a script intended to be run by Linux system administrators to help thwart SSH server attacks (also known as dictionary based attacks and brute force attacks).
If you've ever looked at your ssh log (/var/log/secure on Redhat, /var/log/auth.log on Mandrake, etc...) you may be alarmed to see how many hackers attempted to gain access to your server. Hopefully, none of them were successful (but then again, how would you know?). Wouldn't it be better to automatically prevent that attacker from continuing to gain entry into your system?
 

一、安装

1.       安装denyhosts
这里我下的版本是DenyHosts-2.6.tar.gz。将文件放到/root/soft下。
安装步骤:
# cd /root/soft
# tar -zxvf DenyHosts-2.6.tar.gz
# cd DenyHosts-2.6
# python setup.py install
默认安装到/usr/share/denyhosts目录下。
2.       配置
首先将denyhosts注册到服务。
/usr/share/denyhosts下,
# cp daemon-control-dist daemon-control  //提出运行脚本,daemon-control文件
# chown root daemon-control
# chmod 700 daemon-control
进入etc/init.d
# cd /etc/init.d
# ln -s /usr/share/denyhosts/daemon-control denyhost  //将脚本文件静态链接到init.d下,并命名为denyhost
# chkconfig –add denyhost //注册为denyhost服务
# chkconfig –level 2345 denyhosts on //让它自启动 ,这一步也可以在/etc/rc.local下添加/usr/share/denyhosts/daemon-control start这一行让他自启动。


 
然后修改配置文件:
 
# cd /usr/share/denyhosts/
# cp denyhosts.cfg-dist denyhosts.cfg
# vi denyhosts.cfg
具体修改如下:
vi /etc/denyhosts.cfg
 
SECURE_LOG = /var/log/secure
#ssh 日志文件,它是根据这个文件来判断的。
 
HOSTS_DENY = /etc/hosts.deny
#控制用户登陆的文件
 
PURGE_DENY = 5m
#过多久后清除已经禁止的
 
BLOCK_SERVICE  = sshd
#禁止的服务名
 
DENY_THRESHOLD_INVALID = 1
#允许无效用户失败的次数
 
DENY_THRESHOLD_VALID = 10
#允许普通用户登陆失败的次数
 
DENY_THRESHOLD_ROOT = 5
#允许root登陆失败的次数
 
HOSTNAME_LOOKUP=NO
#是否做域名反解
 
ADMIN_EMAIL = 你的邮箱地址
#管理员邮件地址,它会给管理员发邮件
 
DAEMON_LOG = /var/log/denyhosts
#自己的日志文件
      
正常情况下,这么安装便可以运行启动了:service denyhost start
/etc/hosts.deny里面有被禁止的ip地址。
 


二、错误排除

在输入运行命令时,有错误提示打不开denyhosts.py文件,没有这个目录。如:
 
#service denyhost start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory
经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件
#vi daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"
 
将第一行修改为DENYHOSTS_BIN   = "/usr/local/bin/denyhosts.py"
在运行还会提示错误:导入Python版本错误的提示。如:
Traceback (most recent call last):
File "/usr/local/bin/denyhosts.py", line 5, in
import DenyHosts.python_version
ImportError: No module named DenyHosts.python_version
       到这里错误很明了了,经过查询发现版本不对会导致这个问题。
 
       分析后发现原因在此:以前本机已经有一个python2.4的版本,使用rpm安装的,默认的路径是/usr/lib/python2.4,因为要升级python2.5,也没有对卸载这个2.4的版本,使用编译安装的python2.5,安装路径并没有配置,这默认安装到/usr/local/lib/python2.5这个路径,而目前激活的python环境是2.5的,可能因为denyhosts安装时会根据环境查找安装,因此会在/usr/local/lib/python2.5/site-packages路径下安装Denyhosts这个文件夹。当运行denyhosts时,脚本会指定使用的是/usr/lib/python*这个路径的python里(暂时没找到脚本哪个地方指定),因此它无法定位python的版本,会出现这个错误。
       最快速的解决方法是把/usr/local/lib/python2.5/site-packages路径下的Denyhosts文件夹整个拷贝到2.4的安装目录下即可。
       进入/usr/local/lib/python2.5/site-packages/目录
#cd /usr/local/lib/python2.5/site-packages/
#cp –rp Denyhosts /usr/lib/python2.4/ site-packages/
这样之后便可以启动Denyhosts了。
参考:The root cause is that python was upgraded from 2.4 to 2.5. So now denyhosts (and other python scripts) are working from a different directory. Why does this make a difference? The DenyHosts python scripts are located under /usr/lib/python2.4/site-packages/DenyHosts which, unless the script specifies that it is using the old 2.4 environment (DenyHosts doesn’t) then it will look in the new environment location, /usr/lib/python2.5/site-packages/DenyHosts, which of course, doesn’t exist. The quick fix is to cp over the DenyHost directory to the python 2.5 tree.

denyhosts.cfg配置文件说明

denyhosts.cfg配置文件说明:(从网上找的,参考下)

denyhost的安装方法有好几种,在启动时候出现提示错误,启动失败问题汇总如下,大家可以参考处理。

今天查看了一下系统的失败登陆记录 ,几分钟都没有显示完毕,不是吧,世界上总是有那么多的闲得蛋疼的人呢?你怎么不去死呢?
使用
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure.1 | sort | uniq -c
统计里一下,哎,居然尝试N次!看来世界需要清静了!使用手工解决已经无法适应别人的暴力扫描了,我们也人工智能一下哈哈,使用denyhosts软件保护你的ssh吧
开始安装 CentOS 5.5, DenyHosts 2.5
cd /usr/local/src
wget ttp://mesh.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.5.tar.gz
tar -zxvf DenyHosts-2.5.tar.gz
cd DenyHosts-2.5
python setup.py install

默认安装到/usr/share/denyhosts/目录
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
vi denyhosts.cfg

根据自己需要进行相应的配置
配置文件说明

SECURE_LOG = /var/log/secure
#ssh 日志文件,它是根据这个文件来判断的。
HOSTS_DENY = /etc/hosts.deny
#控制用户登陆的文件
PURGE_DENY = 5m
#过多久后清除已经禁止的
BLOCK_SERVICE = sshd
#禁止的服务名
DENY_THRESHOLD_INVALID = 1
#允许无效用户失败的次数
DENY_THRESHOLD_VALID = 10
#允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 5
#允许root登陆失败的次数
HOSTNAME_LOOKUP=NO
#是否做域名反解
ADMIN_EMAIL = www.yes81.net
件地址,它会给管理员发邮件
DAEMON_LOG = /var/log/denyhosts
#自己的日志文件

cp daemon-control-dist daemon-control
vi daemon-control

参考:
DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts" //启动的pid文件
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg" //配置文件

启动
chmod 700 daemon-control
./daemon-control start

设置自动启动
设置自启动:
vi /etc/rc.local
加入
/usr/share/denyhosts/daemon-control start
我使用了
cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts

chkconfig denyhosts --add
那么可以使用chkconfig denyhosts on 来设置启动啦。

SECURE_LOG = /var/log/secure #sshd日志文件,它是根据这个文件来判断的,不同的操作系统,文件名
稍有不同。
HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件,被禁止的IP会被写进里面
PURGE_DENY = 5m #过多久后清除已经禁止的
# 'm' = minutes
# 'h' = hours
# 'd' = days
# 'w' = weeks
# 'y' = years

BLOCK_SERVICE = sshd #禁止的服务名,同样也可以是ftp,smtp等等
DENY_THRESHOLD_INVALID = 5 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 10 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 5 #允许root登陆失败的次数
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
HOSTNAME_LOOKUP=NO #是否做域名反解
LOCK_FILE = /var/lock/subsys/denyhosts
ADMIN_EMAIL = #管理员邮件地址
DAEMON_LOG = /var/log/denyhosts #DenyHosts的日志文件

 

DAEMON_PURGE = 1m #预设清除

启动时出现了错误,可以使用下面方式解决
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can't read: /private/var/log/system.log
[Errno 2] No such file or directory: '/private/var/log/system.log'
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: '/var/lock/subsys/denyhosts'

使用:

mkdir -p /private/var/log/
mkdir -p /var/lock/subsys/

./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can't read: /private/var/log/system.log
[Errno 2] No such file or directory: '/private/var/log/system.log'
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: '/var/lock/subsys/denyhosts'

使用:

touch /private/var/log/system.log
touch /var/lock/subsys/denyhosts

./daemon-control start
出现:
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
DenyHosts could not obtain lock (pid: )
[Errno 17] File exists: '/var/lock/subsys/denyhosts'

使用:
rm -f /var/lock/subsys/denyhosts
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg
OK!
启动完成啦。
你可以使用
service denyhosts status来查看运行状态
DenyHosts is running with pid = 25874 表示已经启动起来了。
接下来就可以使用
cat /etc/hosts.deny来查看记录了

#service denyhost start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory

经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件
#vi daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"
 
将第一行修改为DENYHOSTS_BIN   = "/usr/local/bin/denyhosts.py"

在运行还会提示错误:导入Python版本错误的提示。如:
Traceback (most recent call last):
File "/usr/local/bin/denyhosts.py", line 5, in 
import DenyHosts.python_version
ImportError: No module named DenyHosts.python_version

到这里错误很明了了,经过查询发现版本不对会导致这个问题。

 分析后发现原因在此:以前本机已经有一个python2.4的版本,使用rpm安装的,默认的路径是/usr/lib/python2.4,因为要升级python2.5,也没有对卸载这个2.4的版本,使用编译安装的python2.5,安装路径并没有配置,这默认安装到/usr/local/lib/python2.5这个路径,而目前激活的python环境是2.5的,可能因为denyhosts安装时会根据环境查找安装,因此会在/usr/local/lib/python2.5/site-packages路径下安装Denyhosts这个文件夹。当运行denyhosts时,脚本会指定使用的是/usr/lib/python*这个路径的python里(暂时没找到脚本哪个地方指定),因此它无法定位python的版本,会出现这个错误。

最快速的解决方法是把/usr/local/lib/python2.5/site-packages路径下的Denyhosts文件夹整个拷贝到2.4的安装目录下即可。
进入/usr/local/lib/python2.5/site-packages/目录#cd /usr/local/lib/python2.5/site-packages/
#cp –rp Denyhosts /usr/lib/python2.4/ site-packages/
 
这样之后便可以启动Denyhosts了。
 
 
关于错误
Traceback (most recent call last): 
  File "/usr/local/python-2.4/bin/denyhosts.py", line 5, in ? 
    import DenyHosts.python_version 
ImportError: No module named DenyHosts.python_version 

需要修改下面的部分:
1、/usr/share/denyhosts/daemon-control 
PYTHON_BIN      = "/usr/bin/env python" 
改为 
PYTHON_BIN     = "/usr/local/python-2.4/bin/python" 
#!/usr/bin/env python 
改为
#!/usr/local/python-2.4/bin/python 
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py" 
改为
DENYHOSTS_BIN   = "/usr/local/python-2.4/bin/denyhosts.py" 
2.
cp -rp /usr/local/python-2.4/lib/python2.4/site-packages/DenyHosts/  /usr/local/python-2.4/lib/python2.4/

CentOS6.3关闭ipv6及tty

http://xlogin.blog.51cto.com/3473583/1031311

linux csf 防火墙 防止少量的ddos cc攻击很有效

http://blog.51yip.com/server/1503.html

使用gperftools优化Nginx和MySQL内存管理

Google 开发的 gperftools 包含四个工具,分别是:TCMalloc、heap-checker、heap-profiler 和 cpu-profiler,TCMalloc是 gperftools 的其中一个工具,用于优化C++写的多线程应用,与标准的glibc库的malloc相比,TCMalloc在内存的分配效率和速度要高,可以在高并发的情况下很好的控制内存的使用,提高服务器的性能,降低负载。

使用 TCMalloc 优化 Nginx 和 MySQL 的内存管理,性能将会有一定程度的提升,特别是对MYSQL服务器高并发下情况下的性能。

安装 libunwind 库
如果系统是64位的需要先安装libunwind库,32位系统则不需要安装。

libunwind 库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.0.1.tar.gz
tar -zxvf libunwind-1.0.1.tar.gz
cd libunwind-1.0.1/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
cd ../

gperftools 的安装
gperftools 项目网站 http://code.google.com/p/gperftools/

wget http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
tar -zxvf gperftools-2.0.tar.gz
cd gperftools-2.0
./configure --prefix=/usr/local --enable-frame-pointers
make
make install
cd ../

如果是32位系统,可以不添加 –enable-frame-pointers,如果是64位系统,并且之前没有安装libunwind,那么一定要添加 –enable-frame-pointers 参数。

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig

为 gperftools 添加线程目录:

mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc

使用gperftools优化Nginx:

为了使 Nginx 支持 gperftools,增加参数 –with-google_perftools_module 重新编译Nginx。

修改/usr/local/nginx/conf/nginx.conf
在pid这行的下面添加
google_perftools_profiles /tmp/tcmalloc;

重新启动nginx

使用gperftools优化MYSQL:
查找文件 /usr/local/mysql/bin/mysqld_safe

在# executing mysqld_safe 下面加上
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

重新启动MYSQL

验证 tcmalloc 是否运行:
lsof -n | grep tcmalloc

----------------

http://www.ibm.com/developerworks/cn/linux/l-cn-googleperf/index.html

4KB 扇区磁盘上的 Linux:实际建议

checking for re2c... no

checking for re2c... no
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.


http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download

tar打包split分割分解拆分大包文件

有时候远程下载tar包的时候,由于包太大,失去连接时,需要重新下载非常郁闷。
这时候使用split分割分解拆分大包文件,然后单个下载下文件就OK。

在Linux下使用 tar 命令来将文件打包并压缩是很通常的用法了。可是Linux的文件系统对文件大小有限制,也就是说一个文件最大不能超过2G,如果压缩包的的内容很大,最后 的结果就会超过2G,那么该怎么办呢?又或者压缩包希望通过光盘来进行备份,而每张光盘的容量只有700M,那么该如何存储呢?解决的办法就是将最后的压 缩包按照指定大小进行分割,这就需要用到split命令了。

举例说明:
要将目录logs打包压缩并分割成多个1M的文件,可以用下面的命令:
tar cjf - logs/ |split -b 1m - logs.tar.bz2.
完成后会产生下列文件:
logs.tar.bz2.aa, logs.tar.bz2.ab, logs.tar.bz2.ac
要解压的时候只要执行下面的命令就可以了:
cat logs.tar.bz2.a* | tar xj

再举例:
要将文件test.pdf分包压缩成500 bytes的文件:
tar czf - test.pdf | split -b 500 - test.tar.gz
最后要提醒但是那两个"-"不要漏了,那是tar的ouput和split的input的参数。

这里对命令做一些讲解。 
压缩和分割命令行中红色部分的为命令对应的I/O文件名参数,其中-表示标准输入或输出。那么结合上面的例子,tar命令表示的意思就是将logs目录压缩,生成的结果直接输送到标准输出上;而split命令表示从标准输入获得文件内容进行分割,结果文件前缀为logs.tar.bz2.。二者再通过管道将各自的标准输入输出对接起来。 

这里再解释一下split命令的参数含义: 
-b SIZE 指定每个文件的大小,其单位可以为b(512字节)、k(1K)、m(1M) 
-d 使用数字而不是字母作为后缀名 
-a X 指定后缀名的长度,默认为2位 

这样上面的命令就可以变化为: 
tar cjf - logs/ |split -b 1m -d -a 1- logs.tar.bz2.

Records:23012345678910»