1.创建出一个bond网卡
nmcli命令配置网卡信息有一定的难度,所以咱们放到了第九章才开始讲解。首先创建一个bond网卡,命令与参数的意思是创建了一个类型为bond(绑定)、名称为bond0、网卡名为bond0的绑定设备,模式为balance-rr:
[root@linuxprobe ~]# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=balance-rr" Connection 'bond0' (b37b720d-c5fa-43f8-8578-820d19811f32) successfully added.
这里使用的是balance-rr网卡绑定模式,rr是round-robin的缩写,全称也叫轮循模式。round-robin的特点是会根据设备顺序依次传输数据包,提供负载均衡的效果,让带宽变得更大,一旦某个网卡故障马上切换到另外一台设备上,保证网络传输不被中断。而active-backup网卡绑定模式也比较常用,特点是平时只有一块网卡正常工作,另一个设备待命,一旦出现损坏时自动顶替上去,冗余能力比较强,因此也被叫做主备模式。
比如有一台用于提供NFS或者samba服务的文件服务器,它所能提供的最大网络传输速度为100Mbit/s,但是访问该服务器的用户数量特别多,那么它的访问压力一定很大。在生产环境中,网络的可靠性是极为重要的,而且网络的传输速度也必须得以保证。针对这样的情况,比较好的选择就是balance-rr网卡绑定模式了。因为balance-rr能够让两块网卡同时一起工作,当其中一块网卡出现故障后能自动备援,且无需交换机设备支援,从而提供了可靠的网络传输保障。
2.向bond0添加从属网卡
刚刚创建成功的bond0设备当前仅仅是个名称,里面并没有真正能为用户传输数据的网卡设备,接下来要把ens160和ens192网卡添加进去。其中“con-name”参数后面接的是从属网卡名称,可以随时设置,而“ifname”参数后面接的是两块网卡名称,一定要以同学们实际为准,不要直接复制:
[root@linuxprobe ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname ens160 master bond0 Connection 'bond0-port1' (8a2f77ee-cc92-4c11-9292-d577ccf8753d) successfully added. [root@linuxprobe ~]# nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname ens192 master bond0 Connection 'bond0-port2' (b1ca9c47-3051-480a-9623-fbe4bf731a89) successfully added.
3.配置bond0设备的网卡信息
配置网卡参数的方法有很多,为了让咱们这个实验的配置过程更加具有一致性,所以决定还是用nmcli命令依次配置网卡的IP地址及子网掩码、网关、DNS、搜索域和手动配置等参数。如果同学们不习惯这个命令,也可以用编辑网卡配置文件或nmtui命令的方式完成下面操作:
[root@linuxprobe ~]# nmcli connection modify bond0 ipv4.addresses 192.168.10.10/24 [root@linuxprobe ~]# nmcli connection modify bond0 ipv4.gateway 192.168.10.1 [root@linuxprobe ~]# nmcli connection modify bond0 ipv4.dns 192.168.10.1 [root@linuxprobe ~]# nmcli connection modify bond0 ipv4.dns-search linuxprobe.com [root@linuxprobe ~]# nmcli connection modify bond0 ipv4.method manual
4.启动它!
接下来就是最激动人心的时刻了,启动它吧!再顺便看下设备详细的列表:
[root@linuxprobe ~]# nmcli connection up bond0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/22) [root@linuxprobe ~]# nmcli device status DEVICE TYPE STATE CONNECTION bond0 bond connected bond0 ens160 ethernet connected ens160 virbr0 bridge connected virbr0 ens192 ethernet connected bond0-port2 lo loopback unmanaged -- virbr0-nic tun unmanaged --
当接下来用户访问192.168.10.10这个主机IP地址的时候,实际上是由两块网卡设备在共同提供服务。 可以在本地主机执行ping 192.168.10.10命令检查网络的连通性。为了检验网卡绑定技术的自动备援功能,我们突然在虚拟机硬件配置中随机移除一块网卡设备,如图9-13所示。可以非常清晰地看到网卡切换的过程(一般只有1个数据丢包),然后另外一块网卡会继续为用户提供服务。
图9-13 随机移除掉任意一块网卡
[root@linuxprobe ~]# ping 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.109 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.102 ms 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.066 ms ping: sendmsg: Network is unreachable 64 bytes from 192.168.10.10: icmp_seq=5 ttl=64 time=0.065 ms 64 bytes from 192.168.10.10: icmp_seq=6 ttl=64 time=0.048 ms 64 bytes from 192.168.10.10: icmp_seq=7 ttl=64 time=0.042 ms 64 bytes from 192.168.10.10: icmp_seq=8 ttl=64 time=0.079 ms ^C --- 192.168.10.10 ping statistics --- 8 packets transmitted, 7 received, 12% packet loss, time 7006ms rtt min/avg/max/mdev = 0.042/0.073/0.109/0.023 ms
由于在RHEL8系统中网卡绑定切换间隔为1毫秒,也就是1/1000秒,因此上面一个丢包情况大概率都不会出现。
9.2 远程控制服务
9.2.1 配置sshd服务
SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式。在此之前,一般使用FTP或Telnet来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,因此很不安全,很容易受到黑客发起的中间人攻击,这轻则篡改传输的数据信息,重则直接抓取服务器的账户密码。
想要使用SSH协议来远程管理Linux系统,则需要部署配置sshd服务程序。sshd是基于SSH协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法:
基于口令的验证—用账户和密码来验证登录;
基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥进行比较;该方式相较来说更安全。
前文曾多次强调“Linux系统中的一切都是文件”,因此在Linux系统中修改服务程序的运行参数,实际上就是在修改程序配置文件的过程。sshd服务的配置信息保存在/etc/ssh/sshd_config文件中。运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多以井号开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的井号。sshd服务配置文件中包含的重要参数如表9-1所示。
表9-1 sshd服务配置文件中包含的参数以及作用
参数 | 作用 |
Port 22 | 默认的sshd服务端口 |
ListenAddress 0.0.0.0 | 设定sshd服务器监听的IP地址 |
Protocol 2 | SSH协议的版本号 |
HostKey /tc/ssh/ssh_host_key | SSH协议版本为1时,DES私钥存放的位置 |
HostKey /etc/ssh/ssh_host_rsa_key | SSH协议版本为2时,RSA私钥存放的位置 |
HostKey /etc/ssh/ssh_host_dsa_key | SSH协议版本为2时,DSA私钥存放的位置 |
PermitRootLogin yes | 设定是否允许root管理员直接登录 |
StrictModes yes | 当远程用户的私钥改变时直接拒绝连接 |
MaxAuthTries 6 | 最大密码尝试次数 |
MaxSessions 10 | 最大终端数 |
PasswordAuthentication yes | 是否允许密码验证 |
PermitEmptyPasswords no | 是否允许空密码登录(很不安全) |
接下来的实验种会使用两台虚拟机,IP地址及作用如表9-2所示。
表9-2 sshd服务实验机器简介
主机地址 | 操作系统 | 作用 |
192.168.10.10 | Linux | 服务器 |
192.168.10.20 | Linux | 客户端 |
在RHEL 8系统中,已经默认安装并启用了sshd服务程序。接下来在客户端使用ssh命令进行远程连接服务器,其格式为“ssh [参数] 主机IP地址”,要退出登录则执行exit命令。第一次访问时需要输入yes来确认对方主机的指纹信息:
[root@Client ~]# ssh 192.168.10.10 The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established. ECDSA key fingerprint is SHA256:5d52kZi1la/FJK4v4jibLBZhLqzGqbJAskZiME6ZXpQ. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts. root@192.168.10.10's password: 此处输入服务器管理员密码 Activate the web console with: systemctl enable --now cockpit.socket Last login: Fri Jul 24 06:26:58 2020 [root@Server ~]# [root@Server ~]# exit logout Connection to 192.168.10.10 closed.
如果禁止以root管理员的身份远程登录到服务器,则可以大大降低被黑客暴力破解密码的几率。下面进行相应配置。首先使用Vim文本编辑器打开服务器上的sshd服务主配置文件,然后把第46行#PermitRootLogin yes参数前的井号(#)去掉,并把参数值yes改成no,这样就不再允许root管理员远程登录了。记得最后保存文件并退出。
[root@Server ~]# vim /etc/ssh/sshd_config ………………省略部分输出信息……………… 43 # Authentication: 44 45 #LoginGraceTime 2m 46 PermitRootLogin no 47 #StrictModes yes 48 #MaxAuthTries 6 49 #MaxSessions 10 ………………省略部分输出信息………………
再次提醒的是,一般的服务程序并不会在配置文件修改之后立即获得最新的参数。如果想让新配置文件生效,则需要手动重启相应的服务程序。最好也将这个服务程序加入到开机启动项中,这样系统在下一次启动时,该服务程序便会自动运行,继续为用户提供服务。
[root@Server ~]# systemctl restart sshd [root@Server ~]# systemctl enable sshd
这样一来,当root管理员再来尝试访问sshd服务程序时,系统会提示不可访问的错误信息。虽然sshd服务程序的参数相对比较简单,但这就是在Linux系统中配置服务程序的正确方法。大家要做的是举一反三、活学活用,这样即便以后遇到了陌生的服务,也一样可以搞定了。
[root@Client ~]# ssh 192.168.10.10 root@192.168.10.10's password:此处输入服务器管理员密码 Permission denied, please try again.
为了避免后续实验不能用root管理员账号登录了,请同学们再动手把上面的参数修改回来吧:
[root@Server ~]# vim /etc/ssh/sshd_config ………………省略部分输出信息……………… 43 # Authentication: 44 45 #LoginGraceTime 2m 46 PermitRootLogin yes 47 #StrictModes yes 48 #MaxAuthTries 6 49 #MaxSessions 10 ………………省略部分输出信息……………… [root@Server ~]# systemctl restart sshd [root@Server ~]# systemctl enable sshd
如果读者想使用Windows系统进行访问也没问题,首先确保网络是可以通信的,随后在Xshell、Putty、SecureCRT、Secure Shell Client等工具中选择一个喜欢的,远程连接试试看吧~如图9-14、9-15与9-16所示。
图9-14 远程登录输入账号名称
图9-15 远程登录输入账号密码
图9-16 远程登录成功界面
9.2.2 安全密钥验证
加密是对信息进行编码和解码的技术,它通过一定的算法(密钥)将原本能被直接阅读的明文信息转换成密文形式。密钥即是密文的钥匙,有私钥和公钥之分。在传输数据时,如果担心被他人监听或截获,就可以在传输前先使用公钥对数据加密处理,然后再行传送。这样,只有掌握私钥的用户才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。
一言以蔽之,在生产环境中使用密码进行口令验证终归存在着被暴力破解或嗅探截获的风险。如果正确配置了密钥验证方式,那么sshd服务程序将更加安全。我们下面进行具体的配置,其步骤如下。
第1步:在客户端主机中生成“密钥对”,记住是客户端。
[root@Client ~]# 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. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:kHa7B8V0nk63evABRrfZhxUpLM5Hx0I6gb7isNG9Hkg root@linuxprobe.com The key's randomart image is: +---[RSA 2048]----+ | o.=.o.+| | . + =oB X | | + o =oO O o| | . o + *.+ ..| | .ES . + o | | o.o.= + . | | =.o.o . o | | . . o. . | | .. | +----[SHA256]-----+
第2步:把客户端主机中生成的公钥文件传送至远程服务器:
[root@Client ~]# ssh-copy-id 192.168.10.10 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.10.10's password: 此处输入服务器管理员密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.10.10'" and check to make sure that only the key(s) you wanted were added.
第3步:对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在修改配置文件后保存并重启sshd服务程序。
[root@Server ~]# vim /etc/ssh/sshd_config ………………省略部分输出信息……………… 70 # To disable tunneled clear text passwords, change to no here! 71 #PasswordAuthentication yes 72 #PermitEmptyPasswords no 73 PasswordAuthentication no 74 ………………省略部分输出信息……………… [root@Server ~]# systemctl restart sshd
第4步:在客户端尝试登录到服务器,此时无须输入密码也可成功登录,特别方便:
[root@Client ~]# ssh 192.168.10.10 Activate the web console with: systemctl enable --now cockpit.socket Last failed login: Thu Jan 28 13:44:09 CST 2021 from 192.168.10.20 on ssh:notty There were 2 failed login attempts since the last successful login. Last login: Thu Jan 28 13:22:34 2021 from 192.168.10.20