1 清空关闭防火墙
由于前期尚未学习“防火墙”为了不受到防火墙影响实验的顺利进行,因此清空并关闭防火墙。
[root@root ~]# iptables -F #清空防火墙规则。
[root@root ~]# systemctl stop firewalld #关闭防火墙。
[root@root ~]# systemctl disable firewalld #设置开机不启动防火墙。
2 关闭SELinux
[root@root ~]# getenforce #查看SElinux状态。
Disabled
[if !supportLists]1. [endif]永久关闭SElinux:
[root@root ~]# vim /etc/selinux/config #修改SElinux配置文件,修改SELINUX=disabled,如图 1-1 所示,修改完成后并保存退出,修改文件后需要重启主机则会生效。
3 配置静态IP
[root@root ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPADDR=192.168.0.63
GATEWAY=192.168.0.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
NAME="ens32"
UUID="5e02ab66-a084-404a-bb4c-50bf47bd1bd5"
DEVICE="ens32"
ONBOOT="yes"
注释:修改网卡配置文件,主要修改内容项BOOTPROTO="static" 、ONBOOT="yes" 、IPADDR=192.168.0.63 、GATEWAY=192.168.0.1 、NETMASK=255.255.255.0 、DNS1=114.114.114.114 以上6项。
关闭NetworkManager 服务:
[root@root ~]# systemctl stop NetworkManager #关闭 NetworkManager 。
[root@root ~]# systemctl disable NetworkManager #设置开启不启动。
4 配置主机和IP映射关系
[root@xuegod63 ~]# vim /etc/hosts
127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 xuegod63.cn xuegod63
192.168.1.64 xuegod64.cn xuegod64
注释:修改 /etc/hosts配置文件,添加以下两项。
192.168.1.63 xuegod63.cn xuegod63
192.168.1.64 xuegod64.cn xuegod64
5 修改主机名
[root@root ~]# vim /etc/hostname #修改主机名配置文件(永久生效,需要重启)。
xuegod63
[root@root ~]# hostname xuegod63 #临时设置,立即生效(需要重启当前终端)。
xuegod63
6 配置Yum源
[if !supportLists]1.[endif]配置本地Yum源:
[root@root ~]# mount /dev/sr0 /mnt/ #挂载光驱。
[root@root ~]# echo "/dev/sr0 /mnt iso9660 defaults 0 0" >> /etc/fstab #设置开机自动挂载光驱。
[root@root ~]# rm -rf /etc/yum.repos.d/* #删除/etc/yum.repos.d/目录的所有文件。
[root@root ~]# cat > /etc/yum.repos.d/centos7.repo <<EOF
> [centos7-source]
>name= centos7-source
>baseurl=file:///mnt
> enabled=1
>gpgcheck=0
> EOF
注释:生成文档,并在< EOF结束符以内的内容。
[if !supportLists]2.[endif]配置网络yum源:
阿里云镜像源站点(http://mirrors.aliyun.com/)。
CentOS镜像参考:http://mirrors.aliyun.com/help/centos
[if !supportLists](1) [endif]备份:
把CentOS-Base.repo文件重新命名为CentOS-Base.repo.backup 。
[root@root ~]# mv /etc/yum.repos.d/CentOS-Base.repo{,.backup}
[if !supportLists](2) [endif]下载新的CentOS-Base.repo 到/etc/yum.repos.d/
安装wget工具:
[root@root ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm
下载Yum源:
[root@root ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
生成Yum缓存:
[root@root ~]# yum makecache
百度:163源
7 epel源
[root@root ~]# yum install epel-release -y
8 开机配置成: init 3 模式
[root@xuegod63 ~]# ln -svf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
重启主机,使以上设置生效:
[root@xuegod63 ~] reboot
sshd服务安装-ssh命令使用方法
1 SSHD服务
介绍:SSH协议:安全外壳协议。为Secure Shell的缩写。SSH为建立在应用层和传输层基础上的安全协议。
作用:SSHD服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件。
相比较之前用Telnet方式来传输文件要安全很多,因为Telnet使用明文传输,SSH是加密传输。
服务安装:
需要安装OpenSSH 是个安装包:
OpenSSH软件包,提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务Telnet或Ftp。
安装包:
OpenSSH服务需要4个软件包。
openssh-5.3p1-114.el6_7.x86_64:包含OpenSSH服务器及客户端需要的核心文件。
openssh-clients-5.3p1-114.el6_7.x86_64:OpenSSH客户端软件包。
openssh-server-5.3p1-114.el6_7.x86_64:OpenSSH服务器软件包。
openssh-askpass-5.3p1-114.el6_7.x86_64:支持对话框窗口的显示,是一个基于X系统的密码诊断工具
注释:这四个软件包在我们的CentOS7镜像软件安装包里有。
查看镜像中的openssh*开头的程序包:
[root@xuegod63 Packages]# ls /mnt/Packages/openssh*
/mnt/Packages/openssh-5.3p1-104.el6.x86_64.rpm
/mnt/Packages/openssh-askpass-5.3p1-104.el6.x86_64.rpm
/mnt/Packages/openssh-clients-5.3p1-104.el6.x86_64.rpm
/mnt/Packages/openssh-server-5.3p1-104.el6.x86_64.rpm
1.2.2 安装SSH服务
安装方法有两种:
[if !supportLists]1. [endif]通过Yum安装(推荐使用):
[root@xuegod63 ~]# yum install openssh openssh-clients openssh-server -y
[if !supportLists]2. [endif]本地直接安装rpm包文件:
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/openssh*.rpm
以上选择一种安装方式即可。
[if !supportLists]3. [endif]确认软件包是否已经安装:
[root@xuegod63 ~]# rpm -qa | grep openssh #使用rpm -qa查看所有安装的程序包,并过虑openssh的程序包。
openssh-askpass-5.3p1-114.el6_7.x86_64
openssh-clients-5.3p1-114.el6_7.x86_64
openssh-5.3p1-114.el6_7.x86_64
openssh-server-5.3p1-114.el6_7.x86_64
[if !supportLists]4. [endif]查看软件安装生产的文件:
[root@xuegod63 ~]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ssh-keysign
/usr/share/doc/openssh-5.3p1
[if !supportLists]5. [endif]OpenSSH配置文件:
OpenSSH常用配置文件有两个/etc/ssh/ssh_config和/etc/sshd_config。
ssh_config为客户端配置文件,设置与客户端相关的应用可通过此文件实现。
sshd_config为服务器端配置文件,设置与服务端相关的应用可通过此文件实现。
[if !supportLists]6. [endif]服务启动关闭脚本:
[root@xuegod~]# systemctl restart|stop|start|status sshd
注释:Linux下一般用“|”表示或者(多选一),其中 restart|stop|start|status,在同一时间仅使用一个。
[if !supportLists]7. [endif]开机启动服务:
[root@xuegod63 ~]# chkconfig sshd on
注意:正在将请求转发到“systemctl enable sshd.service”。
查看所有开机管理服务,过虑sshd服务。
[root@xuegod63 ssh]# systemctl list-unit-files | grep sshd
anaconda-sshd.service static
sshd-keygen.service static
sshd.service enabled
sshd@.service static
sshd.socket disabled
方法一:
ssh [远程主机用户名] @[远程服务器主机名或IP地址] -p port
当在Linux主机上远程连接另一台Linux主机时,如当前所登录的用户是root的话,当连接另一台主机时也是用root用户登录时,可以直接使用ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
[root@xuegod ssh]# ssh 192.168.1.64
[root@xuegod64 ~]# useradd cat && echo 123456 | passwd --stdin cat
更改用户 cat 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@xuegod64 ~]# exit
.
普通用户:
创建用户并设置密码为123456。
[root@xuegod63 ~]# useradd cat && echo 123456 | passwd --stdin cat
[root@xuegod63 ~]# ssh cat@192.168.1.64
第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连
接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/.ssh/known_hosts文件中,下次再进行登录时因为保存有该主机信息就不会再提示了,如图 1-5 所示。
方法二:
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
[root@xuegod63 ~]# ssh -l cat 192.168.1.64
-l :-l选项,指定登录名称。
-p:-p选项,指定登录端口(当服务端的端口非默认时,需要使用-p指定端口进行登录)。
SSHD服务配置和管理
1.3.1 配置文件详解
注:在配置文件中参数前面有#号,表示是默认值,当然#号也表示注释。
/etc/ssh/sshd_config配置文件内容详解。
[if !supportLists]1. [endif]Port 22
设置SSHD监听端口号。
[if !supportLists](1) [endif]SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项目!
[if !supportLists](2) [endif]例如想要开放SSHD端口为 22和222,则多加一行内容为: Port 222 即可。
[if !supportLists](3) [endif]然后重新启动SSHD这样就好了。 建议大家修改 port number 为其它端口,防止别人暴力破解。
例1.1:修改SSHD服务默认监听的端口为222.
[root@xuegod63 ~]# vim /etc/ssh/sshd_config #修改ssh服务端配置文件。
改:
Port 22
为:
Port 222
[root@xuegodssh]# systemctl restart sshd #重启sshd服务。
测试:
[root@xuegod74 ~]# netstat -tlunp | grep sshd
tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 4139/sshd
tcp 0 0 :::222 :::* LISTEN 4139/sshd
修改完端口默认端口后,登录方法:
[root@xuegod63 ~]# ssh -p 222 192.168.1.63
[if !supportLists]2. [endif]ListenAddress 0.0.0.0
设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址
安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址
这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
[if !supportLists]3. [endif]Protocol 2
选择的SSH 协议版本,可以是 1 也可以是 2,CentOS 5.x 预设是仅支援V2版本,出于安全考虑,设置为最新的协议版本。
[if !supportLists]4. [endif]#HostKey /etc/ssh/ssh_host_key
设置包含计算机私人密钥的文件
[if !supportLists]5. [endif]SyslogFacility AUTHPRIV
当有人使用SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV,sshd服务日志存放在:/var/log/secure。
例:为什么sshd配置文件中没有指定日志,但日志却存放在了/var/log/secure?
[root@xuegod ssh]# vim /etc/rsyslog.conf #查看日志配置文件,如图 1-6 所示。
[if !supportLists]1.[endif]LoginGraceTime 2m
[if !supportLists](1) [endif]grace意思是系统给与多少秒来进行登录。
[if !supportLists](2) [endif]当使用者连上SSH server 之后,会出现输入密码的画面,在该画面中。
[if !supportLists](3) [endif]在多久时间内没有成功连上SSH server 就强迫断线!若无单位则默认时间为秒。
可以根据实际情况来修改实际
[if !supportLists]2.[endif]# PermitRootLogin yes
是否允许root 登入,默认是允许的,但是建议设定成no,真实的生产环境服务器,是不允许root账号直接登陆的,仅允许普通用户登录,需要用到root用户再切换到root用户。
[if !supportLists]3.[endif]PasswordAuthentication yes
密码验证当然是需要的!所以这里写yes,也可以设置为no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
[if !supportLists]4.[endif]# PermitEmptyPasswords no
是否允许空密码的用户登录,默认为no,不允许空密码登录。
例1.2:给sshd服务添加一些警告信息。
[root@xuegod ~]# cat /etc/motd
[root@xuegod ~]# echo 'Warning ! From now on, all of your operation has been record!'> /etc/motd
测试:
[root@xuegod ~]# ssh 192.168.1.64 #登录主机。
root@192.168.0.64's password:
Last login: Thu Jun 23 14:02:38 2016 from 192.168.0.1
Warning ! From now on, all of your operation has been record!
[if !supportLists]5.[endif]# PrintLastLog yes
显示上次登入的信息!默认为yes 。
例1.3:
[root@xuegod63 ~]# ssh 192.168.1.63 #登录主机。
Last login: Tue Nov 4 19:57:31 2014 from 192.168.1.107 #PrintLastLog yes项定义即是该回显上次登录的信息。
[if !supportLists]6.[endif]# UseDNS yes
一般来说,为了要判断客户端来源是正常合法的,因此会使用DNS 去反查客户端的主机名,但通常在内网互连时,该项设置为no,因此使联机速度会快些。
防止暴力破解的方法有两种:
[if !supportLists](1) [endif]密码足够的复杂,密码的长度要大于8位最好大于20位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成。
[if !supportLists](2) [endif]修改默认端口号。
[if !supportLists](3) [endif]不允许root账号直接登陆,添加普通账号,授予root的权限。
思考:是否可以禁止root身份登录?
答:不行,因为有些程序需要使用root身份登录并运行。另外判断一个用户是不是超级管理员,看的是用户的ID是否为0。
[if !supportLists](4) [endif]不允许密码登陆,只能通过认证的密钥来登陆系统。
[if !supportLists]1. [endif]通过密钥认证实现SSHD认证。
实验环境:
服务端:xuegod63 IP:192.168.1.63
客户端:xuegod64 IP:192.168.1.64
客户端生成密钥对,然后把公钥传输到服务端
[root@xuegod64 ~]# 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): #下面要求输入密码,这里的passphrase 密码是对生成的私钥文件(/root/.ssh/id_dsa)的保护口令,如果不设置可以回车。
Enter same passphrase again: #直接回车。
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
da:2c:d8:53:92:6e:ff:4a:54:14:cd:23:28:b3:bb:3b root@xuegod64
The key's randomart image is:
+--[ RSA 2048]-----+
| .o+ |
| o ... + |
| + .. . |
| .. . |
| o.S |
| +.B |
| . B.+ |
| .E= |
| .ooo. |
+--------------------+
[root@xuegod64 ~]# cd /root/.ssh/ #切换工作目录至家目录下的.ssh目录下。
[root@xuegod64 .ssh]# ls #可查看到生成的id_rsa、id_rsa.pub文件。
id_rsa id_rsa.pub known_hosts
[if !supportLists]2. [endif]发布公钥到服务端。
使用ssh-copy-id 命令将客户端生成的公钥发布到远程服务器192.168.1.63 xuegod63。
[root@xuegod64 .ssh]# ssh-copy-id -i 192.168.1.63
The authenticity of host '192.168.1.63(192.168.0.63)' can't be established.
RSA key fingerprint is d9:17:d7:db:38:7c:e8:56:9c:4b:7e:00:7f:9e:1c:74.
Are you sure you want to continue connecting (yes/no)? yes #输入yes
Warning: Permanently added '192.168.0.64' (RSA) to the list of known hosts.
root@192.168.1.63's password: #输入192.168.1.63主机登录密码。
Now try logging into the machine, with "ssh '192.168.1.63'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting
#这个时候可以通过ssh 无密钥直接登陆主机
注意:如果服务器不是监听22端口,则需要指定端口传输密钥:
[root@xuegod64 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 222 root@192.168.1.63
优点:使用简单、灵活、功能强大
实战背景:
最近公网网站一直被别人暴力破解SSHD服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
然而fail2ban程序可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很实用、很强大!
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间。
注:重启iptables服务的话,所有DORP将重置。
下载软件包
fail2ban程序下载地址:http://www.fail2ban.org/wiki/index.php/Downloads,
[if !supportLists]1. [endif]需要安装python开发环境,并且版本要大于2.4。
[root@xuegod63 ~]# python -V #查看当前系统中python的版本。
Python 2.7.5
[if !supportLists]2. [endif]使用Yum安装fail2ban
[root@xuegod63 ~]# yum -y install epel-release #已经安装好了epel源,这一步可忽略。
[root@xuegod63 ~]# yum -y install fail2ban
[if !supportLists]3. [endif]相关主要文件说明
[root@xuegod63 ~]# ls /etc/fail2ban/
/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置。
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置。
/etc/fail2ban/filter.d #与条件相关的目录,内含默认文件。过滤日志关键内容设置。
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值。
应用实例
设置条件:SSH远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用SSHD服务的日志分析,指定动作阀值即可。
实例文件/etc/fail2ban/jail.conf及说明如下:
[root@xuegod63 ~]# vim /etc/fail2ban/jail.conf
[DEFAULT] #全局设置。
ignoreip = 127.0.0.1/8 #忽略的IP列表,不受设置限制。
bantime = 600 #屏蔽时间,单位:秒。
findtime = 600 #这个时间段内超过规定次数会被ban掉。
maxretry = 5 #最大尝试次数。
backend = auto #日志修改检测机制(gamin、polling和auto这三种)。
[sshd] #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
#加入如下内容
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.com, 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次密码验证失败。
[if !supportLists]2. [endif]启动服务
[root@xuegod63 ~]# systemctl start fail2ban #启动fail2ban服务。
[root@xuegod63 ~]# systemctl enable fail2ban #设置开机自动启动。
[if !supportLists]3. [endif]测试
[root@xuegod63 ~]# > /var/log/secure #清空日志内容。
[root@xuegod63 fail2ban]# systemctl restart fail2ban #重启fail2ban服务。
[root@xuegod63 ~]# iptables -L -n #在fail2ban服务启动后,iptables会多生成一个规则链,如图 1-10 所示。
测试:故意输入错误密码3次,再进行登录时,会拒绝登录。
[root@xuegod64 ~]# ssh 192.168.1.63
root@192.168.1.63's password: #故意输入错误密码。
Permission denied, please try again.
root@192.168.1.63's password: #故意输入错误密码。
Permission denied, please try again.
root@192.168.1.63's password: #故意输入错误密码。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@xuegod64 ~]# ssh 192.168.1.63
ssh: connect to host 192.168.1.63 port 22: Connection refused
在xuegod63上查看:
[root@xuegod63 ~]# iptables -L |tail -4 #可以查看到192.168.1.64该IP被iptables禁止所有访问。
Chain fail2ban-SSH (1 references)
target prot opt source destination
REJECT all -- 192.168.1.64 anywhere
RETURN all -- anywhere anywhere
[root@xuegod63 ~]# fail2ban-client status #配置好之后我们检测下fail2ban是否工作。
Status
|- Number of jail: 1
`- Jail list: sshd #具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功。
[root@xuegod63 ~]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.1.64
[if !supportLists]2. [endif]查看fail2ban的日志能够看到相关的信息。
[root@xuegod63 ~]# tail /var/log/fail2ban.log
2018-11-07 16:11:01,476 fail2ban.actions [27932]: NOTICE [sshd] Ban 192.168.1.64
需要注意的2点:
[if !supportLists](1) [endif]另外如果后期需要把iptables清空后或iptables重启后,也需要把fail2ban重启一下。
[if !supportLists](2) [endif]如果修改ssh默认端口22为2015后,配置fail2ban来监控SSHD服务需要修改配置文件
例:
[root@xuegod63 ~]# vim /etc/ssh/sshd_config
改17 #Port 22
为17 Port 2015
[root@xuegod63 ~]# systemctl restart sshd
[root@xuegod63 ~]# vim /etc/fail2ban/jail.conf
#修改iptables动作中的端口号,默认为SSH,如图 1-11 所示。
改:port=ssh
为:port=2015
重启服务即可:
[root@xuegod63 ~]# systemctl restart fail2ban