云计算 Python 微软 apache Ubuntu google Android centos Firefox nginx 程序员 java Windows wordpress php 开源 mysql linux shell 编程

Centos7 SSH安全防護—系統安全管家

我們在日常的辦公中,會在自己的手機或者電腦上安裝一些管理軟件,依我個人來說吧~我手機上安裝了QQ安全中心、淘寶安全中心及其他軟件的管家等,說到底這些功能的目的就是為了檢測及保護我們對應的應用服務,所以在安全及功能上大家相對比較認可的 ,同樣,我們今天介紹Centos7的系統安全管家一樣,需要對我們的系統登錄進行保駕護航,到底是怎麽個保護法呢?我們都知道Linux的登陸方式通過ssh協議及crt、xshell工具進行登陸管理的,加上現在的網絡安全意識又不好,很容易受到別人的攻擊,所以我們就通過Shell腳本對CentOS進行登陸的保護,不管是在本地或者通過ssh的方式進行登,只要通過無效的密碼嘗試登陸指定次數會將遠程登陸的計算機的ip加入到centos系統下的黑名單下,即使密碼正確也會無法正常登陸。這樣就大大降低了centos服務的安全性,同樣,我們為了更好的提高安全性,我們也可以修改默認的登陸端口,從默認的22更改其他端口指定端口2222等,廢話不多說了,接下來我們就說說操作原理。

其實原理就是腳本程序讀取/var/log/secure下的日誌文件,然後查找關鍵字:Failed及IP地址,然後從這些日誌中提取信息,如果提取的ip地址及標註的信息Failed達到5次的話,就會將該IP地址寫入到/etc/hosts.deny 文件中,達到拒絕訪問的效果。格式為:

sshd:x.x.x.x:deny(所謂的黑名單);所以我們在配置前需要計劃好,需要將允許的IP地址寫入/etc/hosts.allow中:格式為:Sshd:x.x.x.x:allow;當hosts.allow文件內容和hosts.deny有沖突的時候以hosts.allow為準,所以hosts.allow的優先級高,具體操作見下:

環境介紹:

Os: Centos 7

Ip:192.168.6.101

Port:22

User: root 、gavin

clip_image002

我们首先通过ssh(192.168.6.188)使用无效的密码登陆,然后通过tail查看系统下的操作log信息

1

Tail –f /var/log/secure

clip_image004

clip_image006

接下来我们就是定义脚本了

1

vim /root/secure_ssh.sh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#! /bin/bash

cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' /root/black.txt

DEFINE="5"

for in `cat  /root/black.txt`

do

IP=`echo $i |awk -F= '{print $1}'`

NUM=`echo $i|awk -F= '{print $2}'`

if [ $NUM -gt $DEFINE ];then

grep $IP /etc/hosts.deny > /dev/null

      if [ $? -gt 0 ];then

          echo "sshd:$IP:deny" >> /etc/hosts.deny

      fi

    fi

done

 

 

也可以:

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#! /bin/bash

cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' /root/black.txt

DEFINE="5"

for in `cat /root/black.txt`

do

IP=`echo $i |awk -F= '{print $1}'`

NUM=`echo $i|awk -F= '{print $2}'`

if "$IP" != "192.168.2.38" ]; then

if [ $NUM -gt $DEFINE ];then

grep $IP /etc/hosts.deny > /dev/null

if [ $? -gt 0 ];then

echo "sshd:$IP:deny" >> /etc/hosts.deny

fi

fi

fi

done

clip_image008

注:编写脚本保存后,我们需要查看该脚本文件的执行权限:

1

ls -l

clip_image010

如果没有root的执行权限我们chomod a+x即可

编写脚本好后,我们就可以设置通过计划任务来执行该脚本文件了。

1

2

3

Crontal –e 打开计划任务列表:

添加以下内容

* * * * *  /root/secure_ssh.sh 每一分钟执行一次

clip_image011

保存后退出:然后我们手动执行脚本看脚本是否运行正常;如果没有报错就是正常

1

./secure_ssh.sh

clip_image013

接下来我们查看按照脚本的规定叫/var/log/secure下的错误信息及IP记录到了blcak.txt文件下了

1

Cat /root/black.txt

192.168.6.188=6

=6为错误的验证次数,用错误的密码验证登陆了6次

clip_image015

然后我们再查看hosts.deny文件,通过脚本定义的,会将192.168.6.188自动添加到该文件下;我们发现192.168.6.188已经自动添加到了黑名单中,这样就无法登陆了;

clip_image017

我們使用正確的密碼在192.168.6.188上登陸看看是否會驗證成功呢

我們都是無法正常鏈接到192.168.6.101這個機器,連輸入密碼的機會都沒有了。

我們通過log查看到服務器已拒絕192.168.6.188進行連接了。

clip_image019

