SSH防止暴力破解和xinetd超级服务的使用

本节所讲内容:

       ssh密钥对无交互登录

 

实战:通过密钥进行sshd服务认证

sshd服务端: xuegod63.cn

sshd客户端:xuegod64.cn

 

1)在客户端生成密钥对

[root@xuegod64 ~]#ssh-keygen

Generating public/privatersa key pair.

Enter file in which tosave the key (/root/.ssh/id_rsa):

Enter passphrase (emptyfor no passphrase):

Enter same passphraseagain:

Your identification hasbeen saved in /root/.ssh/id_rsa.

Your public key has beensaved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

b6:c7:1e:5f:ed:ec:1b:a8:01:12:d0:d5:90:17:69:85root@xuegod64.cn

The key's randomart imageis:

+--[ RSA 2048]----+

|     .. .o+.=.  |

|      .. . E    |

|       . o      |

|        .       |

|       .S.      |

|       ..o.  .. |

|        . +. ....|

|         o oo. o.|

|          ... o=|

+-----------------+

 

查看生成的密钥文件

[root@xuegod64 ~]# ls/root/.ssh/

id_rsa  id_rsa.pub

 

2)发布公匙

使用ssh-copy-id 命令将客户端生成的公钥发布到远程服务器192.168.1.63 xuegod63.cn,并使用-i 参数指定本地公钥的存放位置。

例:

