ssh登陆记录查看

  1. # 通过who检查当前在线用户
  2. who
  3. #查看登陆的情况
  4. less /var/log/secure
  5. # 在/var/log/btmp中可以查看到登陆失败的记录
  6. lastb
  7. # 查看w记录
  8. who /var/log/wtmp
  9. # 在/var/log/lastlog中可以查看最近登陆的记录 (可通过last命令进行检查)
  10. last


(可通过lastb命令进行检查)

最近我的多台 linux 服务器遭受黑客攻击,虽没被攻下,但占用一些网络资源。攻击记录如下:

  1. Mar 23 02:02:19 zgyt-server sshd[8161]: pam_unix(sshd:auth): check pass; user unknown
  2. Mar 23 02:02:19 zgyt-server sshd[8161]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
  3. Mar 23 02:02:19 zgyt-server sshd[8161]: pam_succeed_if(sshd:auth): error retrieving information about user test
  4. Mar 23 02:02:21 zgyt-server sshd[8161]: Failed password for invalid user test from 218.15.21.106 port 53996 ssh2
  5. Mar 23 02:02:21 zgyt-server sshd[8162]: Received disconnect from 218.15.21.106: 11: Bye Bye
  6. Mar 23 02:02:21 zgyt-server sshd[8163]: Invalid user guest from 218.15.21.106
  7. Mar 23 02:02:21 zgyt-server sshd[8164]: input_userauth_request: invalid user guest
  8. Mar 23 02:02:21 zgyt-server sshd[8163]: pam_unix(sshd:auth): check pass; user unknown
  9. Mar 23 02:02:21 zgyt-server sshd[8163]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
  10. Mar 23 02:02:21 zgyt-server sshd[8163]: pam_succeed_if(sshd:auth): error retrieving information about user guest
  11. Mar 23 02:02:23 zgyt-server sshd[8163]: Failed password for invalid user guest from 218.15.21.106 port 54275 ssh2
  12. Mar 23 02:02:23 zgyt-server sshd[8164]: Received disconnect from 218.15.21.106: 11: Bye Bye
  13. Mar 23 02:02:24 zgyt-server sshd[8165]: Invalid user admin from 218.15.21.106
  14. Mar 23 02:02:24 zgyt-server sshd[8166]: input_userauth_request: invalid user admin
  15. Mar 23 02:02:24 zgyt-server sshd[8165]: pam_unix(sshd:auth): check pass; user unknown
  16. Mar 23 02:02:24 zgyt-server sshd[8165]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
  17. Mar 23 02:02:24 zgyt-server sshd[8165]: pam_succeed_if(sshd:auth): error retrieving information about user admin
  18. Mar 23 02:02:27 zgyt-server sshd[8165]: Failed password for invalid user admin from 218.15.21.106 port 54534 ssh2
  19. Mar 23 02:02:27 zgyt-server sshd[8166]: Received disconnect from 218.15.21.106: 11: Bye Bye
  20. Mar 23 02:02:27 zgyt-server sshd[8167]: Invalid user admin from 218.15.21.106
  21. Mar 23 02:02:27 zgyt-server sshd[8168]: input_userauth_request: invalid user admin
  22. Mar 23 02:02:27 zgyt-server sshd[8167]: pam_unix(sshd:auth): check pass; user unknown
  23. Mar 23 02:02:27 zgyt-server sshd[8167]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
  24. Mar 23 02:02:27 zgyt-server sshd[8167]: pam_succeed_if(sshd:auth): error retrieving information about user admin
  25. Mar 23 02:02:29 zgyt-server sshd[8167]: Failed password for invalid user admin from 218.15.21.106 port 54855 ssh2
  26. Mar 23 02:02:29 zgyt-server sshd[8168]: Received disconnect from 218.15.21.106: 11: Bye Bye
  27. Mar 23 02:02:30 zgyt-server sshd[8169]: Invalid user user from 218.15.21.106
  28. Mar 23 02:02:30 zgyt-server sshd[8170]: input_userauth_request: invalid user user
  29. Mar 23 02:02:30 zgyt-server sshd[8169]: pam_unix(sshd:auth): check pass; user unknown
  30. Mar 23 02:02:30 zgyt-server sshd[8169]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106
  31. Mar 23 02:02:30 zgyt-server sshd[8169]: pam_succeed_if(sshd:auth): error retrieving information about user user
  32. Mar 23 02:02:32 zgyt-server sshd[8169]: Failed password for invalid user user from 218.15.21.106 port 55041 ssh2
  33. Mar 23 02:02:32 zgyt-server sshd[8170]: Received disconnect from 218.15.21.106: 11: Bye Bye
  34. Mar 23 02:02:32 zgyt-server sshd[8171]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106 user=root
  35. Mar 23 02:02:34 zgyt-server sshd[8171]: Failed password for root from 218.15.21.106 port 55204 ssh2
  36. Mar 23 02:02:34 zgyt-server sshd[8172]: Received disconnect from 218.15.21.106: 11: Bye Bye
  37. Mar 23 02:02:35 zgyt-server sshd[8173]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.21.106 user=root
  38. Mar 23 02:02:37 zgyt-server sshd[8173]: Failed password for root from 218.15.21.106 port 55314 ssh2
  39. Mar 23 02:02:37 zgyt-server sshd[8174]: Received disconnect from 218.15.21.106: 11: Bye Bye

