2.互联网服务基础之DNS&SSH

 

互联网服务基础之DNS&SSH

1.dns讲解与ip地址划分

浏览器页的原理:
1.通过互联网找到对方的机器
2.然后从对方的机器中,找到对应的文件,下载到本地来
3.通过浏览器进行渲染这样的数据

域名和ip的关系
你手机中电话本
超哥————110
alex-----1192630602
佩奇——————1354506905
我们使用电话本的名字----转化成了电话号码


域名是更容易让人们记住的字符串
ip地址比较难记,因此各互联网定制了DNS,在linux服务器上,安装了dns的服务端软件,提高了一个超大的电话本,key-value类型的数据库,记录了域名————ip地址的对应关系

 

2.nslookup与dns配置文件



通过nslookup命令查看域名的解析关系
1.该命令需要单独安装
需要单独安装dns的套件软件包
yum install bind-utils -y
2.使用nslookup命令(name server lookup)
nslookup www.pythonav.cn
或nslookup



也可以直接ping命令查看关系

【linux的dns配置文件】
1.linux的本地dns解析文件 /etc/hosts文件中,这个文件是运维人员自由定义域名和ip强制解析关系的
127.0.0.1 www.pythonav.cn
ping www.pythonav.cn 解析到了127.0.0.1 因此可以证明hosts文件的解析优先级是高于dns客服端配置文件的

2./etc/resolv.conf 该文件,填入的是互联网dns服务器的地址
文件中定义了域名服务器地址,填入公网的dns服务器地址即可

3.dns劫持的原因

dns服务器的配置,以及什么是dns劫持
/etc/hosts文件 ---自己本地的电话本
/etc/resolv.conf-----填写dns服务器地址的配置文件---(阿里云的dns服务器,收集了世界上所有的域名--ip的对应关系)指定一个专门做电话号码收集的公司

什么是dns劫持?

4.dns在机器上的解析流程

1.在浏览器上输入www.pythonav.cn,操作系统会先检查自己本地的hosts文件,是否存在了写死的对应关系,读取到了记录则进行解析,没有则进行下一步
2.如果hosts文件没有写死的记录,操作系统会再去查看本地的dns缓存,是否有解析关系
3.如果hosts文件和本地dns缓存都没有解析关系,那么操作系统会去我们在网络配置中定义的dns服务器地址去查找,www.pythonav.cn 比如223.5.5.5 8.8.8.8,dns服务器进行查询是否存在www.pythonav.cn的记录,找到了表示该域名已在公网上注册了,找不到表示该域名未注册,不存在

5.dnsmasq搭建dns局域网

dns服务器一般是安装bind服务
如果是小型的域名解析需求,使用dnsmasq即可

#首先需要安装该软件
yum install dnsmasq -y

#dnsmasq的主配置文件
/etc/dnsmasq.conf

#dnsmasq内部解析所需要的ip和域名,也就是用户所需要自定义的域名和ip的对应关系编写
/etc/dnsmasq.hosts #该文件需要手动创建

#dnsmasq的上游DNS服务器地址
/etc/resolv.dnsmasq.conf #也需要手动创建
------------------------------------------

【修改dnsmasq.conf,大概如下参数】
vim /etc/dnsmasq.conf #打开且修改如下参数
#指定上游dns服务器地址的参数
resolv-file=/etc/resolv.dnsmasq.conf

#自定义某些域名及其子域名,都解析到某一个ip地址,添加如下参数
address=/baidu.com/123.206.16.61

#定义dnsmasq的监听地址的配置文件,如果你是本地的linux虚拟机,在这可以填写127.0.1.1 ,也可以写本地的局域网ip,比如192.168.1.34
listen-address=127.0.0.1

#定义一个本地域名配置文件,需要自定义的一些域名解析
addn-hosts=/etc/dnsmasq.hosts

#记录dns查询的日志参数
log-queries
#包含目录的语法,能够包含某一个文件夹下的所有符合定义类型的配置文件
conf-dir=/etc/dnsmasq.d
conf-dir=/etc/dnsmasq.d,.bak
conf-dir=/etc/dnsmasq.d,*.conf

 

 

image-20211017104347022

 

【内部解析的地址关系】
[root@localhost ~]# cat /etc/dnsmasq.hosts
123.206.16.61 yuchao668.com

【添加上游dns服务器地址】
#当dnsmasq在本地找不到解析记录的时候,去上游查找
[root@localhost ~]# cat /etc/resolv.dnsmasq.conf
nameserver 119.29.29.29
nameserver 223.5.5.5

