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配置文件

  1. 本地dns解析文件,/etc/hosts文件中,这个文件是运维人员自由定义域名和ip强制解析关系的

我们在其文件中写入一个定义关系 ==>> 127.0.0.1 www.pythonav.com
再使用ping命令查看该域名,可以得到ip地址就是我们定义的ip,因此也可以证明,hosts文件的解析优先级高于dns客户配置文件

  1. /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种主流的加密方式:

  • 对称加密(使用同一个钥匙进行数据加密,解密的时候也是用这一个)

  • 非对称加密(有2把密钥,一个是公钥,一个是私钥)

    对称加密

    对数据加密、数据解密,使用的都是同一把秘钥。
    流程:
    明文账号密码 ——-密钥加密——->>>>> 加密的数据
    加密的数据 ——-密钥解密——->>>>> 解密得到的明文账号密码

  • 对称加密的强度很高,难以被破解,但是有一个问题,当你的机器数量特别多,就得大量的发送同一把密钥,因为解密需要同一把钥匙,这个时候就很难保证密钥的安全了,如果丢失一把密钥,其他所有主机的安全性就得不到保障

    非对称加密

    非对称加密解决了对称加密的安全隐患,防止密钥丢失的问题。
    image.png

  • 使用公钥加密后的数据,只能使用对应的私钥才能够解开,除非私钥丢失,否则数据被破解的可能性很小

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

    中间人攻击

  • 拦截客户端的登录请求

  • 向客户端发送自己假的公钥,此时客户端如果没有验证情况,使用该公钥对数据加密处理
  • 客户端发送的数据就到了黑客手中,黑客再使用自己假的私钥进行解密
  • 客户端的账号密码就会被黑客获取,从而对服务器造成安全隐患

    避免登录服务器时的安全隐患

    【输入指令,可以查看对应的指纹信息】

    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服务器的形式

  • 基于口令,账号密码的登录形式

基于密码需要记住复杂的密码,且如果机器数量太多,难以使用密码进行管理。

  • 基于公钥的认证方式

可以实现免密登录,减少运维人员的心智负担。

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

    实战案例

  6. 客户端本地生成一对公私钥

    ssh-keygen -t rsa

  7. 客户端发送自己的公钥,给服务器,存在服务器的authorized_keys文件中

    ssh-copy-id root@192.168.47.128

  8. 此时直接输入登录命令,即可免密登录了

  9. 登录服务器检查客户端的公钥信息

    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

第一步:
根据实际情况,更改自己的服务器配置,内容都在默认的配置文件当中,进行搜索修改即可
修改完毕,不要立即重启服务,还需要配置一个普通用户!!
第二步:

  1. useradd 和 passwd 我们先创建一个普通用户并设置登录密码
  2. 在自己本地机器,生成一个普通用户的公私钥对

ssh-keygen -t rsa

  1. 发送公钥给服务器,配置公钥登录

ssh-copy-id 新服务器名@192.168.47.128

  1. 这个时候我们进行登录,发现可以免密登录我们新创建的普通用户即可

第三步:
给普通用户配置sudo命令
如果我们设置了禁止root登录,我们就要给普通用户一个更大的权限,增大我们的操作性,不被局限
vim /etc/sudoers 在文件中,root ALL=(ALL) ALL下面增加一行 用户名 ALL=(ALL) ALL,在前几章讲到sudo命令时有提到过
第四步:
重启ssh服务器
在root用户下,输入 systemctl restart sshd 重启ssh服务器,这个时候我们再进行登录的时候,会发现,root用户已经不能进行登录了,且登录普通用户的时候我们要加上-p 23354,在指定端口才能够登陆成功