美文网首页
加密解密Openssl和DNS

加密解密Openssl和DNS

作者: Net夜风 | 来源:发表于2018-07-08 23:40 被阅读0次

    常见加密算法及原理

    安全防护的目标:
    • 保密性 Confidentiality:即隐私性;
    • 完整性 Integrity:指数据在传输过程中要保证能够完整,还能保证传输后能够还原回原来的数据;
    • 可用性 Availability:指还原后的数据还能够使用;
    常见的安全性攻击:
    • 威胁保密性的攻击:窃听、通信量统计;
    • 威胁完整性的攻击:更改、伪装、重放、否认;
    • 威胁可用性的攻击:拒绝服务;
    防范这些攻击的安全机制:
    • 加密和解密、 数字签名、 访问控制、 数据完整性验证、 认证交换、流量填充、路由控制、公证等方式
    实现这些安全机制的安全服务:
    • 认证服务
    • 访问控制服务
    • 数据保密性服务
    • 数据完整性服务
    • 不可否认性服务
      为了保证这些服务的实现,就需要一些密码算法和协议(加密机制)来完成。

    常见的加密算法和协议

    1. 对称加密:加密和解密使用同一个密钥,依赖于算法和密钥,但其安全性依赖于密钥而非算法

      • 常见的算法:
        DES:Data Encrpytion Standard;56bits
        3DES:Triple DES
        AES:Advanced encrypytion Standard;(128bits,192bits,256bits,384bits)
        Blowfish
        Twofish
        IDEA
        RC6
        CAST5

      • 特性:

        • 加密、解密使用同一密钥;
        • 将原始数据分割成为固定大小的块,逐个进行加密;
      • 缺陷:

        • 密钥过多
        • 密钥分发困难
    2. 公钥加密:密钥成对出现,分为公钥和私钥;
      公钥:pubkey,公开给所有人(从私钥中提取产生);
      私钥:secret key ,通过工具创建,使用者自己留存,必须保证其私密性;

      • 特点:

        • 用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然
        • 密钥长度较大,例如512bits,2048bits,4096bits;效率低下;
      • 用途:

        • 数字签名:主要在于让接收方确认发送方的身份;
        • 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
        • 数据加密
      • 常见算法:
        RSA:即能签名、又能加密解密;
        DSA:数字签名算法(标准)
        ELGamal:

      • 公钥加密工作模式

    加密通信过程.png
    1. 单向加密:只能加密,不能解密,即提取数据指纹(特征码);

      • 特性:

        • 定长输出:无论原来的数据是多大级别,其加密结果长度一样;
        • 雪崩效应:原始数据微小改变,将会导致结果巨大变化;
        • 不可逆
      • 用途:

        • 数据完整性校验
        • 系统帐号密码校验
      • 常见算法:
        MD5:128bits定长输出
        SHA1: 160bits定长输出
        SHA256:
        SHA384:
        SHA512:
        CRC32:

    2. 密钥交换:IKE(Internet Key Exchange),双方通过交换密钥来实现数据加密解密;
      密钥交换友以下两种:

      • 公交加密
      • DH:(Deffie-Hellman),双方共用一些参数,共同协商加密算法,除此之外双方还有属于自己的私有参数,通过共有的参数、私有参数和算法来进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双方计算后的结果是相同的,而这个结果就是密钥。

    例如:
    A 有 p 和 g 两个参数,A 还有一个属于自己的私有参数x;
    B 有 p 和 g 两个参数,B还有一个属于自己的私有参数y;
    A 和 B 有相同的加密算法 即 A: p^x%g
    B: p^y%g 然后上方交换计算后的结果,此时
    A 拿到B 的 p^y%g , B 拿到A 的 p^x%g,双方在和自己私有参数进行相同的算法
    A: 对p^y%g在求x次方得( p^y%g )^x=p ^xy%g
    B: 对p^x%g在求x次方得( p^x%g )^y=p ^xy%g
    最后A和B的结果是一样的。
    注意:整个过程中对于第三方人员来说只能获取p、g两个值,AB双方交换的是经过计算后的值,因此这种加密方式是很安全的

    PKI:Public Key Infrastructure
    • 公钥基础实施:

      • 签证机构:CA,真正颁发证书的机构;
      • 注册机构:RA, 帮你拍照信息录入的机构;
      • 证书吊销机构:CRL,相当于我们证件丢失时挂失的内容;
      • 证书存取库:当别人请求认证时的数据库;
    • X.509 v3:定义了数字证书的结构以及认证标准;它由以下几个部分组成:

      • 版本号(version)
      • 序列号(serial number):CA用于唯一标识此证书
      • 签名算法ID(Signature algorithm identifier)
      • 发行者的名称:即CA在即的名称
      • 有效期:两个日期,起始日期和终止日期
      • 证书主体名称:证书拥有者自己的名字
      • 证书主体公钥:证书拥有者自己的公钥
      • 发行商的唯一标识
      • 证书主体的唯一标识

    SSL/TSL

    SSL:(Secure Sockets Layer)安全套接层,是为网络通信提供安全及数据完整性的一种安全协议。

    • SSL是由Netscape1994年发布,版本有:v1.0、v2.0、v3.0;

    • SSL分两层:

      • SSL记录协议(SSL Record Protocol)
      • SSL握手协议(SSL Handshake Protocol)

    TLS:(Transport Layer Security)传输层安全,与SSL在传输层对网络连接进行加密。

    • TLS是由IETF组织1999年发布,版本有v1.0 v1.1 v1.2 v1.3;

    • TLS分层设计:

      • 最低层:基础算法原语的实现;如aes、rsa、md5
      • 向上一层:各种算法的实现;
      • 再向上一层:组合算法实现的半成品;
      • 用各种组件拼装而成的各种成品密码学协议软件;
    SSL会话主要三步:
    1. 客户端向服务器端索要并验正证书;
    2. 双方协商生成“会话密钥”;
    3. 双方采用“会话密钥”进行加密通信;
    - SSL握手协议(SSL Handshake Protocol)

    第一阶段:ClientHello:

    • 支持的协议版本,比如:tls 1.2;
    • 客户端生产一个随机数,稍后用户会生产“会话秘钥”
    • 支持的加密算法,比如AES、3DES、RSA
    • 支持的压缩算法

    第二阶段:ServerHello:

    • 确认使用的加密通信协议版本,比如tls 1.2
    • 服务器端生成一个随机数,稍后用于生成“会话秘钥”
    • 确认使用的加密算法
    • 服务器证书

    第三阶段:

    • 验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)

    • 发送以下信息给服务器端:

      • 一个随机数;
      • 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      • 客户端握手结束通知;

    第四阶段:

    • 收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;

    • 向客户端发送如下信息:

      • 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
      • 服务端握手结束通知;

    Openssl

    Openssl是ssl的一个开源项目,其由三个部分组成:

    1. openssl:多用途的命令行工具
    2. libcrypto:加密,界面库文件,主要又开发者使用
    3. libssl:ssl协议实现
    openssl命令

    子命令分类:标准命令、消息摘要命令、加密解密相关命令。

    对称加密:
    • 工具:openssl enc、gpg

    • 支持的算法:3des、aes、blowfish、twofish

    • enc命令:

      • 加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
      • 解密:openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
    单向加密:
    • 工具:openssl dget、md5sum、sha1sum、 sha224sum

    • dget命令

      • 生成用户密码:openssl passwd
            openssl passwd -1 -salt SALT
    
    
    公钥加密:
    • 加密解密:

      • 算法:RSA、ELGamal
      • 工具:openssl、rsautl、gpg
    • 数字签名:

      • 算法:RSA、DSA、ELGamal
      • 工具:openssl 、rsautl、gpg
    • 密钥交换:

      • 算法:DH
    #生成私钥
    [root@dns1 ~]# openssl genrsa -out /tmp/mykey.private 1024
    [root@dns1 ~]# ls -ld /tmp/mykey.private 
    -rw-r--r--. 1 root root 891 7月   8 12:08 /tmp/mykey.private
    #这样生成的密钥属组和other是可读的,因此我们应该把bash命令行上放在小括号中执行命令,这其实是通过打开一个子shell进程进行的
    [root@dns1 ~]# (umask 077;openssl genrsa -out /tmp/mykey2.private)
    [root@dns1 ~]# ls -ld /tmp/mykey2.private
    -rw-------. 1 root root 1679 7月   8 12:14 /tmp/mykey2.private
    #从私钥中提取公钥:
    [root@dns1 ~]# openssl rsa -in /tmp/mykey2.private -pubout
    writing RSA key
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvbWwXSi+9073jhaBFO6
    za2IUoUghM4b2A0as3tjE2BGji+2Dk1wzQ0zKIaell6vYlOF4c1b9iWMuOCDgHbE
    mn6u/JRohjuG79EJABCCP7sHZddwGYQgxcsdXBP4nltNKYIW03rxWHIwYSxzPqp/
    vU/yLEHOogbprG6QQxNFv7K4l3CxtC53Y85RR4meuwWR7N5LND9NYOClLkcu98qr
    eU+EZntns6N/DbD0hk1xJZczRuB36stjoLHqW1v28MH8i8/w7OWnV74/UllBNkh2
    jdIzzi8mG0DPeWK4/1XD+twe0b8zzSEaVD0bgn3XlH0UgLCpWrr/If75bh2vGk9v
    7QIDAQAB
    -----END PUBLIC KEY-----
    
    
    Linux系统上的随机数生成器:
    • /dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
    • /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;
      伪随机数不安全;
    • 熵池中随机数的来源:
      硬盘IO中断时间间隔;
      键盘IO中断时间间隔;

    搭建apache或者nginx并使用自签证书实现https访问,自签名证书的域名自拟

    #首先自建一个私有CA
    [root@dns1 ~]# cd /etc/pki/CA #cd到CA目录下
    [root@dns1 CA]# mkdir private  #创建private目录,用于存放CA私钥
    [root@dns1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 4096)  #生成CA本身私钥
    [root@dns1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
    
        Country Name (2 letter code) [XX]:CN
        State or Province Name (full name) []:SHANDONG
        Locality Name (eg, city) [Default City]:JINAN
        Organization Name (eg, company) [Default Company Ltd]:inspur
        Organizational Unit Name (eg, section) []:opt
        Common Name (eg, your name or your server's hostname) []:www.inspur.com
        Email Address []:caadmin@inspur.com
    [root@dns1 CA]# mkdir -pv {certs,crl,newcerts}
        mkdir: 已创建目录 "certs"
        mkdir: 已创建目录 "crl"
        mkdir: 已创建目录 "newcerts"
        [root@dns1 CA]# touch {serial,index.txt}
        [root@dns1 CA]# echo 01 >serial
        [root@dns1 CA]# cat serial
        01
    
    #到此私有CA就创建完成,下面到需要用到证书安全通信的服务器上向CA请求签署证书,我们以nginx为例
    
    [root@localhost ssl]# yum install nginx -y #安装nginx
    [root@localhost ssl]# mkdir /etc/nginx/ssl #在nginx目录下创建ssl目录
    [root@localhost ssl]# cd /etc/nginx/ssl
    [root@localhost ssl]# (umask 077;openssl genrsa -out nginx.key 2048)  #生成私钥
    [root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr -days 365 #生成证书签署请求
    [root@localhost ssl]# scp nginx.csr root@192.168.43.161:/tmp  #将请求通过可靠方式发送给CA 主机
    [root@dns1 CA]# openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365   #在CA主机上签署证书
    
    #查看证书中的信息,到此nginx自签证书完成
    [root@dns1 CA]# openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -serial -subject
    serial=01
    subject= /C=CN/ST=SHANDONG/O=inspur/OU=cw/CN=cw.inspur.com/emailAddress=cw@inspur.com
    
    

    DNS and Bind

    DNS:Domain Name Service,应用层协议;属于C/S架构,监听在53端口
    FQDN:Full Qualified Domain Name;如www.magedu.com
    tld:Top Level Domain;顶级域

    • 组织域:.com, .net, .org, .gov, .edu, .mil
    • 国家地区域:.iq, .tw, .hk, .jp, .cn, …

    DNS查询类型:

    • 递归查询
    • 迭代查询

    DNS名称解析方式:

    • 名称—->IP:正向解析
    • IP—->名称:反向解析
      注意:二者的名称空间,非为同一空间,即非为同一棵树;因此,也不是同一个解析库。

    DNS服务器类型:

    • 负责解析至少一个域:

      • 主名称服务器;
      • 辅助名称服务器;
    • 不负责哉解析:

      • 缓存名称服务器;

    一次完整的查询请求经过的流程:

    DNS名称解析过程.png

    1.Client访问Server请求首先查找本地的hosts文件,如果找到即结束;
    2.如果本地hosts文件未找到,则向本地DNS缓存文件查询,如找到即结束;
    3.如本地DNS缓存文件未找到,则向DNS发起递归查询请求,如果是DNS自己负责解析的域,直接查询数据库并返回答案;
    4.如果不是自己负责的解析域,则以迭代查询类型向根域发起查询请求;根域返回其所属顶级域;
    5.DNS向所属顶级域发起查询请求,顶级域将结果返回;
    6.DNS将所查询到的结果发送给Client;
    7.Client即可向Server发起访问;

    主-辅DNS服务器及搭建

    1. 主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
    2. 从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

    • “复制”操作的实施方式:

      • 序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
      • 刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
      • 重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
      • 过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
      • 否定答案的缓存时长:
      • 主服务器”通知“从服务器随时更新数据;
    • 区域传送:
      全量传送:axfr, 传送整个数据库;
      增量传送:ixfr, 仅传送变量的数据;

    • 区域(zone)和域(domain): magedu.com域

      • FQDN –> IP
        正向解析库;区域
      • IP –> FQDN
        反向解析库;区域
    • 区域数据库文件:
      资源记录:Resource Record, 简称rr;
      记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX

      • SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
      • NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
      • A: Address, 地址记录,FQDN –> IPv4;
      • AAAA:地址记录, FQDN –> IPv6;
      • CNAME:Canonical Name,别名记录;
      • PTR:Pointer,IP –> FQDN
      • MX:Mail eXchanger,邮件交换器;
        优先级:0-99,数字越小优先级越高;
    • 资源记录的定义格式:
      语法: name [TTL] IN RR_TYPE value

      1. SOA:
        name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
        value:有多部分组成
        (1) 当前区域的区域名称(也可以使用主DNS服务器名称);
        (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
        (3) (主从服务协调属性的定义以及否定答案的TTL)
                    例如:
                        magedu.com.     86400   IN      SOA     magedu.com.     admin.magedu.com.  (
                                    2017010801  ; serial
                                    2H          ; refresh
                                    10M         ; retry
                                    1W          ; expire
                                    1D          ; negative answer ttl 
                        )   
    
    
    1. NS:
      name: 当前区域的区域名称
      value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
      注意:一个区域可以有多个ns记录;
                例如:
                    magedu.com.     86400   IN  NS      ns1.magedu.com.
                    magedu.com.     86400   IN  NS      ns2.magedu.com.
    
    
    1. MX:
      name: 当前区域的区域名称
      value:当前区域某邮件交换器的主机名;
      注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
                例如:
                    magedu.com.         IN  MX  10      mx1.magedu.com.
                    magedu.com.         IN  MX  20      mx2.magedu.com.
    
    
    1. A:
      name:某FQDN,例如www.magedu.com.
      value:某IPv4地址;
                例如:
                    www.magedu.com.     IN  A   1.1.1.1
                    www.magedu.com.     IN  A   1.1.1.2
                    bbs.magedu.com.         IN  A   1.1.1.1
    
    
    1. AAAA:
      name:FQDN
      value: IPv6
    2. PTR:
      name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
      value:FQND
                例如:
                    4.3.2.1.in-addr.arpa.   IN  PTR www.magedu.com.
    
    
    1. CNAME:
      name:FQDN格式的别名;
      value:FQDN格式的正式名字;
                例如:
                    web.magedu.com.     IN      CNAME  www.magedu.com.
    
    

    注意:
    (1) TTL可以从全局继承;
    (2) @表示当前区域的名称;
    (3) 相邻的两条记录其name相同时,后面的可省略;
    (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

    主DNS服务器搭建
        #安装bind和bind-utils程序包
        [root@dns1 ~]# yum install bind -y
        [root@dns1 ~]# yum install bind-utils -y
    
    

    配置解析正向区域

        #定义区域
        [root@dns1 ~]# vim /etc/named.rfc1912.zones
        #在文件最后添加
        zone "magedu.com" IN {
                type master;
                file "magedu.com.zone";
        };
        #建立区域数据文件
        [root@dns1 ~]# cd /var/named
        [root@dns1 named]# vim magedu.com.zone
        #在打开的文件中输入下面内容
          $TTL 3600
          $ORIGIN magedu.com.
    
          @   IN    SOA   ns1.magedu.com.   dnsadmin.magedu.com. (
                  2018071201
                  1H
                  10M
                  3D
                  1D )
                  IN        NS      ns1
                  IN        MX    10 mx1
          ns1       IN  A   192.168.1.105
          mx1       IN  A   192.168.1.106
          www       IN  A   192.168.1.107
          bbs       IN  A   192.168.1.110
          web       IN  CNAME   www
          www       IN  A   192.168.1.111
    
    
        #检查配置文件
        [root@dns1 named]# named-checkconf
        [root@dns1 named]# named-checkzone magedu.com. /var/named/magedu.com.zone 
        zone magedu.com/IN: loaded serial 2018070801
        OK
        #修改权限及属组
        [root@dns1 named]# chmod o= /var/named/magedu.com.zone 
        [root@dns1 named]# chgrp named /var/named/magedu.com.zone
        [root@dns1 named]# ls -ld /var/named/magedu.com.zone
        -rw-r-----. 1 root named 280 7月   8 18:18 /var/named/magedu.com.zone
        #让服务器重载配置文件和区域文件
        [root@dns1 named]# rndc reload
        server reload successful
        或者使用systemctl reload named.service
       #使用dig命令来测试配置是否可以解析域名
          [root@localhost named]# dig -t A www.magedu.com @192.168.1.105
          ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A         www.magedu.com @192.168.1.105
          ;; global options: +cmd
          ;; Got answer:
          ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36023
          ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1,         ADDITIONAL: 2
    
          ;; OPT PSEUDOSECTION:
          ; EDNS: version: 0, flags:; udp: 4096
          ;; QUESTION SECTION:
          ;www.magedu.com.          IN  A
    
          ;; ANSWER SECTION:
          www.magedu.com.       3600    IN  A   192.168.1.107
          www.magedu.com.       3600    IN  A   192.168.1.111
    
          ;; AUTHORITY SECTION:
          magedu.com.       3600    IN  NS  ns1.magedu.com.
    
          ;; ADDITIONAL SECTION:
          ns1.magedu.com.       3600    IN  A   192.168.1.105
    
          ;; Query time: 3 msec
          ;; SERVER: 192.168.1.105#53(192.168.1.105)
          ;; WHEN: 四 7月 12 00:45:54 CST 2018
          ;; MSG SIZE  rcvd: 109
    #可看到上图已经可以正常解析出配置的域名
    
    
    
    
    

    配置反向解析

    #定义区域
    [root@dns1 named]# vim /etc/named.rfc1912.zones 
    #在最后添加如下内容
    zone "1.168.192.in-addr.arpa" IN {
            type master;
            file "1.168.192.zone";
    };
    #定义区域解析库文件
    [root@dns1 named]# vim 1.168.192.zone
    #添加如下内容
    $TTL 3600
    $ORIGIN 1.168.192.in-addr.arpa.
    @   IN  SOA ns1.magedu.com. dnsadmin.magedu.com. (
            2018071201
            1H
            10M
            3D
            1D )
        IN  NS  ns1.magedu.com.
    106 IN  PTR ns1.magedu.com.
    107 IN  PTR www.magedu.com.
    110 IN  PTR bbs.magedu.com.
    111 IN  PTR www.magedu.com.
    
    #修改权限及属组
    [root@dns1 named]# chown :named 1.168.192.zone 
    [root@dns1 named]# chmod o= 1.168.192.zone
    [root@dns1 named]# ls -ld 1.168.192.zone
    -rw-r-----. 1 root named 217 7月   8 19:20 1.168.192.zone
    #检查语法错误
    [root@dns1 named]# named-checkconf
    [root@dns1 named]# named-checkzone 1.168.192.in-addr.arpa 1.168.192.zone 
    zone 1.168.192.in-addr.arpa/IN: loaded serial 2018070801
    OK
    #重载配置文件和区域数据文件
    [root@dns1 named]# rndc reload
    server reload successful
    #使用dig命令反向解析测试
    [root@localhost named]# dig -x 192.168.1.110 @192.168.1.105
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.1.110 @192.168.1.105
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44987
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;110.1.168.192.in-addr.arpa.    IN  PTR
    
    ;; ANSWER SECTION:
    110.1.168.192.in-addr.arpa. 3600 IN PTR bbs.magedu.com.
    
    ;; AUTHORITY SECTION:
    1.168.192.in-addr.arpa. 3600    IN  NS  ns1.magedu.com.
    
    ;; ADDITIONAL SECTION:
    ns1.magedu.com.     3600    IN  A   192.168.1.105
    
    ;; Query time: 7 msec
    ;; SERVER: 192.168.1.105#53(192.168.1.105)
    ;; WHEN: 四 7月 12 01:06:01 CST 2018
    ;; MSG SIZE  rcvd: 117
    #根据返回结果可以看出反向解析配置成功
    
    

    配置从服务器DNS
    在另外一台服务器上配置一个从区域:on slave

    #定义区域
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    #添加如下内容
    zone "magedu.com" IN {
            type slave;
            file "slave/magedu.com.zone";
            masters {192.168.1.105; };
    };
    #检查语法错误
    [root@localhost ~]# named-checkconf
    #重载配置
    [root@localhost ~]# rndc reload
    server reload successful
    
    

    在主服务上需要配置 on master

    #在主服务区域解析库文件上添加从服务为NS ,并添加其IP
    [root@dns1 ~]# vim /var/named/magedu.com.zone
    #在文件中添加如下内容
            IN      NS              ns2
    ns2     IN      A       192.168.1.106
    #一定要手动修改序列号+1
    @       IN      SOA     105     dnsadmin.magedu.com (
                2018070802
    
    #检查语法错误
    named-checkconf
    #重载配置
    rndc reload
    或者systemctl reload named.service
    #可以使用systemctl status named.service命令查看传输过程验证其从服务器是否创建成功
    [root@localhost ~]# systemctl status named
    ● named.service - Berkeley Internet Name Domain (DNS)
       Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
       Active: active (running) since Wed 2018-07-11 12:31:49 EDT; 44min ago
      Process: 1547 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
      Process: 1563 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
      Process: 1559 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
     Main PID: 1564 (named)
       CGroup: /system.slice/named.service
               └─1564 /usr/sbin/named -u named -c /etc/named.conf
    
    Jul 11 13:13:50 localhost.localdomain named[1564]: automatic empty zone: B.E.F.IP6.ARPA
    Jul 11 13:13:50 localhost.localdomain named[1564]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
    Jul 11 13:13:50 localhost.localdomain named[1564]: reloading configuration succeeded
    Jul 11 13:13:50 localhost.localdomain named[1564]: reloading zones succeeded
    Jul 11 13:13:50 localhost.localdomain named[1564]: all zones loaded
    Jul 11 13:13:50 localhost.localdomain named[1564]: running
    Jul 11 13:15:20 localhost.localdomain named[1564]: zone magedu.com/IN: refresh: retry limit for master 192.168.1.105#53 exceeded (source 0.0.0.0#0)
    Jul 11 13:15:20 localhost.localdomain named[1564]: zone magedu.com/IN: Transfer started.
    Jul 11 13:15:20 localhost.localdomain named[1564]: transfer of 'magedu.com/IN' from 192.168.1.105#53: failed to connect: host unreachable
    Jul 11 13:15:20 localhost.localdomain named[1564]: transfer of 'magedu.com/IN' from 192.168.1.105#53: Transfer completed: 0 messages, 0 records, 0 b...tes/sec)
    Hint: Some lines were ellipsized, use -l to show in full.无法
    #在从服务器上验证时报错 transfer of 'magedu.com/IN' from 192.168.1.105#53: failed to connect: host unreachable,主机不可连接,使用iptables -L -n 命令查看后发现防火墙功能阻止了主机通信
    #因此使用systemctl stop firewalld.service关闭防火墙功能后重新测试正常
    [root@localhost ~]# systemctl status named
    ● named.service - Berkeley Internet Name Domain (DNS)
       Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
       Active: active (running) since Wed 2018-07-11 12:31:49 EDT; 56min ago
      Process: 1547 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
      Process: 1563 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
      Process: 1559 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
     Main PID: 1564 (named)
       CGroup: /system.slice/named.service
               └─1564 /usr/sbin/named -u named -c /etc/named.conf
    
    Jul 11 13:26:52 localhost.localdomain named[1564]: zone magedu.com/IN: transferred serial 2018071202
    Jul 11 13:26:52 localhost.localdomain named[1564]: transfer of 'magedu.com/IN' from 192.168.1.105#53: Transfer completed: 1 messages, 12 records, 287 bytes, 0.010 secs (28700 bytes/sec)
    Jul 11 13:26:52 localhost.localdomain named[1564]: zone magedu.com/IN: sending notifies (serial 2018071202)
    Jul 11 13:27:47 localhost.localdomain named[1564]: client 192.168.1.105#24560: received notify for zone 'magedu.com'
    Jul 11 13:27:47 localhost.localdomain named[1564]: master 192.168.1.105#53 (source 0.0.0.0#0) deleted from unreachable cache
    Jul 11 13:27:47 localhost.localdomain named[1564]: zone magedu.com/IN: Transfer started.
    Jul 11 13:27:47 localhost.localdomain named[1564]: transfer of 'magedu.com/IN' from 192.168.1.105#53: connected using 192.168.1.108#53715
    Jul 11 13:27:47 localhost.localdomain named[1564]: zone magedu.com/IN: transferred serial 2018071203
    Jul 11 13:27:47 localhost.localdomain named[1564]: transfer of 'magedu.com/IN' from 192.168.1.105#53: Transfer completed: 1 messages, 12 records, 287 bytes, 0.001 secs (287000 bytes/sec)
    Jul 11 13:27:47 localhost.localdomain named[1564]: zone magedu.com/IN: sending notifies (serial 2018071203)
    
    
    
    

    注意:在学习时建议关闭dnssec和防火墙

          在配置文件/etc/named.conf中:
            dnssec-enable no;
            dnssec-validation no;
            dnssec-lookaside no;
          使用systemctl stop firewalld.service命令关闭防火墙
           iptables -L -n 查看
    

    子域授权

    正向解析区域授权子域的方法:

    #首先要在父域的主服务器上的区域解析库中添加子域信息
    vim /var/named/mageedu.com.zone
        ops     IN      NS      ns1.ops
        ns1.ops IN      A       192.168.1.109
    #然后在子域服务器上定义区域
        yum install bind -y
        vim /etc/named.conf  #在其中添加外网IP
            options {
                    listen-on port 53 { 127.0.0.1; 192.168.1.109; };
        vim /etc/named.rfc1912.zones
            #在其中添加如下内容
            zone "ops.magedu.com" IN {
                    type master;
                    file "ops.magedu.com.zone";
            };
    #在定义区域解析库文件
        vim /var/named/ops.magedu.com.zone
            #在其中添加如下内容
            $TTL 3600
            $ORIGIN ops.magedu.com.
            @       IN      SOA     ns.ops.magedu.com.      nsamdin.ops.magedu.com. (
                            2018070801
                            1H
                            10M
                            1D
                            2H )
                    IN      NS      ns1
            ns1     IN      A       192.168.1.109
            www     IN      A       192.168.1.109
    #修改其属组及权限
        [root@localhost ~]# chmod o= /var/named/ops.magedu.com.zone 
        [root@localhost ~]# chgrp named /var/named/ops.magedu.com.zone
        [root@localhost ~]# ls -ld /var/named/ops.magedu.com.zone
        -rw-r-----. 1 root named 184 Jul  8 11:23 /var/named/ops.magedu.com.zone
    #检查语法错误
        named-checkzone ops.magedu.com /var/named/ops.magedu.com.zone 
    #重载配置文件
        rndc reload
    #在子域上使用dig命令解析测试
    [root@localhost named]# dig -t A www.ops.magedu.com @192.168.1.109
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.ops.magedu.com @192.168.1.109
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52894
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.ops.magedu.com.        IN  A
    
    ;; ANSWER SECTION:
    www.ops.magedu.com. 3600    IN  A   192.168.1.109
    
    ;; AUTHORITY SECTION:
    ops.magedu.com.     3600    IN  NS  ns1.ops.magedu.com.
    
    ;; ADDITIONAL SECTION:
    ns1.ops.magedu.com. 3600    IN  A   192.168.1.109
    
    ;; Query time: 2 msec
    ;; SERVER: 192.168.1.109#53(192.168.1.109)
    ;; WHEN: Wed Jul 11 13:55:01 EDT 2018
    ;; MSG SIZE  rcvd: 97
    
    
    #在父域上dig解析测试
    [root@localhost named]# dig -t A www.ops.magedu.com @192.168.1.105
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.ops.magedu.com @192.168.1.105
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16740
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.ops.magedu.com.        IN  A
    
    ;; ANSWER SECTION:
    www.ops.magedu.com. 3600    IN  A   192.168.1.109
    
    ;; AUTHORITY SECTION:
    ops.magedu.com.     3600    IN  NS  ns1.ops.magedu.com.
    
    ;; ADDITIONAL SECTION:
    ns1.ops.magedu.com. 3600    IN  A   192.168.1.109
    
    ;; Query time: 12 msec
    ;; SERVER: 192.168.1.105#53(192.168.1.105)
    ;; WHEN: 四 7月 12 01:52:39 CST 2018
    ;; MSG SIZE  rcvd: 97
    
    
    

    定义转发:
    注意:被转发的服务器必须允许为当前服务做递归;
    (1) 区域转发:仅转发对某特定区域的解析请求;

            zone  "ZONE_NAME"  IN {
                type  forward;
                forward  {first|only};
                forwarders  { SERVER_IP; };
            };
    
            first:首先转发;转发器不响应时,自行去迭代查询;
            only:只转发;
    

    (2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;

            options {
                ... ...
                forward  {only|first};
                forwarders  { SERVER_IP; };
                .. ...
            };
    

    bind中的安全相关的配置:
    acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;

        acl  acl_name  {
            ip;
            net/prelen;
        };
    
        示例:
            acl  mynet {
                172.16.0.0/16;
                127.0.0.0/8;
            };
    

    bind有四个内置的acl

    • none:没有一个主机;
    • any:任意主机;
    • local:本机;
    • localnet:本机所在的IP所属的网络;

    访问控制指令:

    • allow-query {}; 允许查询的主机;白名单;
    • allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
    • allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
    • allow-update {}; DDNS,允许动态更新区域数据库文件中内容;

    相关文章

      网友评论

          本文标题:加密解密Openssl和DNS

          本文链接:https://www.haomeiwen.com/subject/rqbauftx.html