本节所讲内容:
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 ]