一、ssh密钥对无交互登录

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

服务端:linl_S    IP:10.0.0.15
客户端:lin_C    IP:10.0.0.16
 
1)在客户端生成密钥对
命令:ssh-keygen

 [root@linl_C ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. #$HOME/.ssh/id_rsa私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. #$HOME/.ssh/id_rsa.pub公钥
The key fingerprint is:
ca:d7::c0:ee:5d::cc:ea:e4::c4:b4:a5:7f:cf root@linl_C
The key's randomart image is:
+--[ RSA ]----+
| |
| . . |
| o + |
| .= o |
| .S. = |
| . o.o.o.. |
| o +.=..o |
| o B.. E |
| ..+ |
+-----------------+
[root@linl_C ~]# ls .ssh/
id_rsa id_rsa.pub
2)发布公钥到服务端
使用ssh-copy-id 命令将客户端生成的公钥发布到远程服务器,并使用 -i 参数指定本地公钥的存放位置。
命令格式:ssh-copy-id -i [公钥] [远程主机用户名]@[远程服务器主机名或IP地址]

 [root@linl_C ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub lin_S        #如果用root账号,则主机可以省略用户名
root@lin_s's password:
Now try logging into the machine, with "ssh 'lin_S'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
3)测试

 [root@linl_C ~]# ssh lin_S                  #无交互登录
Last login: Fri May :: from 10.0.0.16
[root@linl_S ~]# ls $HOME/.ssh/ #在lin_S上$HOME/.ssh/下查看拷贝过来的文件,会将id_rsa.pub重命名为authorized_keys
authorized_keys known_hosts
4)使用其他帐号登录,需要重新上传密钥

 [root@linl_C ~]# ssh-copy-id -i .ssh/id_rsa.pub linypwb@lin_S
linypwb@lin_s's password:
Now try logging into the machine, with "ssh 'linypwb@lin_S'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[root@linl_C ~]# ssh linypwb@lin_S
Last login: Fri May :: from lin_c
[linypwb@linl_S ~]$
[linypwb@linl_S ~]$ ls .ssh/
authorized_keys
5)只使用密钥对验证

 [root@linl_S ~]# vi /etc/ssh/sshd_config
#PasswordAuthentication yes #将认证设置为no
PasswordAuthentication no
[root@linl_S ~]# service sshd restart #重启sshd服务
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
 

二、sshd服务防止暴力破解—fail2ban

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

方法1:提高密码安全等级
             长度:8位以上,最好14位以上
             复杂性:大小写字母,数字,特殊符号
方法2:修改默认的端口号
方法3:不使用root账号登录

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

1)修改登录shell

将 /bin/bash 改为 /sbin/nologin

 [root@linl_S ~]# vim /etc/passwd
#root:x:::root:/root:/bin/bash
root:x:::root:/root:/sbin/nologin
 
2)修改sshd配置文件
     将PermitRootLogin 设置为no

 [root@linl_S ~]# vim /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no
3)将普通用户提升为系统管理员
     将UID和GID改为0
     一般情况这个就可以解决了暴力破解的问题了。

 [root@linl_S ~]# vi /etc/passwd
#linypwb:x::::/home/linypwb:/bin/bash
linypwb:x::::/home/linypwb:/bin/bash [root@linl_C ~]# ssh linypwb@lin_S
linypwb@lin_s's password:
Last login: Fri May :: from lin_c
[root@linl_S ~]# id linypwb
uid=(root) gid=(root) groups=(root)
[root@linl_S ~]# pwd
/home/linypwb
[root@linl_S ~]# whoami
root
 
情况2:暴力破解问题比较严重。 需要把暴力破解的用的IP地址直接禁掉
 

实战3:fail2ban

实战背景:
最近公网网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到drop列表一定时间。 
注:重启iptables服务的话,所有DROP将重置。
 
1)获取软件包
     官网:http://www.fail2ban.org
     附件:fail2ban-0.8.14.tar.gz
