DNS概念
DNS域名解析,其主要的作用,就是讲一些抽象,不容易记忆的ip地址网页,进行一个指定的命名,方便我们使用和记忆,比如www.baidu.com,我们可以很方便的记住这个域名,但如果让我们去记忆他的ip地址,一个两个或许还好,那如果很多个网页,就不方便记忆了。
浏览网页的原理:
- 通过互联网找到对方的机器
- 然后从对方的机器中,找出对应的文件,下载到本地来
- 通过浏览器进行渲染这样的数据
所以为了方便我们日常的使用,各大互联网公司、企业,也就制定了一个dns服务器,在linux服务器上,安装了dns服务端软件,提供一个key-value类型的数据库,记录了域名—ip地址的对应关系
常见的dns服务器地址
| 阿里:223.5.5.5;223.6.6.6 | 腾讯:119.29.29.29 |
|---|---|
| 114:114.114.114.114 | 谷歌:8.8.8.8 |
tips:如果我们电脑上网特别慢,我们也可以设置这些大型企业的dns服务器
nslookup命令
可以用于查看域名的从哪个dns服务器中查找到对应ip
- 方法一:直接在终端输入nslookup,可以进入一个交互的模式,输入域名就可以得到其信息,不退出则可以一直查看搜索
- 方法二:nslookup 域名,指定一个域名进行其信息查看
- 方法三:nslookup 域名 dns服务器,指定一个dns服务器对其域名进行搜索查看
tips:当然,我们日常中在使用ping命令的时候,也可以看到其对应的ip信息等
linux的DNS配置文件
- 本地dns解析文件,/etc/hosts文件中,这个文件是运维人员自由定义域名和ip强制解析关系的
我们在其文件中写入一个定义关系 ==>> 127.0.0.1 www.pythonav.com
再使用ping命令查看该域名,可以得到ip地址就是我们定义的ip,因此也可以证明,hosts文件的解析优先级高于dns客户配置文件
- /etc/resolv.conf文件中,可以填入互联网的dns服务器地址
也类似于我们自己电脑配置网络中添加其各大企业的dns服务器,对我们日常域名搜索提供帮助
DNS劫持
我们正常访问网页的流程,是将输入的内容,交给机器配置的dns服务器,进行解析最后反馈给我们一个对应的ip地址,然后进行网页的正常访问
而DNS劫持,直白的讲法,就是在这个过程当中,我们的机器遭到了恶意的篡改,将访问提交的内容转到了一个恶意的dns服务器当中,从而反馈给了我们一个恶意的ip地址,导致用户查看到了恶意的网站内容
DNS解析流程
- 在浏览器输入一个域名,操作系统会检查自己本地的hosts文件,是否存在写死的对应关系,读取到则进行对应解析,没有则下一步
- 操作系统查看自己本地的dns缓存,是否有解析关系
- 如果hosts文件和本地的dns缓存都没有解析关系,那么操作系统会去我们在网络配置中定义的dns服务器进行查找,查询是否存在输入的域名信息记录
找到了则表示该域名在公网中注册了,找不得则代表未注册,不存在
dnsmasq(小型域名解析)
DNS服务器一般是安装bind服务,但是bind服务常用于大型的互联网公司,能够操作信息也更多。如果是小型的域名解析,比如我们自己进行一个设定,利用dnsmasq就可以了
第一步:
yum install -y dnsmasq #安装该软件
/etc/dnsmasq.conf #主配置文件
/etc/dnsmasq.hosts #自定义域名和ip的对应关系编写,需要手动创建
/etc/resolv.dnsmasq.conf #上游DNS服务器地址,手动创建
第二步:
【修改/etc/dnsmasq.conf】搜索找到头进行修改,大部分内容都是被#注释掉的
#指定上游dns服务器地址的参数
resolv-file=/etc/resolv.dnsmasq.conf
#自定义某些域名及其子域名,都解析到某一个ip地址
address=/baidu.com/123.206.16.61
address=/taobao.com/123.206.16.61
这里定义了可能会对这些网页不能够正常上网,可能企业中防止上班偷玩可以设置吧
#定义dnsmasq的监听地址配置文件,如果是本地虚拟机可以填写127…,也可以写本地局域网
listen-address=127.0.0.1
#定义一个本地域名配置文件,需要自定义的一些域名解析记录
add-hosts=/etc/dnsmasq.hosts
#记录dns查询的日志参数
log-queries
#包含目录的语法,能够包含某一个文件夹下所有符合定义类型的配置文件
conf-dir=…. 应该有个三四行,去掉注释即可
【内部解析的地址关系】
配置/etc/dnsmasq.hosts 文件,添加进如下格式
ip 域名
【添加上游dns服务器地址】
配置/etc/resolv.dnsmasq.conf 文件,添加如下格式
nameserver 119.29.29.29
第三步:
【启动dnsmasq服务】
安装过后,直接systemctl启动
systemctl start dnsmasq #启动
systemctl status dnsmasq #查看一下运行情况,绿色的running 则是正常
systemctl restart dnsmasq #刷新
【修改本地的dns客户端配置文件,指定自定义的dnsmasq服务器地址】
配置/etc/resolv.conf文件,添加如下格式
ip 域名ssh命令
ssh是一套网络协议,目的在于保证安全的网络服务以及加密远程登录信息
linux的ssh命令是实现了ssh协议的一个操作,并且以sshd服务的形式在linux上运行,对ssh协议管理的开源软件是主流的openssh工具问题:为什么要用ssh? 答:很简单,如果一个用户利用笔记本连接了另外一台机器,ssh的命令让我们认为是安全的,过程是加密的,即使被黑客抓取也无法破解,保证服务器的安全;而以前的运维人员都是用FTP协议,telent工具进行服务器远程登录,这两种协议的登录过程都是明文传输的,容易被截取数据,对服务造成安全隐患
因此为了保证数据传输的安全性、加密性,出现了2种主流的加密方式:
对称加密(使用同一个钥匙进行数据加密,解密的时候也是用这一个)
-
对称加密
对数据加密、数据解密,使用的都是同一把秘钥。
流程:
明文账号密码 ——-密钥加密——->>>>> 加密的数据
加密的数据 ——-密钥解密——->>>>> 解密得到的明文账号密码 对称加密的强度很高,难以被破解,但是有一个问题,当你的机器数量特别多,就得大量的发送同一把密钥,因为解密需要同一把钥匙,这个时候就很难保证密钥的安全了,如果丢失一把密钥,其他所有主机的安全性就得不到保障
非对称加密
非对称加密解决了对称加密的安全隐患,防止密钥丢失的问题。