因此,在这给大家提个醒,注意你的服务器的安全。

解决方案

源生

方案一
使用以下解决方案,攻击者可以在2分钟内生成3次错误登录,否则将被阻止120秒。
**config
MaxAuthTries 1
每个连接只能进行1次登录尝试。重新启动ssh服务器。
2)添加以下防火墙规则
创建一个新链

  1. iptables -N SSHATTACK
  2. iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
  3. iptables -A SSHATTACK -j DROP

阻止每个IP地址120秒,这将在120秒内建立三个以上的连接。在进行第四次连接尝试时,该请求将委派给该SSHATTACK链,该链负责记录可能的ssh攻击并最终删除该请求。

  1. iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
  2. iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

3)查看可能的ssh攻击的日志条目 /var/log/syslog

  1. Dec 27 18:01:58 ubuntu kernel: [ 510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0

方案二
在文件中进行两个配置更改:/ etc / ssh / sshd_config
限制ssh服务器将同时处理的未认证连接的最大数量。这越小,脚本小子就很难通过多个连接进行并行,协调的破解尝试。编辑sshd_config并将MaxStartups从默认的“ 10”更改为“ 3:50:10”。以冒号分隔的值告诉ssh服务器:“允许3个用户尝试同时登录,并在3个和最多10个之间(最多10个)之间随机增加连接尝试次数”。注意:在具有大量有效ssh用户登录的服务器上,应增加此数目。

  • 默认值:MaxStartups 10
  • MaxStartups 3:50:10

减少断开连接前成功登录所允许的最长时间。默认的2分钟是太多时间,无法打开未经身份验证的连接尝试(请参见上文);30秒足以登录:

  • 默认值:LoginGraceTime 2m
  • LoginGraceTime 30

方案三

我将这些IPTables规则用于此目的:

  1. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
  2. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl --name SSH -j DROP

这将仅允许5分钟内从IP地址向端口22发送4个TCP / SYN数据包。如果尝试更多,则将门关闭直到5分钟结束。

第三方软件

下面是我的解决办法,希望对你有所帮助。

1、制作密钥,用密钥登录系统 ,之后也可以禁止root密码登陆

2、用 DenyHosts 防止重复登录爆破

2.1、DenyHosts 是 Python 语言写的一个程序,它会分析 SSHD 的日志文件,当发现重复的攻击时就会记录 IP 到 / etc/hosts.deny 文件,从而达到自动屏蔽 IP 的功能。

2.2 下载 DenyHosts 与安装
地址:DenyHosts 官方网站为:,下载与你操作系统对应的版本安装。如我的系统 centos5.2 操作为:

  1. sudo rpm -ivh DenyHosts-2.6-python2.4.noarch.rpm
  2. Preparing... ########################################### [100%]
  3. 1:DenyHosts ########################################### [100%]

2.3、配置
默认安装目录为 / usr/share/denyhosts/,操作命令:

  1. cd /usr/share/denyhosts/
  2. sudo cp daemon-control-dist daemon-control
  3. sudo cp denyhosts.cfg-dist denyhosts.cfg
  4. cd /etc/init.d/
  5. sudo ln -s /usr/share/denyhosts/daemon-control denyhosts
  6. sudo /sbin/chkconfig --add denyhosts
  7. sudo /sbin/chkconfig --level 2345 denyhosts on
  8. sudo /sbin/service denyhosts start
  9. starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
  10. DenyHosts 配置文件: vi /etc/denyhosts.cfg
  11. #ssh 日志文件,如果是 redhat 系列是根据 / var/log/secure 文件来判断的。
  12. #Mandrake、FreeBSD 是根据 /var/log/auth.log 来判断的,而 SUSE 则是用 / var/log/messages 来判断的。这些在配置文件里面都有很详细的解释。
  13. SECURE_LOG = /var/log/secure
  14. #控制用户登陆的文件
  15. HOSTS_DENY = /etc/hosts.deny
  16. #过多久后清除已经禁止的,空表示永久不清除
  17. # 'm' = minutes
  18. # 'h' = hours
  19. # 'd' = days
  20. # 'w' = weeks
  21. # 'y' = years
  22. PURGE_DENY = 30m
  23. #禁止的服务名,当然 DenyHost 不仅仅用于 SSH 服务,还可用于 SMTP 等等。
  24. BLOCK_SERVICE = sshd
  25. #允许无效用户失败的次数
  26. DENY_THRESHOLD_INVALID = 1
  27. #允许普通用户登陆失败的次数
  28. DENY_THRESHOLD_VALID = 5
  29. #允许 root 登陆失败的次数
  30. DENY_THRESHOLD_ROOT = 3
  31. #是否做域名反解
  32. HOSTNAME_LOOKUP=NO
  33. #管理员邮件地址, 它会给管理员发邮件
  34. ADMIN_EMAIL =
  35. #DenyHosts 日志文件存放的路径
  36. DAEMON_LOG = /var/log/denyhosts

2.4、重启 denyhosts 服务
sudo /sbin/service denyhosts restart
Password:
sent DenyHosts SIGTERM
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py —daemon —config=/usr/share/denyhosts/denyhosts.cfg

OK, 你已大功告成,可以看看 / etc/hosts.deny 内是否有禁止的 IP
http://blog.chinaunix.net/uid-17238776-id-1693197.html