【启动dnsmasq服务】
通过yum安装的软件,直接systemctl启动
systemctl start dnsmasq

[修改本地的dns客户端配置文件,指定自定义的dnsmasq服务器地址]
[root@localhost ~]# cat /etc/resolv.conf
nameserver 123.0.0.1

【测试域名解析是否成功】

6.ssh远程加密连接介绍

ssh是一套网络协议,目的在于保证安全的网络服务以及加密远程登录信息.
linux的ssh命令是实现了ssh协议的一个操作
并且以sshd服务的形式在linux上运行
对ssh协议管理的开源软件是主流的openssh的工具

###为什么要ssh呢

如果一个用户,从自己的笔记本,使用ssh协议登录另一台机器,我们就认为这个登录的方式是安全的 ,因为你的登录信息在传输的时候,是被加密了的,即使被黑客抓取到了信息,也无法破解你的密码,保证服务器的安全。
以前运维人员都是用FTP协议telent工具进行服务器的远程登录,但是这2种协议登录都市基于明文的传输,你的账号密码是以铭文的形式,暴露在互联网中,很容易被黑客截取到数据,对服务器造成安全隐患。
因此为了保证数据传输时的安全性、加密性,因此出现了2种主流的加密方式:
1.对称加密(使用同一个钥匙进行对数据加密,解密时候,也得使用这个钥匙)
2.非对称加密(有2把密钥,一个是公钥(锁),一个是私钥(开锁的钥匙)

对称加密

对数据的加密、对数据的解密,使用的是同一把钥匙。
对称加密的强度很高,难以被破解,但是有一个问题,当你的机器数量特别大的时候,你得大量的方式密钥A,这个时候你就难以保证密钥A的安全性,但凡丢失一个密钥A,其他所有主机的安全性就无法得到保障了

image-20211017125823880

 

 

 

非对称加密

非对称加密解决了对称加密的安全隐患,防止密钥丢失的问题。
对称加密,只有一个密钥
非对称加密,有一对密钥(公钥public key(公钥就是一把锁 ,私钥private key(开这把锁的钥匙)),公钥私钥是成对出现的。
使用公钥加密后的数据,只能使用对应的私钥才能够解开,除非私钥丢失,否则数据被破解的可能性极低。

image-20211017131335598

 

 

 

 

非对称加密的好处在于,私钥是放在服务器上的,即使你传输的数据被黑客截取,黑客也没有钥匙能够打开这个加锁了的数据,因此对数据进行保护

7.中间人攻击

客户端,用户如何确认自己收到的公钥就是来自于目标服务器的呢?

 

 

image-20211017132248431

1.拦截客户的登录请求
2.向客户端发送自己假的公钥,此时客户端如果不知情的情况下,使用该假公钥对数据加密处理
3.客户端发送自己的数据,已经就给了黑客,黑客拿到了该数据,再用自己的私钥进行解密
4.客户端的账号密码此时已经被黑客获取,造成了对服务器的安全隐患

8.如何避免登录服务器时的安全隐患

如何保证服务器的目标正确


【基于口令的服务器验证】
[root@localhost ~]# ssh root@192.168.15.110
The authenticity of host '192.168.15.110 (192.168.15.110)' can't be established.
ECDSA key fingerprint is SHA256:G2DNG89xpGduz+C3heVzP51NKIt45IZI9XO6XZoOkGY.
ECDSA key fingerprint is MD5:bc:84:92:13:d1:af:47:7d:6d:8c:c9:8c:33:cf:80:ab.
Are you sure you want to continue connecting (yes/no)?

这一段ssh首次连接返回的信息,说的是无法确认192.168.15.110这台机器的真实性,但是已知了这个机器的指纹信息

image-20211017133148176

 

 

 

验证远程主机的指纹信息,是否正确?
[root@localhost ~]# ssh-keyscan -t ecdsa 192.168.15.110 |ssh-keygen -if -

 

 

image-20211017141905546

 

[确认服务器身份之后,即可输入yes进行安全的连接]

 

 

image-20211017142522607

此时就表明客服端已经确认了服务器的身份,准备开始连接,输入服务器的账号对应的密码,即可登录

【SSH重要的配置文件】

和ssh相关的配置文件,只要放在该目录
$HOME/.ssh/
[root@localhost ~]# ls ~/.ssh/
config id_rea id_rsa.pub known_hosts

ssh常见的配置文件,作用如下

known_hosts:当客服端接收到服务器的公钥之后,服务器的公钥信息就记录在该文件种,也就代表着客户端相信该服务端的公钥信息了,以便于下次连接,不再需要确认的过程

authorized_keys:该文件是服务器将客户端的公钥信息,保存在这个文件中(用于客户端免密登录的时候使用)

id_rea 就是一个私钥文件,存放了私钥的密码

id_rsa.pub是公钥文件,存放公钥的密码信息

只要你输入服务器正确的地址,用户名,密码之后,就可以登录服务器 了

登录linux服务器的形式

[基于口令,账号密码的登录形式]
基于密码的登录,需要记住复杂的密码,且如果机器数量太多,难以使用密码进行管理
ssh root@192.168.178.142

9.基于公钥的免密登录原理

基于公钥的认证,可以实现免密登录,减少运维人员的心智负担

 

 

image-20211017151107830

公钥免密登录的过程如下:
1.客户端发送自己的公钥给服务器,写入到服务器的authorized_kesy文件中
2.服务器接收到客户端的连接请求后,在自己authorized_kesy文件中匹配,是否存在该客户端的公钥信息,如果存在就生成一个随机数R,再用客户端的公钥,针对随机数R进行加密,得到了一个加密后的随机数 公钥(R),pubkey(R)
3.客户端通过自己的私钥,对pubkey(R)进行解密,得到了随机数R,再针对这个随机数R和当前连接会话sessionkey采用MD5加密方式,生成摘要Digest1,再次发送服务器进行验证
4.服务器针对这个随机数R和sessionkey也采用同样的摘要算法计算得出Digest2
5.服务器比对 Digest1 Digest2是否一致,一致则验证通过,客户端,登录服务器

10.ssh免密登录实战

1.客户端本地生成一对公私钥
[root@localhost ~]# ssh-keygen -t rsa #这个命令输入后,默认直接回车即可
2.客户端发送自己的公钥,发送服务器,存在服务器的authorized_keys文件中
ssh-copy-id root@192.168.178.142
3.此时直接输入登录命令,即可免密登录了
ssh root@192.168.178.142
4.登录服务器,检查客户端的公钥信息

 

 

image-20211017153705603

11.ssh配置文件

linux强调一切皆文件,linux系统更改各种软件的配置参数,也就是在修改文件内容而已 sshd服务的配置文件,默认在/etc/ssh/sshd_config

默认的sshd配置文件,如下
[root@localhost ~]# grep -Ev "^$|^[# ]" /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server

 

 

image-20211017154701140

在生产服务器下,运维人员一般会禁止root用户登录服务器,最大程度的保证服务器的安全,被黑客攻击的几率,以及修改ssh的远程连接端口

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

1.修改ssh端口 Port 23354

2.禁止root登录 PermitRootLogin no

3.禁止用密码登录,只能用被信任的机器,用公私钥进行登录 PasswordAuthentication no

修改/etc/ssh/sshd_config 文件如下参数,此时一个安全的ssh服务器以及配置完毕,参数如下
[root@localhost ~]# grep -Ev "^$|^[# ]" /etc/ssh/sshd_config
Port 23354
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server

注意了,此时别立即重启服务

配置一个普通用户的账号,且支持公钥登录的形式

1.登录服务器,创建普通用户,设置登录密码useradd yuchao
passwd yuchao

2.在自己本地机器,生成一个普通用户的公私钥对
ssh-keygen -t rsa
3.发送公钥给服务器,配置公钥登录
ssh-copy-id yuchao@192.168.178.142
4.在正确配置了公私钥登录之后,yuchao这个用户就可以免密登录linux服务器了
ssh yuchao@192.168.178.142

在linux机器上配置yuchao 用户支持sudo命令

1.使用root登录服务器,配置yuchao 用户支持sudo命令
vim /etc/sudoers文件
添加如下行
##Allow root to run any commands anywhere
root  ALL=(ALL) ALL
yuchao ALL=(ALL) ALL

2.此时尝试用yuchao用户登录,是否能够使用sudo命令

到了最后一步了,使用root账号,重启linux的sshd服务器,以后root用户就无法使用密码来登录了,只能用yuchao这个用户进行免密登录,最大程度保证服务器的安全了

1.使用root用户重启sshd服务
ssh root@192.168.178.142
2.重启sshd服务
systemctl restart sshd
3.此时机器已经禁止root登录,禁止密码登录,且修改了ssh端口为23354
4.此时只能使用配置好的yuchao进行免密登录了
ssh yuchao@192.168.178.142 -p 23354

如上的学习配置,要酌情根据自己 的机器环境去操作,不要太过于固执,灵活学习,灵活使用

posted @ 2021-10-17 16:48  甜甜de微笑  阅读(490)  评论(0编辑  收藏  举报