常见加密算法及原理
安全防护的目标:
- 保密性 Confidentiality:即隐私性;
- 完整性 Integrity:指数据在传输过程中要保证能够完整,还能保证传输后能够还原回原来的数据;
- 可用性 Availability:指还原后的数据还能够使用;
常见的安全性攻击:
- 威胁保密性的攻击:窃听、通信量统计;
- 威胁完整性的攻击:更改、伪装、重放、否认;
- 威胁可用性的攻击:拒绝服务;
防范这些攻击的安全机制:
- 加密和解密、 数字签名、 访问控制、 数据完整性验证、 认证交换、流量填充、路由控制、公证等方式
实现这些安全机制的安全服务:
- 认证服务
- 访问控制服务
- 数据保密性服务
- 数据完整性服务
- 不可否认性服务
为了保证这些服务的实现,就需要一些密码算法和协议(加密机制)来完成。
常见的加密算法和协议
-
对称加密:加密和解密使用同一个密钥,依赖于算法和密钥,但其安全性依赖于密钥而非算法
-
常见的算法:
DES:Data Encrpytion Standard;56bits
3DES:Triple DES
AES:Advanced encrypytion Standard;(128bits,192bits,256bits,384bits)
Blowfish
Twofish
IDEA
RC6
CAST5 -
特性:
- 加密、解密使用同一密钥;
- 将原始数据分割成为固定大小的块,逐个进行加密;
-
缺陷:
- 密钥过多
- 密钥分发困难
-
-
公钥加密:密钥成对出现,分为公钥和私钥;
公钥:pubkey,公开给所有人(从私钥中提取产生);
私钥:secret key ,通过工具创建,使用者自己留存,必须保证其私密性;-
特点:
- 用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然
- 密钥长度较大,例如512bits,2048bits,4096bits;效率低下;
-
用途:
- 数字签名:主要在于让接收方确认发送方的身份;
- 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
- 数据加密
-
常见算法:
RSA:即能签名、又能加密解密;
DSA:数字签名算法(标准)
ELGamal: -
公钥加密工作模式
-
-
单向加密:只能加密,不能解密,即提取数据指纹(特征码);
-
特性:
- 定长输出:无论原来的数据是多大级别,其加密结果长度一样;
- 雪崩效应:原始数据微小改变,将会导致结果巨大变化;
- 不可逆
-
用途:
- 数据完整性校验
- 系统帐号密码校验
-
常见算法:
MD5:128bits定长输出
SHA1: 160bits定长输出
SHA256:
SHA384:
SHA512:
CRC32:
-
-
密钥交换: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会话主要三步:
- 客户端向服务器端索要并验正证书;
- 双方协商生成“会话密钥”;
- 双方采用“会话密钥”进行加密通信;
- SSL握手协议(SSL Handshake Protocol)
第一阶段:ClientHello:
- 支持的协议版本,比如:tls 1.2;
- 客户端生产一个随机数,稍后用户会生产“会话秘钥”
- 支持的加密算法,比如AES、3DES、RSA
- 支持的压缩算法
第二阶段:ServerHello:
- 确认使用的加密通信协议版本,比如tls 1.2
- 服务器端生成一个随机数,稍后用于生成“会话秘钥”
- 确认使用的加密算法
- 服务器证书
第三阶段:
-
验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
-
发送以下信息给服务器端:
- 一个随机数;
- 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
- 客户端握手结束通知;
第四阶段:
-
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
-
向客户端发送如下信息:
- 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
- 服务端握手结束通知;
Openssl
Openssl是ssl的一个开源项目,其由三个部分组成:
- openssl:多用途的命令行工具
- libcrypto:加密,界面库文件,主要又开发者使用
- 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名称解析过程.png1.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
反向解析库;区域
- FQDN –> IP
-
区域数据库文件:
资源记录: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
- SOA:
name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)
- SOA:
例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. (
2017010801 ; serial
2H ; refresh
10M ; retry
1W ; expire
1D ; negative answer ttl
)
- NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录;
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
- MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
- 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
- AAAA:
name:FQDN
value: IPv6 - 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.
- 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,允许动态更新区域数据库文件中内容;
网友评论