13.4 安全的加密傳輸

2022-06-01 09:15 更新

前文反復(fù)提及,域名解析服務(wù)是互聯(lián)網(wǎng)基礎(chǔ)設(shè)施中重要的一環(huán),幾乎所有的網(wǎng)絡(luò)應(yīng)用都依賴于DNS才能正常運(yùn)行。如果DNS服務(wù)發(fā)生故障,那么即便Web網(wǎng)站或電子郵件系統(tǒng)服務(wù)等都正常運(yùn)行,用戶也無法找到并使用它們了。

互聯(lián)網(wǎng)中的絕大多數(shù)DNS服務(wù)器(超過95%)都是基于BIND域名解析服務(wù)搭建的,而bind服務(wù)程序?yàn)榱颂峁┌踩慕馕龇?wù),已經(jīng)對(duì)TSIG(RFC 2845)加密機(jī)制提供了支持。TSIG主要是利用了密碼編碼的方式來保護(hù)區(qū)域信息的傳輸(Zone Transfer),即TSIG加密機(jī)制保證了DNS服務(wù)器之間傳輸域名區(qū)域信息的安全性。

接下來的實(shí)驗(yàn)依然使用了表13-2中的兩臺(tái)服務(wù)器。

書接上回。前面在從服務(wù)器上配妥bind服務(wù)程序并重啟后,即可看到從主服務(wù)器中獲取到的數(shù)據(jù)配置文件。

主機(jī)名稱 操作系統(tǒng) IP地址
主服務(wù)器 RHEL 8 192.168.10.10
從服務(wù)器 RHEL 8 192.168.10.20
    [root@linuxprobe ~]# ls -al /var/named/slaves/
    total 12
    drwxrwx---. 2 named named 54 Jun 7 16:02 .
    drwxr-x---. 6 root named 4096 Jun 7 15:58 ..
    -rw-r--r--. 1 named named 432 Jun 7 16:02 192.168.10.arpa
    -rw-r--r--. 1 named named 439 Jun 7 16:02 linuxprobe.com.zone
    [root@linuxprobe ~]# rm -rf /var/named/slaves/*

第1步:在主服務(wù)器中生成密鑰。dnssec-keygen命令用于生成安全的DNS服務(wù)密鑰,其格式為“dnssec-keygen [參數(shù)]”,常用的參數(shù)以及作用如表13-3所示。

表13-3 dnssec-keygen命令的常用參數(shù)

參數(shù) 作用
-a 指定加密算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等
-b 密鑰長度(HMAC-MD5的密鑰長度在1~512位之間)
-n 密鑰的類型(HOST表示與主機(jī)相關(guān))