2)上传软件包到服务器
      安装lrzsz包
      rz    上传
      sz    下载

 [root@linl_S ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.-27.1.el6.x86_64.rpm
warning: /mnt/Packages/lrzsz-0.12.-27.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [%]
:lrzsz ########################################### [%]
[root@linl_S ~]# rz #选择上传安装包
[root@linl_S ~]# ls fail2ban*
fail2ban-0.8..tar.gz
3)解压fail2ban压缩包

 [root@linl_S ~]# tar -zxf fail2ban-0.8..tar.gz
[root@linl_S ~]# ls
fail2ban-0.8. fail2ban-0.8..tar.gz
4)查看README.md文档帮助,获取安装方法

 [root@linl_S ~]# vim fail2ban-0.8./README.md
 
 需要安装python 开发环境,并且版本要大于2.4
查看当前系统中python 的版本:

 [root@linl_S ~]# python -V
Python 2.6.

5)安装fail2ban

      根据README.md文档安装步骤安装

 [root@linl_S ~]# cd fail2ban-0.8.
[root@linl_S fail2ban-0.8.]# python setup.py install
running install
running build
...
Please do not forget to update your configuration files.
They are in /etc/fail2ban/.
6)生成服务启动脚本
      将file/redhat-initd 拷贝到/etc/init.d/ ,命名为fail2ban
      加入到启动列表

 [root@linl_S fail2ban-0.8.]# cp files/redhat-initd /etc/init.d/fail2ban
[root@linl_S fail2ban-0.8.]# chkconfig --add fail2ban
[root@linl_S fail2ban-0.8.]# chkconfig --list fail2ban
fail2ban :off :off :off :on :on :on :off
互动: 你怎么知道要复制这个文件? 一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?
            这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。

 [root@linl_S fail2ban-0.8.]# grep chkconfig ./* -R
./files/redhat-initd:# chkconfig: - 92 08
7)相关主要文件
/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                #启动脚本文件

 [root@linl_S ~]# ls /etc/fail2ban/
action.d fail2ban.conf fail2ban.d filter.d jail.conf jail.d
 
应用实例:
设置条件: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/ #忽略的IP列表,不受设置限制
bantime = #屏蔽时间,单位:秒
findtime = #这个时间段内超过规定次数会被ban掉
maxretry = #最大尝试次数
backend = auto #日志修改检测机制(gamin、polling和auto这三种)
[sshd] #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
enabled = false #是否激活此项(true/false)
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.com, sendername="Fail2Ban"] #触发报警的收件人
logpath = /var/log/sshd.log #检测的系统的登陆日志文件。
1)jail.conf 配置如下:

 [ssh-iptables]
enabled = true #是否激活此项(true/false)修改成 true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure #这里要写sshd服务日志文件
findtime = #在5分钟内内出现规定次数就开始工作
maxretry = #3次密码验证失败
bantime = #禁止用户IP访问主机1小时
2)启动fail2ban服务

 [root@linl_S ~]# service fail2ban start
Starting fail2ban: [ OK ]
3)清空日志,准备测试

 [root@linl_S ~]# > /var/log/secure     #清空日志,从现在开始
[root@linl_S ~]# /etc/init.d/fail2ban restart #重启fail2ban 服务
Stopping fail2ban: [ OK ]
Starting fail2ban: [ OK ]
[root@linl_S ~]# iptables -nL #查看防火墙状态
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp -- 0.0.0.0/ 0.0.0.0/ tcp dpt: Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination Chain fail2ban-SSH ( references) #多出一条fail2ban-SSH的规则链
target prot opt source destination
RETURN all -- 0.0.0.0/ 0.0.0.0/
4)lin_C失败远程登录到lin_S

 [root@linl_C ~]# ssh lin_S    #正确密码可以登录
root@lin_s's password:
Last login: Fri May :: from 10.0.0.1
[root@linl_S ~]# ssh lin_S
ssh: Could not resolve hostname lin_S: Name or service not known
[root@linl_S ~]# logout
Connection to lin_S closed.
[root@linl_C ~]# ssh lin_S #3次错误密码后,被拒绝
root@lin_s's password:
Permission denied, please try again.
root@lin_s's password:
Permission denied, please try again.
root@lin_s's password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@linl_C ~]# ssh lin_S #重新尝试,被锁定
ssh: connect to host lin_S port : Connection refused
5)查看防火墙、fail2ban 等状态

 [root@linl_S ~]# iptables -nL |tail -        #查看防火墙,多了一条REJECT条目,禁止10.0.0.16主机访问
