SSh登陆失败的日志查看与攻击预防 grep
之前因为服务器里没有什么重要的东西,也就一直没有关注过登陆日志,刚才在配置ssh chroot出现错误是才去看的auth.log,记得这个文件就是个登陆日志,而且我之前偶尔查看时都很少内容,所以就直接cat查看了,谁知道竟然是 满屏满屏的,"Failed password for root XXX.XXX.XXX.XXX",等了将近一分钟仍然不见底,最后只好Ctrl+c提前结束,然后写条命令了下,看看究竟有多少个IP在暴利破解我的 root:
 ubuntu:    grep "Failed password for root" /var/log/auth.log* | awk '{print $11}' | sort | uniq -c | sort -nr | more
centos: grep "Failed password for root" /var/log/secure* | 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
 这个方法比较省时省力,这个小工具现今各个发行版软件库里基本都有,而且也不需要过多配置,傻瓜易用。
 这里简单说下几个主要发行版的安装方法
 Debian/Ubuntu:
 sudo apt-get install denyhosts
Archlinux
 yaourt denyhosts
ReHaT/Centos
 yum install denyhosts
Gentoo
emerge -av denyhosts
这个工具默认配置就能很好的工作,如要个性化设置请自行修改/etc/denyhosts.conf
 SECURE_LOG = /var/log/auth.log
 #ssh 日志文件,它是根据这个文件来判断的。
 HOSTS_DENY = /etc/hosts.deny
 #控制用户登陆的文件
 PURGE_DENY =
 #过多久后清除已经禁止的
 BLOCK_SERVICE  = sshd
 #禁止的服务名
 DENY_THRESHOLD_INVALID = 5
 #允许无效用户失败的次数
 DENY_THRESHOLD_VALID = 10
 #允许普通用户登陆失败的次数
 DENY_THRESHOLD_ROOT = 1
 #允许root登陆失败的次数
 DENY_THRESHOLD_RESTRICTED = 1
 WORK_DIR = /var/lib/denyhosts
 #运行目录
 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
 HOSTNAME_LOOKUP=YES
 #是否进行域名反解析
 LOCK_FILE = /var/run/denyhosts.pid
 #程序的进程ID
 ADMIN_EMAIL = root@localhost (可以将这里改成常用的邮箱)
 #管理员邮件地址,它会给管理员发邮件
 SMTP_HOST = localhost
 SMTP_PORT = 25
 SMTP_FROM = DenyHosts <nobody@localhost>
 SMTP_SUBJECT = DenyHosts Report
 AGE_RESET_VALID=5d
 AGE_RESET_ROOT=25d
 AGE_RESET_RESTRICTED=25d
 AGE_RESET_INVALID=10d
 DAEMON_LOG = /var/log/denyhosts
 DAEMON_SLEEP = 30s
 DAEMON_PURGE = 1h