使用下述命令生成一個(gè)主機(jī)名稱為master-slave的128位HMAC-MD5算法的密鑰文件。在執(zhí)行該命令后默認(rèn)會(huì)在當(dāng)前目錄中生成公鑰和私鑰文件,我們需要把私鑰文件中Key參數(shù)后面的值記錄下來,一會(huì)兒要將其寫入傳輸配置文件中。

    [root@linuxprobe ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
    Kmaster-slave.+157+46845
    [root@linuxprobe ~]# ls -al Kmaster-slave.+157+46845.*
    -rw-------. 1 root root 56 Jun 7 16:06 Kmaster-slave.+157+46845.key
    -rw-------. 1 root root 165 Jun 7 16:06 Kmaster-slave.+157+46845.private
    [root@linuxprobe ~]# cat Kmaster-slave.+157+46845.private
    Private-key-format: v1.3
    Algorithm: 157 (HMAC_MD5)
    Key: 1XEEL3tG5DNLOw+1WHfE3Q==
    Bits: AAA=
    Created: 20170607080621
    Publish: 20170607080621
    Activate: 20170607080621

第2步:在主服務(wù)器中創(chuàng)建密鑰驗(yàn)證文件。進(jìn)入bind服務(wù)程序用于保存配置文件的目錄,把剛剛生成的密鑰名稱、加密算法和私鑰加密字符串按照下面格式寫入到tansfer.key傳輸配置文件中。為了安全起見,我們需要將文件的所屬組修改成named,并將文件權(quán)限設(shè)置得要小一點(diǎn),然后把該文件做一個(gè)硬鏈接到/etc目錄中。

    [root@linuxprobe ~]# cd /var/named/chroot/etc/
    [root@linuxprobe etc]# vim transfer.key
    key "master-slave" {
    algorithm hmac-md5;
    secret "1XEEL3tG5DNLOw+1WHfE3Q==";
    };
    [root@linuxprobe etc]# chown root:named transfer.key
    [root@linuxprobe etc]# chmod 640 transfer.key
    [root@linuxprobe etc]# ln transfer.key /etc/transfer.key

第3步:開啟并加載Bind服務(wù)的密鑰驗(yàn)證功能。首先需要在主服務(wù)器的主配置文件中加載密鑰驗(yàn)證文件,然后進(jìn)行設(shè)置,使得只允許帶有master-slave密鑰認(rèn)證的DNS服務(wù)器同步數(shù)據(jù)配置文件:

    [root@linuxprobe ~]# vim /etc/named.conf
     1 //
     2 // named.conf
     3 //
     4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
     5 // server as a caching only nameserver (as a localhost DNS resolver only).
     6 //
     7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
     8 //
     9 include "/etc/transfer.key";
     10 options {
     11 listen-on port 53 { any; };
     12 listen-on-v6 port 53 { ::1; };
     13 directory "/var/named";
     14 dump-file "/var/named/data/cache_dump.db";
     15 statistics-file "/var/named/data/named_stats.txt";
     16 memstatistics-file "/var/named/data/named_mem_stats.txt";
     17 allow-query { any; };
     18 allow-transfer { key master-slave; };
    ………………省略部分輸出信息………………
    [root@linuxprobe ~]# systemctl restart named

至此,DNS主服務(wù)器的TSIG密鑰加密傳輸功能就已經(jīng)配置完成。此時(shí)清空DNS從服務(wù)器同步目錄中所有的數(shù)據(jù)配置文件,然后再次重啟bind服務(wù)程序,這時(shí)就已經(jīng)不能像剛才那樣自動(dòng)獲取到數(shù)據(jù)配置文件了。

    [root@linuxprobe ~]# rm -rf /var/named/slaves/*
    [root@linuxprobe ~]# systemctl restart named
    [root@linuxprobe ~]# ls  /var/named/slaves/

第4步:配置從服務(wù)器,使其支持密鑰驗(yàn)證。配置DNS從服務(wù)器和主服務(wù)器的方法大致相同,都需要在bind服務(wù)程序的配置文件目錄中創(chuàng)建密鑰認(rèn)證文件,并設(shè)置相應(yīng)的權(quán)限,然后把該文件做一個(gè)硬鏈接到/etc目錄中。

    [root@linuxprobe ~]# cd /var/named/chroot/etc
    [root@linuxprobe etc]# vim transfer.key
    key "master-slave" {
    algorithm hmac-md5;
    secret "1XEEL3tG5DNLOw+1WHfE3Q==";
    };
    [root@linuxprobe etc]# chown root:named transfer.key
    [root@linuxprobe etc]# chmod 640 transfer.key
    [root@linuxprobe etc]# ln transfer.key /etc/transfer.key

第5步:開啟并加載從服務(wù)器的密鑰驗(yàn)證功能。這一步的操作步驟也同樣是在主配置文件中加載密鑰認(rèn)證文件,然后按照指定格式寫上主服務(wù)器的IP地址和密鑰名稱。注意,密鑰名稱等參數(shù)位置不要太靠前,大約在第43行比較合適,否則bind服務(wù)程序會(huì)因?yàn)闆]有加載完預(yù)設(shè)參數(shù)而報(bào)錯(cuò):

    [root@linuxprobe etc]# vim /etc/named.conf
     1 //
     2 // named.conf
     3 //
     4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
     5 // server as a caching only nameserver (as a localhost DNS resolver only).
     6 //
     7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
     8 //
     9 include "/etc/transfer.key";
     10 options {
     11 listen-on port 53 { 127.0.0.1; };
     12 listen-on-v6 port 53 { ::1; };
     13 directory "/var/named";
     14 dump-file "/var/named/data/cache_dump.db";
     15 statistics-file "/var/named/data/named_stats.txt";
     16 memstatistics-file "/var/named/data/named_mem_stats.txt";
     17 allow-query { localhost; };
     18 
     19 /* 
     20 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     21 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
     22 recursion. 
     23 - If your recursive DNS server has a public IP address, you MUST enable access 
     24 control to limit queries to your legitimate users. Failing to do so will
     25 cause your server to become part of large scale DNS amplification 
     26 attacks. Implementing BCP38 within your network would greatly
     27 reduce such attack surface 
     28 */
     29 recursion yes;
     30 
     31 dnssec-enable yes;
     32 dnssec-validation yes;
     33 dnssec-lookaside auto;
     34 
     35 /* Path to ISC DLV key */
     36 bindkeys-file "/etc/named.iscdlv.key";
     37 
     38 managed-keys-directory "/var/named/dynamic";
     39 
     40 pid-file "/run/named/named.pid";
     41 session-keyfile "/run/named/session.key";
     42 };
     43 server 192.168.10.10
     44 {
     45 keys { master-slave; };
     46 }; 
     47 logging {
     48 channel default_debug {
     49 file "data/named.run";
     50 severity dynamic;
     51 };
     52 };
     53 
     54 zone "." IN {
     55 type hint;
     56 file "named.ca";
     57 };
     58 
     59 include "/etc/named.rfc1912.zones";
     60 include "/etc/named.root.key";
     61

第6步:DNS從服務(wù)器同步域名區(qū)域數(shù)據(jù)?,F(xiàn)在,兩臺(tái)服務(wù)器的bind服務(wù)程序都已經(jīng)配置妥當(dāng),并匹配到了相同的密鑰認(rèn)證文件。接下來在從服務(wù)器上重啟bind服務(wù)程序,可以發(fā)現(xiàn)又能順利地同步到數(shù)據(jù)配置文件了。

    [root@linuxprobe ~]# systemctl restart named
    [root@linuxprobe ~]# ls /var/named/slaves/
     192.168.10.arpa  linuxprobe.com.zone

出現(xiàn)問題?大膽提問!

因讀者們硬件不同或操作錯(cuò)誤都可能導(dǎo)致實(shí)驗(yàn)配置出錯(cuò),請(qǐng)耐心再仔細(xì)看看操作步驟吧,不要?dú)怵H~

Linux技術(shù)交流請(qǐng)加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點(diǎn)此查看全國群。

*本群特色:通過口令驗(yàn)證確保每一個(gè)群員都是《Linux就該這么學(xué)》的讀者,答疑更有針對(duì)性,不定期免費(fèi)領(lǐng)取定制禮品。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)