Chain fail2ban-SSH ( references)
target prot opt source destination
REJECT all -- 10.0.0.16 0.0.0.0/ reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/ 0.0.0.0/
[root@linl_S ~]# fail2ban-client status #查看fail2ban 工作状态
Status
|- Number of jail:
`- Jail list: ssh-iptables
[root@linl_S ~]# fail2ban-client status ssh-iptables #查看具体某一项工作状态
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure #读取的日志:/var/log/secure
| |- Currently failed:
| `- Total failed: #一共失败了3次
`- action
|- Currently banned: #当前ban掉了1个IP
| `- IP list: 10.0.0.16 #IP
`- Total banned:
6)解除ban限定
方法1:删除/var/log/fail2ban.log 日志中ban掉的IP信息,需重启fail2ban 服务

 [root@linl_S ~]# vim /var/log/fail2ban.log
...
#-- ::, fail2ban.actions[]: WARNING [ssh-iptables] Ban 10.0.0.16 #删除ban掉IP 的日志信息
[root@linl_S ~]# service fail2ban restart
Stopping fail2ban: [ OK ]
Starting fail2ban: [ OK ]
[root@linl_C ~]# ssh lin_S #此时,lin_C再尝试可以进行登录
root@lin_s's password:
Last login: Fri May :: from lin_c
[root@linl_S ~]#
方法2:清空防火墙

 [root@linl_S ~]# iptables -F        #清空防火墙
[root@linl_S ~]# iptables -nL |tail - #REJECT条目已清空
Chain fail2ban-SSH ( references)
target prot opt source destination [root@linl_C ~]# ssh lin_S #此时,lin_C再尝试可以进行登录
root@lin_s's password:
Last login: Fri May :: from lin_c
[root@linl_S ~]#

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

不同的Linux之间copy文件常用有多种方法,这里利用scp 命令来进行文件复制。
scp基于ssh登录并复制数据。远程复制过程中很安全。操作起来比较方便。
 
例1:把当前一个文件copy到远程另一台主机上。
命令:scp local_file remote_username@remote_ip:remote_folder

 [root@linl_C ~]# scp /etc/passwd root@10.0.0.15:/tmp
root@10.0.0.15's password:
passwd % .5KB/s :
然后会提示你输入另外那台10.0.0.15 主机的root 用户的登录密码,接着就开始copy了。
 
例2:把文件从远程copy到当前系统。
命令:scp remote_username@remote_ip:remote_folder local_file

 [root@linl_S ~]# scp root@10.0.0.16:/etc/passwd /tmp
root@10.0.0.16's password:
passwd % .5KB/s :
 

最新文章

  1. JAVA 设计模式之策略模式
  2. 史上最牛js
  3. html页面清除缓存
  4. <实训|第十天>从底层解释一下U盘内存为什么变小的原因附数据恢复的基本原理
  5. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结
  6. 111. Minimum Depth of Binary Tree
  7. tokudb引擎安装-2
  8. GC日志补充
  9. USB通讯协议之深入理解
  10. FineUI页面布局
  11. jquery 单击table行事件和radio的选中事件冲突
  12. 调用MobileAPI的设计(iOS篇)
  13. Linux中FTP服务器的搭建
  14. 用js来实现那些数据结构—目录
  15. 工具篇-Spring boot JPA多数据源
  16. NPOI导出Excel帮助类
  17. 学习pyyaml
  18. SQL Server聚合函数与聚合开窗函数 (转载)
  19. jmeter参数化、添加变量、生成随机数和导入csv文件数据
  20. 【require.js】模块化开发

热门文章

  1. java中的socket编程
  2. Eclipse初体验
  3. 170721、springboot编程之注解(annotation)列表
  4. JS事件监听的添加方法
  5. 原来css可以直接覆盖内联style
  6. ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案
  7. JavaCollection Java 集合框架
  8. pandas 从txt读取DataFrame&DataFrame格式化保存到txt
  9. day14(编码实战-用户登录注册)
  10. JavaWeb404排错的小技巧