那如果我們需要192.168.6.188進行連接怎麽做呢?也許有人想到將192.168.6.188從hosts.deny的黑名單刪除即可,其實呢,刪除沒用,當腳本執行後,又會通過log的信息(log信息中有失敗的錯誤記錄)將192.168.6.188自動添加到/etc/hosts.deny的黑名單中,所以這樣是不行的。那怎麽辦呢?我們只需要將192.168.6.188添加到/etc/hosts.allow的白名單中即可,都無需刪除黑名單中的記錄。因為當hosts.deny和hosts.allow有沖突的時候系統會以hosts.allow為準,這樣hosts.allow的優先級高,所以就會登陸了。接下來我們試試

1

Vim /etc/hosts.allow 打开hosts.allow文件添加允许连接的ip

注:如果允许某个ip进行连接格式为:

Sshd:X.X.X.X:allow

如果允许ip个子网连接的格式为:

Sshd:x.x.x.*:allow

clip_image021

保存后,我们确认hosts.deny和hosts.allow的文件中都有192.168.6.188的格式信息

clip_image023

我们上面说过,当两个文件的内容是有冲突的时候,是以hosts.allow为准,所以192.168.6.188这个主机是可以连接的

clip_image025

连接后,我们可以查看log

clip_image027

最後我們再說一下,如果需要使用系統自帶的PAM進行錯誤密碼的限制怎麽做呢?

我們只需要修改登陸驗證的配置文件即可

1

2

Vim /etc/pam.d/login

Vim /etc/pam.d/sshd

even_deny_root    也限制root用户;

deny         

  設置普通用戶和root用戶連續錯誤登陸的最大次數,超過最大次數,則鎖定該用戶  unlock_time        設定普通用戶鎖定後,多少時間後解鎖,單位是秒;

root_unlock_time      設定root用戶鎖定後,多少時間後解鎖,單位是秒;

此處使用的是 pam_tally2 模塊,如果不支持 pam_tally2 可以使用 pam_tally 模塊。另外,不同的pam版本,設置可能有所不同,具體使用方法,可以參照相關模塊的使用規則。

添加參數

1

auth      required  pam_tally2.so   deny=3 lock_time=300 even_deny_root root_unlock_time=10

clip_image029

clip_image031

当用户输入指定次数错误的密码登陆会被锁定,

clip_image033

1

Pam_tally2 –user 查看锁定的账户信息

clip_image035

解锁账户

1

Pam_tally2 –r –u users

clip_image037

我們通過以上方式做完配置後,完全可以減少暴力破解的可能性,那為了更好的降低攻擊性,我們也可以修改默認的登陸端口,我們都知道linux通過ssh登陸的默認端口是22,我們也可以22端口更改為其他未使用的端口

1

Vim /etc/ssh/sshd_config 取消port 22的注释,然后将22端口修改为其他端口

clip_image039

最後呢,我們再說說,Centos下設置使用SSH通過密鑰登陸。

我們一般使用的工具比如xshell,crt,putty等來進行linux的登陸及管理;今天呢?我們主要介紹使用xshell工具進行介紹,因為我個人比較喜歡用xshell,其實所有工具都互通的

我們使用SSL客戶端工具來生成密鑰對

單擊工具---新建用戶密鑰生成向導

clip_image041

密码类型:RSA 密码长度:3024

clip_image043

生成3072位RSA公钥文件

clip_image045

定义密钥名称及密码;密码可以忽略

clip_image047

保存公钥文件为文件

clip_image049

xshell工具会自动导入公钥文件,我们右击生成的公钥文件----属性

clip_image051

单击公钥---复制内容

clip_image053

或者打开本地保存的公钥文件,复制内容

clip_image055

登陸Linux主機系統配置,設置使用密鑰來登陸

我們需要在服務器當前登錄的用戶目錄下創建.ssh文件夾

1

2

3

mkdir .ssh/ 创建一个隐藏文件夹

cd .ssh/ 进入该隐藏文件夹

Vim authorized_keys 创建authorized_keys文件,该文件名一定要写正确

然后将id_rsa_3072.pub里面的代码复制粘贴即可

clip_image057

为了安全起见我们更改下权限!

1

2

#chmod 700 ~/.ssh

#chmod 644 ~/.ssh/authorized_keys

1

最后建议修改ssh的配置文件:修改/etc/ssh/sshd_config文件,设置禁止密码验证登录登陆系统 vim /etc/ssh/ssh_config

1

#PasswordAuthentication yes 修改为 PasswordAuthentication no

clip_image059

因为是在本地的xshell进行配置的,所以我们无需要导入公钥文件,我们直接使用xshell进行登陆

clip_image061

因为我们没有密码,所以直接登陆即可,成功登陆后查看log文件信息

1

Tail -f /var/log/secure

clip_image063

如果需要在其他機器上登陸的話,我們需要導出該公鑰文件,然後再其他工具上導入即可

單擊工具---用戶密鑰管理者

clip_image065

然后根据需求选择导入和导出即可

clip_image067

延伸阅读

    评论