[root@xuegod64 ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.63

Now try logging into themachine, with "ssh 'root@192.168.1.63'", and check in:

 

  .ssh/authorized_keys

 

to make sure we haven'tadded extra keys that you weren't expecting.

 

测试

[root@xuegod64 ~]# ssh192.168.1.63

Last login: Thu Mar 2420:32:14 2016 from 192.168.1.100

在xuegod63上,查看拷贝过去的文件,会将id_dsa.pub重命名为authorized_keys

[root@xuegod163 ~]# ls /root/.ssh/

authorized_keys

 

例:在xuegod64中,使用rm用户登录xuegod63,需要重新上传密钥

[root@xuegod64 ~]#useradd rm

[root@xuegod64 ~]# echo123456 | passwd --stdin rm

[root@xuegod64 ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub rm@192.168.1.63

rm@192.168.1.63'spassword:

Now try logging into themachine, with "ssh 'rm@192.168.1.63'", and check in:

 

  .ssh/authorized_keys

 

to make sure we haven'tadded extra keys that you weren't expecting.

 

[root@xuegod64 ~]# sshrm@192.168.1.63

 

例:只使用密钥对验证

vim /etc/ssh/sshd_conf

改:

#PasswordAuthentication yes

PasswordAuthentication no

 

重启sshd

 

实战: sshd服务防止暴力破解

方法1:提高密码安全等级

长度:8位以上,最好14位以上

复杂性:大小写字母,数字,特殊符号

 

方法2:修改默认的端口号

方法3:不使用root账号登录

互动:是否可以禁止root身份登录? 不行,因为有些程序需要使用root身份登录并运行。另外判断一个用户是不是超级管理员,看的是用户的ID是否为0。

[root@xuegod63 ~]# vim /etc/passwd

改:root:x:0:0:root:/root:/bin/bash

为:root:x:0:0:root:/root:/sbin/nologin

 

或者

[root@xuegod63 ~]# vim/etc/ssh/sshd_config

PermitRootLogin no

 

设置普通用户rm为系统管理员

改:rm:x:500:500::/home/rm:/bin/bash

为:rm:x:0:0::/home/rm:/bin/bash

一般情况这个就可以解决了暴力破解的问题了。

 

情况2:暴力破解问题比较严重。 需要把暴力破解的用的IP地址直接禁掉

实战背景:

最近公网网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。

fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!

简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。 

注:重启iptables服务的话,所有DORP将重置。

 

下载软件包:

官方地址:

http://www.fail2ban.org

 

 

上传软件包到服务器

[root@xuegod63 ~]# rpm-ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

rz    上传

sz    下载

[root@xuegod63 ~]# tarzxvf fail2ban-0.8.14.tar.gz

[root@xuegod63 fail2ban-0.8.14]# vimREADME.md  #查看以下内容

需要安装python开发环境,并且版本要大于2.4

查看当前系统中python的版本:

[root@xuegod63fail2ban-0.8.14]# python -V

Python 2.6.6

安装:

[root@xuegod63fail2ban-0.8.14]# python setup.py install

 

生成服务启动脚本

[root@xuegod63fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban

[root@xuegod63fail2ban-0.8.14]# chkconfig --add fail2ban

[root@xuegod63fail2ban-0.8.14]# chkconfig --list fail2ban

fail2ban        0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

 

互动: 你怎么知道要复制这个文件? 一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?

这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。

[root@xuegod63fail2ban-0.8.14]# grep chkconfig ./* -R --color

./files/redhat-initd:#chkconfig: - 92 08

 

相关主要文件

[root@xuegod63 ~]# ls/etc/fail2ban/

action.d  fail2ban.conf fail2ban.d  filter.d  jail.conf jail.d

 

/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置

/etc/fail2ban/fail2ban.conf   #定义了fai2ban日志级别、日志位置及sock文件位置

/etc/fail2ban/filter.d                    #条件文件夹,内含默认文件。过滤日志关键内容设置

/etc/fail2ban/jail.conf    #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值  

# jail   [dʒeɪl]  监狱

/etc/rc.d/init.d/fail2ban               #启动脚本文件

 

应用实例:

设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。

因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。实例文件/etc/fail2ban/jail.conf及说明如下:

[DEFAULT]              #全局设置

ignoreip = 127.0.0.1/8      #忽略的IP列表,不受设置限制

bantime  =600             #屏蔽时间,单位:秒

findtime  =600             #这个时间段内超过规定次数会被ban

maxretry =3               #最大尝试次数

backend =auto            #日志修改检测机制(gamin、polling和auto这三种)

 

[sshd]                  #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。

enabled  =true             #是否激活此项(true/false)修改成 true

filter   =sshd             #过滤规则filter的名字,对应filter.d目录下的sshd.conf

action   = iptables[name=SSH, port=ssh,protocol=tcp]            #动作的相关参数,对应action.d/iptables.conf文件

sendmail-whois[name=SSH,dest=you@example.com, sender=fail2ban@example.c

om,sendername="Fail2Ban"]   #触发报警的收件人

logpath  = /var/log/secure   #检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath  = /var/log/sshd.log

#5分钟内3次密码验证失败,禁止用户IP访问主机1小时。配置如下

bantime  = 3600  #禁止用户IP访问主机1小时

findtime  = 300   #在5分钟内内出现规定次数就开始工作

maxretry = 3    #3次密码验证失败

 

启动服务

[root@xuegod63 ~]#service fail2ban start

启动fail2ban:                                              [确定]

 

测试:

[root@xuegod63fail2ban]# > /var/log/secure  #清日志。从现在开始

[root@xuegod63fail2ban]# /etc/init.d/fail2ban restart

Stoppingfail2ban:                                         [  OK  ]

Startingfail2ban:                                         [  OK  ]

[root@xuegod63fail2ban]# iptables -L -n 

会多生成一个规则链。

[root@xuegod64 ~]#ssh root@192.168.1.63

root@192.168.1.63'spassword:

Permission denied,please try again.

root@192.168.1.63'spassword:

Permission denied,please try again.

root@192.168.1.63'spassword:

Permission denied(publickey,gssapi-keyex,gssapi-with-mic,password).

[root@xuegod64 ~]#ssh root@192.168.1.63

ssh: connect to host192.168.1.63 port 22: Connection refused

 

[root@xuegod63 ~]#iptables -nL | tail -4

Chain fail2ban-SSH (1references)

target     prot opt source               destination

REJECT     all --  192.168.1.64         0.0.0.0/0           reject-with icmp-port-unreachable

RETURN     all --  0.0.0.0/0            0.0.0.0/0

 

查看fail2ban工作状态

[root@xuegod63 ~]#fail2ban-client  status

Status

|- Number ofjail:      1

`- Jail list:           ssh-iptables

 

查看具体某一项的工作状态

[root@xuegod63 ~]#fail2ban-client status ssh-iptables

Status for the jail:ssh-iptables

|- filter

|- File list:        /var/log/secure

|- Currently failed: 0

`- Total failed:     3

`- action

   |- Currently banned: 1

   |  `-IP list:       192.168.1.64

   `- Total banned:     1

 

两台Linux服务器之间复制数据

不同的Linux之间copy文件常用有多种方法:

第三种就是利用scp命令来进行文件复制。

scp基于ssh登录并复制数据。远程复制过程中很安全。操作起来比较方便。

例:要把当前一个文件copy到远程另外一台主机上

[root@xuegod63~]# scp /etc/passwd root@192.168.1.64:/tmp

然后会提示你输入另外那台192.168.1.64主机的root用户的登录密码,接着就开始copy了。

 例:把文件从远程主机copy到当前系统

[root@xuegod64 ~]# scproot@192.168.1.63:/etc/passwd /root/

在Linux之间复制目录: 加-r参数

 

=xinetd服务

xinetd 超级互联网守护进程(telnet tftprsync

xinetd(eXtended InterNETservices daemon)  扩展因特网服务守护进程

作用: 通过xinetd服务来管理一些功能简单小服务。如: telnet、rsync、 tftp服务等。并为这些服务提供安全访问控制功能。

[root@xuegod63 ~]# yum -y install xinetd

 

配置文件

/etc/xinetd.conf

#vim /etc/xinetd.conf   #这是主配置文件,不需要改动 。 重点知道配置文件中这一行内容:

表示加载配置文件时,还会再加载/etc/xinetd.d目录中的配置文件

 

安装被xinetd管理的那些服务:

[root@xuegod63 ~]# yum -y installtelnet-server tftp-server rsync

启动rsync服务

[root@xuegod63 ~]# vim /etc/xinetd.d/rsync

no意为启用这一项

启动服务:

[root@xuegod63 ~]# service xinetd restart

停止 xinetd:                                              [确定]

正在启动 xinetd:                                          [确定]

如何判断rsync服务已经启动?

[root@xuegod63 ~]# vim /etc/services

rsync           873/tcp                         # rsync

rsync           873/udp                         # rsync

 

[root@xuegod63 ~]# netstat -anptu | grep 873

tcp       0      0 :::873                      :::*                        LISTEN      44960/xinetd

 

另一种启动服务的方法:

[root@xuegod63 ~]# vim /etc/xinetd.d/rsync

 

[root@xuegod63 ~]# chkconfig rsync on               #开启rsync服务

[root@xuegod63 ~]# service xinetd restart

停止 xinetd:                                              [确定]

正在启动 xinetd:                                          [确定]

 

查看服务启动状态

[root@xuegod63 ~]# netstat -anptu | grep 873

tcp       0      0 :::873                      :::*                        LISTEN      44988/xinetd

 

 

xinetd的功能:

#vim /etc/xinetd.conf

#      no_access        =      不能访问xinetd管理的那些服务的……

#      only_from        =      只能从……访问xinetd管理服务

(IP、192.168.10.0、192.168.18.0/24、.example.com)

         cps            = 50 10     超过50个连接时,暂停10秒

         instances      = 50        同时最大连接数

         per_source     = 10        同一来源的最大连接数

#       bind            = IP        监听IP(在哪个IP上提供服务)

 

telnet服务

客户端:telnet-0.17-47.el6_3.1.x86_64.rpm

服务端:telnet-server-0.17-47.el6_3.1.x86_64.rpm

telnet

telnet 没有安装就安装,确保安装前已经安装xinetd 服务

[root@xuegod64 ~]# rpm -ivh/mnt/Packages/telnet-server-0.17-47.el6_3.1.x86_64.rpm

warning:/mnt/Packages/telnet-server-0.17-47.el6_3.1.x86_64.rpm: Header V3 RSA/SHA256Signature, key ID fd431d51: NOKEY

error: Failed dependencies:

       xinetd is needed by telnet-server-1:0.17-47.el6_3.1.x86_64

 

安装方法:

[root@xuegod63 ~]# yum -y installtelnet-server

 

telnet远程连接格式:

telnet 主机名

 

Telnet 服务启动方法

由于telnet 是由xinetd 服务管理,所以telnet 启动方法和其他服务不大一样

[root@xuegod63 ~]# vim /etc/xinetd.d/telnet

 

[root@xuegod63 ~]# service xinetd restart

停止 xinetd:                                              [确定]

正在启动 xinetd:                                          [确定]

 

[root@xuegod63 ~]# netstat -antpu | grep 23

tcp       0      0 :::23                       :::*                        LISTEN      45023/xinetd

 

现在客户端就可以telnet 上服务器了,默认不允许root 用户通过telnet 登录,我们可以使用

su -切换到root 用户身份。

验证:

在客户端安装telnet

[root@xuegod64 ~]# yum -y install telnet

我们还可以更新telnet 默认端口号,这样可以降低安全风险,注意不能修改成已经在使用的端口

vim /etc/services

telnet          2333/tcp

telnet          2333/udp

 

修改后重启xinetd 服务

[root@xuegod etc]# service xinetd restart

Stopping xinetd:                                          [  OK  ]

Starting xinetd:                                          [  OK  ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值