使用公钥加密后的数据,只能使用对应的私钥才能够解开,除非私钥丢失,否则数据被破解的可能性很小
非对称加密的好处是在于,私钥(开锁的钥匙在服务器上)是放在服务器上,即使你传输的数据被黑客截取,黑客也没有要是能够打开这个加锁的数据,因此对数据进行保护
中间人攻击
拦截客户端的登录请求
- 向客户端发送自己假的公钥,此时客户端如果没有验证情况,使用该公钥对数据加密处理
- 客户端发送的数据就到了黑客手中,黑客再使用自己假的私钥进行解密
-
避免登录服务器时的安全隐患
【输入指令,可以查看对应的指纹信息】
ssh-keyscan -t ecdsa 192.168.47.128 | ssh-keygen -lf -
在我们利用 ssh root@192.168.47.128 登录的时候,出现的yes/no,其中有一条信息也包含了指纹信息,如果两者的信息能够对应是一致的,说明我们可以安全的登录服务器了
【ssh重要的配置文件】
和ssh相关的配置文件,主要放在该目录
$HOME/.ssh/ ls ~/.ssh/
- known-hots:当客户端接收到服务器的公钥之后,服务器的公钥信息就记录在了该文件中,也就代表着客户端相信该服务器的公钥信息了,以便于下次连接,不再需要一个确认的过程
- authorized_keys:该文件是服务器将客户端的公钥信息,保存在这个文件中(用于客户端免密登录时候使用)
- id_rsa:就是一个私钥文件,存放了私钥的密码
- id_rsa.pub:是公钥文件,存放公钥的密码信息
问题:ls 找不到/.ssh的目录文件,没有东西? 答:进行如下操作,一个是安装,一个应该是配置密钥 yum install -y openssl openssh-server ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa tips:具体是不是这样,不一定,不过操作之后确实得到了文件
登录linux服务器的形式
- 基于口令,账号密码的登录形式
基于密码需要记住复杂的密码,且如果机器数量太多,难以使用密码进行管理。
- 基于公钥的认证方式
可以实现免密登录,减少运维人员的心智负担。
- 客户端发送自己的公钥给服务器,写入到服务器的authorized_keys文件中
- 服务器接受到客户端的连接请求后,在自己的authorized_keys文件中匹配,是否存在该客户端的公钥信息,如果存在就生成一个随机数R,再用客户端的公钥,针对随机数R进行加密,得到了一个加密后的随机数
- 客户端通过自己的私钥,对pubkey(R)进行解密,得到了随机数R,再针对这个随机数R和当前连接会话sessionkey才用MD5加密方式,生成摘要Digest1,再次发送服务器进行验证
- 服务器针对这个随机数R和sessionkey也采用同样的摘要算法计算得出Digest2
服务器比对Digest1和Digest2是否一致,一致则验证通过,客户端登陆服务器
实战案例
客户端本地生成一对公私钥
ssh-keygen -t rsa
客户端发送自己的公钥,给服务器,存在服务器的authorized_keys文件中
ssh-copy-id root@192.168.47.128
此时直接输入登录命令,即可免密登录了
- 登录服务器检查客户端的公钥信息
cat ~/.ssh/authorized_keys cat ~/.ssh/id_rsa.pud #视频中是在mac终端查看的
ssh配置文件
Linux强调一切皆文件,Linux系统更改各种软件的配置参数,也就是在修改文件内容而已
sshd服务的配置文件,默认在 /etc/ssh/sshd_config
为了在生产环境中,最大程度的保证服务器安全,被黑客攻击的几率,一般会进行如下的操作:
- 修改ssh的端口:Port 22 ===>> Port 23354
- 禁止root登陆:PermitRootLogin yes ===>> no
- 禁止用密码登录,只能用被信任的机器,用公私钥进行登陆:PasswordAuthentication yes ====>> no
第一步:
根据实际情况,更改自己的服务器配置,内容都在默认的配置文件当中,进行搜索修改即可
修改完毕,不要立即重启服务,还需要配置一个普通用户!!
第二步:
- useradd 和 passwd 我们先创建一个普通用户并设置登录密码
- 在自己本地机器,生成一个普通用户的公私钥对
ssh-keygen -t rsa
- 发送公钥给服务器,配置公钥登录
ssh-copy-id 新服务器名@192.168.47.128
- 这个时候我们进行登录,发现可以免密登录我们新创建的普通用户即可
第三步:
给普通用户配置sudo命令
如果我们设置了禁止root登录,我们就要给普通用户一个更大的权限,增大我们的操作性,不被局限
vim /etc/sudoers 在文件中,root ALL=(ALL) ALL下面增加一行 用户名 ALL=(ALL) ALL,在前几章讲到sudo命令时有提到过
第四步:
重启ssh服务器
在root用户下,输入 systemctl restart sshd 重启ssh服务器,这个时候我们再进行登录的时候,会发现,root用户已经不能进行登录了,且登录普通用户的时候我们要加上-p 23354,在指定端口才能够登陆成功
