SSh登陆失败的日志查看与攻击预防 之前因为服务器里没有什么重要的东西,也就一直没有关注过登陆日志,刚才在配置ssh chroot出现错误是才去看的auth.log,记得这个文件就是个登陆日志,而且我之前偶尔查看时都很少内容,所以就直接cat查看了,谁知道竟然是满屏满屏的,"Failed password for root XXX.XXX.XXX.XXX",等了将近一分钟仍然不见底,最后只好Ctrl+c提前结束,然后写条命令了下,看看究竟有多少个IP在暴利破解我的root: grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more 命令很简单,也就不过多做解释了,直接看看结果: 4540 86.122.189.166 855 61.1.84.12 576 61.164.145.33 304 184.32.139.224 284 200.195.151.82 222 110.234.129.177 210 200.62.142.142 202 213.152.176.153 202 129.121.32.94 42 122.228.197.134 38 119.161.145.215 30 79.174.68.97 15 82.166.223.235 13 76.28.73.184 1 119.68.246.2 最多的4000多次,还行,估计离解出我的密码还有段距离,可是为了防范未然,也让我的auth.log文件能清净一些,索性就加些防范措施。 至于预防措施到时多种多样,我这里说几种我刚才尝试过的,或者尝试了放弃的 1、修改SSh端口,禁止root登陆 这个比较简单,只需要修改/etc/ssh/sshd_config文件就好了 sudo vi /etc/ssh/sshd_config Port 4484 #这里就该为你认为别人猜不到的端口号 PermitRootLogin no #这里改为no即为禁止root登陆 最后保存,重启 sudo /etc/init.d/ssh restart 2、禁用密码登陆,仅用证书密钥登陆 在客户端生成密钥 ssh-keygen -t rsa 把公钥拷贝至服务器 ssh-copy-id -i .ssh/id_rsa.pub server 也可以手动将.shh/id_rsa.pub拷贝至服务器用户目录的.ssh中,记得修改访问权限 scp .shh/id_rsa.pub server:~/.ssh 在服务器中 cd ./.ssh/ mv id_rsa.pub authorized_keys chmod 400 authorized_keys 最后修改/etc/ssh/sshd_config RSAAuthentication yes #RSA认证 PubkeyAuthentication yes #开启公钥验证 AuthorizedKeysFile .ssh/authorized_keys #验证文件路径 PasswordAuthentication no #禁止密码认证 PermitEmptyPasswords no #禁止空密码 UsePAM no #禁用PAM 最后保存,重启 sudo /etc/init.d/ssh restart 3、安装denyhosts 这个方法比较省时省力,这个小工具现今各个发行版软件库里基本都有,而且也不需要过多配置,傻瓜易用。 cd /usr/local/src wget https://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz tar -zxvf DenyHosts-2.6.tar.gz cd DenyHosts-2.6 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.xxxx.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,因为要升级python到2.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/