1.发现问题

**
原服务器搭建了shadowsocks服务,本来想翻翻日志看看有没有啥问题,然后发现 secure 以及 btmp 两个文件异常的大,高达数10M。

  • secure —> 这是一个有关系统安全的日志文件,日志中会记录“谁,在什么时候,从哪登录到系统,登录是否成功”等信息。ssh、telnet、ftp等服务的用户登录信息都会记录在此。

    1. echo "" > /var/log/secure #若文件过大可用此指令清空
  • btmp —> 这个日志文件会记录所有登录失败的信息,使用lastb命令可以查看btmp文件。

    lastb | awk -F " " '{print $3}' | sort | uniq -c | sort -k1,1nr >> output.log && vim output.log    #列出每个IP登录失败的次数
    rm -rf /var/log/btmp   #若btmp文件过大可删除后新建
    touch /var/log/btmp    #新建
    

    image.png image.png image.png
    这看日志一定要笑~ 不要愁眉苦脸的! 嘿~诶嘿~

    2.处理:DenyHosts安装

    **
    DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽IP的功能,以帮助阻止SSH 服务器攻击(也称为基于字典的攻击和暴力破解攻击)。
    当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令。你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。
    用DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。

安装DenyHosts:

wget https://altushost-swe.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    #安装

image.png

创建DenyHosts服务:

cd /usr/share/denyhosts/ # 进入安装目录
cp denyhosts.cfg-dist denyhosts.cfg # 创建配置文件
cp daemon-control-dist daemon-control # 启动文件副本

现在,我们可以编辑守护程序控制文件(daemon-control),只需要编辑顶部附近的此部分,如下所示

###############################################

###############################################
#### Edit these to suit your configuration ####
###############################################

DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"

PYTHON_BIN      = "/usr/bin/env python"       #请确保python指向的版本为python2.X

###############################################

确保守护程序控制文件(daemon-control)配置无误后,便可准备开启服务。

ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts     # 创建软连接,便于systemctl控制
chkconfig --add denyhosts     # 添加denyhosts服务
chkconfig denyhosts on     # 设置denyhosts在各等级为开启状态
chkconfig --list denyhosts     # 查询是否设置成功

image.png

启动denyhosts服务:

systemctl start denyhosts # 启动denyhosts服务
systemctl status denyhosts # 查询denyhosts服务状态

image.png

配置/etc/denyhosts.conf 中的参数

您可使用 egrep -v "(^#|^$)" /usr/share/denyhosts/denyhosts.cfg 命令来查看denyhosts.cfg文件的当前配置;
具体配置文件的解释如下:

        ############ THESE SETTINGS ARE REQUIRED ############
    SECURE_LOG = /var/log/secure                                     #ssh 日志文件,它是根据这个文件来判断的。
    HOSTS_DENY = /etc/hosts.deny                                     #控制用户登陆的文件
    PURGE_DENY = 4w                                                              #过多久后清除已经禁止的IP,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
    BLOCK_SERVICE  = sshd                                                 #denyhosts所要阻止的服务名称
    DENY_THRESHOLD_INVALID = 5                                         #允许无效用户登录失败的次数
    DENY_THRESHOLD_VALID = 10                                         #允许普通用户登录失败的次数
    DENY_THRESHOLD_ROOT = 1                                             #允许ROOT用户登录失败的次数
    DENY_THRESHOLD_RESTRICTED = 1                                 #在失败次数后阻止每个主机登录尝试次数已超过此值。该值适用于只出现在 WORK_DIR/restricted-usernames 文件中的用户名。
    WORK_DIR = /var/lib/denyhosts                                 #denyhosts工作数据目录,将deny的host或ip记录到WORK_DIR中  
    ETC_DIR = /etc
    SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
    HOSTNAME_LOOKUP=NO #是否做域名反解  
    LOCK_FILE = /var/lock/subsys/denyhosts                 #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务
        ############ THESE SETTINGS ARE OPTIONAL ############
    ADMIN_EMAIL = root@localhost                                     #设置管理员邮件地址  
    SMTP_HOST = localhost  
    SMTP_PORT = 25
    SMTP_FROM = DenyHosts <nobody@localhost>
    SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
    ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO
    AGE_RESET_VALID=5d                                                         #有效用户登录失败计数归零的时间
    AGE_RESET_ROOT=25d                                                         #ROOT用户登录失败计数归零的时间
    AGE_RESET_RESTRICTED=25d                                             #用户的失败登录计数重置为0的时间
    AGE_RESET_INVALID=10d                                                 #无效用户登录失败计数归零的时间
    ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE  ##########
    DAEMON_LOG = /var/log/denyhosts                             #denyhost服务日志文件
    DAEMON_SLEEP = 30s
    DAEMON_PURGE = 1h                                                         #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间
    #########   THESE SETTINGS ARE SPECIFIC TO     ##########
    #########       DAEMON SYNCHRONIZATION         ##########
    SYNC_UPLOAD = no
    SYNC_DOWNLOAD = no

开机启动服务:

vi /etc/rc.local
/usr/share/denyhosts/daemon-control start        #在rc.local文件中增加该句并保存


解除已被封禁的IP:

**
如果想删除一个已经禁止的主机IP,只在 /etc/hosts.deny 删除是没用的。需要进入 /var/lib/denyhosts 目录,进入以下操作:

1、停止DenyHosts服务:service denyhosts stop
2、在 /etc/hosts.deny(黑名单列表) 中删除你想取消的主机IP [#添加你想允许的主机IP地址到/etc/hosts.allow(白名单列表)]

3、启动DenyHosts服务:service denyhosts start