09葵花寶典Openssl和DNS

openssl cd bind named

09葵花寶典Openssl和DNS

 

 

本節主要介紹網絡上相關數據加密和DNS知識,以及在linux上的實現。

一、常見加解密知識

數據加密是現代網絡應用的基礎之一。加密技術好比人類的衣服,第一實現了抵御自然環境的變化,第二使人類邁向了文明。

通常來講,加密就是使用密鑰K將數據從A變成B,而解密就是將數據從B通過K(或者與K成對的K1)將其還原為A。其中B可以公開,得到B的人,如果沒有密鑰K或者K1,將無法或者A是什么。

有三個方面:對稱加密、單項加密、公鑰加密(非對稱加密),每種加密類型都有其特點和相應的應用場景。

1、對稱加密。

對稱加密使用的加密密鑰和解密密鑰是相同的,即使用K來加密,也使用K來解密。加密方A和解密方B同時擁有密鑰K。在傳輸數據時,雙方必須事先約定好需要使用的密鑰K。 常見的對稱加密算法有:des,3des,AES等

2、單項加密。

單項加密主要是用于提出數據的特征碼或者說指紋信息的。就是將給定的信息A,變成一個固定長度的數據(固定大?。〣,這個B就稱為A的特征碼(指紋)。變化過程成為單項加密。其特點是只要A不變,變化過程使用的算法不變,B就一定不會變。當A有些許的變化時,B就有很大的改變 常見的單項加密算法有:MD5,sha1,sha256等

3、公鑰加密。

公鑰加密也叫非對稱加密,其特點是加密和解密所使用的密鑰是成對出現,加密時使用K,解密時使用與其成對的K1,或者加密時使用K1,解密時使用K。一般而言,我們將K和K1分別稱為私鑰和公鑰。其中,公鑰可通過私鑰導出。

公鑰加密有三個作用:一是加密。它可以像對稱加密一樣,對數據進行加密,但一般而言,公鑰加密的計算量是對稱加密的3個數量級以上,如果用其對大量數據進行加密,效率是非常低的。二是數字簽名。如果用一個公鑰能解密一段數據,那么這段數據必然是用與其對應的私鑰進行加密的,私鑰的擁有著,對其不能否認。第三是密鑰分發。前面說到對稱加密時,加密雙方必須有約定相同的密鑰,并且這個密鑰不能被第三方獲知,否則,加密將沒有意義。公鑰加密,即可實現雙方實時的約定這個密鑰,且密鑰本身并不在信息傳播路徑上傳送。

實現數據加密功能的公鑰加密方法有:RSA,DSA,ElGamal等;實現數字簽名功能的公鑰加密算法有:RSA;實現密鑰分發的公鑰加密方法有:RSA,D-H等。

在公鑰加密算法中,還有一個重要問題,就是公鑰對由誰產生,由誰認證的問題。例如,在數字簽名過程中,使用私鑰對數據進行簽名,那么,這個私鑰由誰來認可,這就是一個認證的過程。通常,在網絡上,有專門的認證機構,它們之間互相信任,然后,由這些認證機構對其他機構和個人簽發證書,證書中包括了該證書的公鑰以及使用人相關的信息,相當于電子身份證一樣。這個專門的認證機構,稱之為CA。在我們練習和某些小規模的生產環境中,需要建立一個私有的CA來簽發證書。

二、openssl工具

下面,介紹Linux上面,使用Openssl工具,來實現數據的對稱加密、單項加密、以及建立私有CA頒發證書等功能。Openssl命令有三類子命令,即標準命令、消息摘要命令(單項加密)、加解密命令,下面分別說明。

openssl工具的配置文件是/etc/pki/tls/openssl.cnf,定義了openssl的相關默認設置,特別是在用openssl創建私有CA時,也定義了其默認設置。

1、對稱加密

]# openssl des3 -e -base64 -in /tmp/fstab -out /tmp/fstab1

使用des3算法,用base64格式,對/tmp/fstab文件進行加密,加密后文件為/tmp/fstab1

]# openssl des3 -d -base64 -in /tmp/fstab1 -out /tmp/fstab1-jie

使用des3算法,對使用base64格式的加密文件/tmp/fstab1進行解密,解密后文件為fstab1-jie

-e 加密(encode) -d 解密(decode) -base64 編碼格式(同-a),-in 指明要加密或解密的文件,-out 指明加密后或解密后的文件。

可選的常見對稱加密算法可用 openssl ? 來查看 Cipher commands

2、單項加密

]# openssl dgst -md5 fstab
MD5(fstab)= f91e11874e54184589b273386c49c81a

可使用md5sum命令來驗證,該命令也是使用md5算法來計算輸入數據的特征碼

]# md5sum fstab
f91e11874e54184589b273386c49c81a fstab

使用-sha1、-sha256等算法選項,與sha1sum、sha256sum等命令相同,即只要輸入數據相同,算法相同,輸出必定相同。

使用openssl的dgst自命令對/tmp/fstab來進行單項加密,使用的單項加密算法為sha256,使用openssl ?來查看可使用的單項加密算法

3、公鑰加密

3-1、生成私鑰

]# openssl genrsa -out /tmp/private.key 1024

但是,通常情況下,私鑰文件是不能被除root以外的用戶讀取的,默認情況下,生成私鑰文件的權限時644,需要將其修改為600,可以這樣操作:

]# (umask 077; openssl genrsa -out /tmp/private.key 1024)
]# ll private.key 
-rw-------. 1 root root 887 May 10 22:29 private.key

3-2、生成CA的自簽名證書

CA的自簽名證書,需要一個私鑰,在openssl.cnf文件中,默認私鑰文件存放路徑為:private_key = $dir/private/cakey.pem# The private key,其中,$dir 為/etc/pki/CA

生成的證書文件為:certificate = $dir/cacert.pem # The CA certificate

1、生成私鑰:

]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048

2、生成CA自簽名證書:

]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert/pem
-new 指明這是一個新的證書簽署請求
-x509 outputs a self signed certificate instead of a certificate request,輸出自簽證書
-key 私鑰
-out 自簽證書文件

執行上述命令后,會出現交互式命令行,需要輸入該自簽證書的相關信息,后面請求CA簽署的簽名除

輸入完成后,即可生成CA的自簽證書

創建CA所需的目錄和文件,其中目錄3個,文件2個
mkdir /etc/pki/CA/{certs,newcerts,crr}
    
    touch /etc/pki/CA/{serial,index.txt}
    
    echo 01 > /etc/pki/CA/serial

3、證書請求者生成請求簽名的私鑰,方法同1,

生成證書請求文件:

openssl req -key file/to/private.key -out /file/to/certs.csr

4、使用相應的工具,將請求簽名的私鑰安全拷貝至CA上,如scp命令

scp root@ipaddr:/path/tofile /path/to/dest/file

將ipaddr主機中/path/tofile文件拷貝至本機的/path/to/dest/file中,前面表示源文件,后面表示目標,也可以源是本機,目標是遠程主機。

5、使用ca命令對請求進行簽署

]# openssl ca -in /etc/pki/CA/certs/certs.out -out /etc/pki/CA/newcerts/certs.crt

6、使用openssl x509查看以簽署證書相關信息

]# openssl x509 -in certs.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=SHANNXI/O=xfy/OU=cb/CN=cb.koala.com/emailAddress=admin.koala.com

三、DNS服務

DNS(domain name service)域名服務,是將主機名或域名轉換為IP地址的服務,或者反過來講ip地址轉換為主機名或域名。因為人類不容易記憶IP地址,而容易記憶與訪問相關的名字。

DNS有2種解析分類,一種是主機名(域名)到IP的解析,稱為正向解析,相應的解析域稱為正向域。另一種是IP到主機名(域名)的解析,稱為反向解析,對應的解析域稱為方向域。

域名是層次或者說層級結構,有根,頂級域,二級域等等。

根用點 . 來表示,頂級域有.com .mil .org .gov .edu 等,后面有增加了國家域(地區域),如 .cn .hk 等

一個完整的主機名,如www.haidu.com,稱為FQDN,即Full Qualified Domain Name

DNS解析,有兩種方法,一種叫迭代,另一種叫遞歸。所謂迭代,就是,當客戶端向服務器端請求查詢某個域名時,服務器端如果不負責該域名的解析(或者沒有這個域名的解析結果),會返回給客戶端一個結果,該結果指明了客戶端應該向那個服務器去請求解析該域名,然后客戶端再去向指向的服務器去請求;指向的服務器根據其配置,返回解析結果或再回合一個指向服務器,讓客戶端去請求解析,直至解析成功或返回錯誤結果。所謂遞歸,是指客戶端向某服務器發出請求后,該服務器通過向其他服務器查詢,得到解析結果或錯誤結果,直接返回給客戶端。可以看出區別就是,迭代查詢,客戶端可能查詢一次或多次才能得到結果,而遞歸查詢,客戶端只需一次查詢,就可以得到結果。

在互聯網上的DNS解析服務,通常是客戶端到其指向的服務器間,是迭代查詢,即客戶端只需向DNS服務器發出DNS請求,服務器通過迭代或遞歸的方式得到結果后,最后返回給客戶端查詢結果。而服務器在查詢時,一般采用迭代,先向根服務器發出請求,然后根據根的相應,迭代出結果。

1、bind

在Linux上,使用的DNS服務端程序叫bind(berkeley Internet name domain ),對應的進程為named。下面介紹bind程序的配置和使用。

1-1、bind程序主配置文件。

主配置文件為/etc/named.conf,通過該文件中的include指令,將其他配置區域配置文件包含進來

在主配置文件中,options段需要特別注意:一是監聽端口,應該監聽在該機提供DNS服務的地址的53號端口上;二是directory,指明了主目錄,后面相關的配置,都是在這個主目錄下的(/var/named);三是allow-query 允許查詢,根據情況改為可查詢的地址;四是recursion,即允許該服務器為哪些地址進行遞歸查詢,這個應該只允許公司內部網段的機器。還有兩個安全選項:dnssec-enable和dnssec-validation 一般都設為no

在次配置文件/etc/named.rfc1912.zones中,主要定義了一些解析區域,如localhost.localdomain 以及一個反向的解析區域。

由于反向解析域用的較少,這里只介紹正向解析域的相關配置

對于正向解析域的定義,一般遵循以下格式:

zone "ZONE_NAME" IN {
        type master|slave|stub|hint|forward;
        file "file/to/zonefile";
        allow-transfer { 192.168.1.181; };
};

ZONE_NAME 指明該區域的名字,如二級域名magedu.com type 該區域的類型,有master(主),slave(從),hint(根),forward(只轉發)等 file 說明該區域所定義的域名解析存放域名與地址間對應關系的文件,可以認為是數據庫 allow-transfer 當該區域是主區域是,允許那個地址上的從服務器來同步該區域的信息。

1-2、下來看區域文件如何定義

區域文件是一條一條的域名和IP地址的對應關系,基本需要有以下幾個組成部分

name [TTL] IN rr_type value 其中 TTL值是time to live 生存時間,指該記錄被其他主機查詢到后,可在其他主機上緩存的時間 rr_type resource record type 有以下幾種類型,SOA start of authority 起始記錄(每個區域文件的必須以一個SOA記錄起始);A address 即域名至ip地址的解析;NS name server 指該記錄是一個域名服務器記錄 AAAA 域名到IPv6地址的解析;MX 郵件服務器;CNAME 別名記錄 記錄 PTR反解記錄,即ip地址到域名的解析記錄。

SOA記錄 name 和區域定義中的ZONE_NAME一致 TTL 可在SOA記錄前,使用$TTL 來統一定義,默認時間為s 可使用單位是H M D等 IN 規定格式,必須有 rr_type SOA value值包括 該區域域名 管理員郵件地址(@符合需要用.代替,因為@在區域文件中代表區域名) 相關數據定義 包括 serial_num(序列號) freshtime(刷新時間) retrytime(重試時間) deadtime(死亡時間) negotiatetime(否定回答重試時間)

MX 記錄 name 郵件服務器的域名 rr_type MX priority 郵件服務器的優先級(0-100),越小越優先 value FQDN 一個MX記錄,需要有一個與其FQDN對應的A記錄

A記錄 name 一般為FQDN rr_type A value ip地址

NS記錄

name 域名 rr_type NS value FQDN 一個NS記錄需要有一個與其FQDN對應的A記錄

CNAME記錄 name 域名 rr_type CNAME value 域名

下面以一個例子來說明區域文件的定義和格式

$TTL 1D
@ IN SOA @ koala.com. (
                                3; serial                          
                                1D; refresh
                                12H; retry
                                3H; expire
                                3D; min
                                )
        IN NS ns1.koala.com.
        IN NS ns2.koala.com.
fin IN NS ns1.fin.koala.com.
ns2 IN A 192.168.1.181
ns1 IN A 192.168.1.180
web IN A 192.168.1.180
ns1.fin IN A 192.168.1.187

$TTL 1D 全局定義該區域文件中的所有記錄在查詢主機上的緩存有效時間 @ 代表該區域,和named配置文件中的ZONE_NAME一樣 必須以SOA記錄開始 SOA記錄中()內的值,分別是序列號,刷新時間、重試時間、死亡時間、否定回答過期時間

如果下一條記錄沒有name值,則隱含表示該name值是繼承上一條的name值

在FQDN中可使用兩種格式:一種是全格式,全格式的域名必須以.結尾;一種是簡化格式,簡化格式一定不能以點結尾,如上例中的fin,轉換為全格式為:fin.koala.com. 主意,后面必須有.

3、安裝配置:

安裝 配置好yum源后,使用yum install bind 來安裝,

更改主配置文件,主要該監聽ip地址,allow-query地址,recursive 還有dnssec等內容

默認安裝好后,使用systemctl start named.service來啟動DNS服務 named進程監聽在TCP UDP的53端口 可使用ss -tan命令來查看53端口是否啟動

3-1、配置一個簡單的域

1、在/etc/named.rfc1912.zones中添加域定義文件,

2、根據上面域文件中定義的域數據文件位置,創建一個域記錄文件,即以SOA記錄開頭的文件 域類型可定義為master

3-2、配置第一步定義的DNS域的從域

對于DNS而言,主從關系只是域層面上的,一個DNS可以有多個域,說主從,只是說是哪個域是主域,哪個域是從域,而不是服務器級別的

定義一個從域,需要兩個步驟:

1、依據配置簡單域的方法,配置一個DNS域,域類型必須為master 在域定義文件中,可是用 allow-transfer { IPaddr } 來限制那些地址的DNS服務器中的域可以稱為次域的從域,以上都在設置為主域的DNS上配置。

2、在設置為從域的DNS上 首先配置一個和主域ZONE_NAME 相同的域定義文件,該文件中 配置與主域文件不同地方如下: type slave 說明這是從域 masters { ipaddr } 主域服務器的地址 其余可以不用配置

可以使用 named-checkconf來檢查配置文件是否正確 使用named-checkzone ZONE_NAME /path/to/zonefile來檢查區域文件是否正確

使用dig -t TYPE(rr_type) typevalue @ip 來測試,也可以使用host命令來測試

3-3、配置子域授權

即在當前域下,再配置一個子域,配置方法如下:

1、在父域的域記錄文件中,首先定義一個NS記錄,該NS記錄的name為自域的名稱,value為該自域DNS服務器的FQDN (根據前面描述,該NS記錄,必須有一個與之對應的A記錄,來指向該自域DNS的服務器) 2、在子域中,如配置一個簡單的DNS域一樣,配置好該域的域定義文件和域記錄文件即可。

以上修改完配置文件,需要重新啟動named服務或者重新加載配置文件,可使用systemctl 或者rndc reload

named服務還可以實現acl控制,view試圖等功能,結合起來可實現,對于不同的解析請求,根據請求者的ip不同,返回不同的解析地址。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98672

(1)
koalakoala
上一篇 2018-05-16 21:26
下一篇 2018-05-16 21:56

相關推薦

  • 網絡管理

    tcp udp 三次握手四次揮手 子網劃分 ip nmcli

    2018-05-02
  • Linux的學習之旅

      Linux的文件系統層級結構標準FHS image.png /etc=====和主機相關的系統配置文件 edit the configure /home===== 用戶家目錄 /usr======二層分層的目錄。默認是最大的。 /dev=====設備文件 /media======掛載點和可移動的設備, /mnt=====臨時掛載點 /var==…

    Linux筆記 2018-04-01
  • Linux第六周作業

    1、簡述osi七層模型和TCP/IP五層模型   2、簡述iproute家族命令   3、詳細說明進行管理工具htop、vmstat等相關命令,并舉例   4、使用until和while分別實現192.168.0.0/24網段內,地址是否能夠ping通,弱ping通則輸出”success!”,若ping不…

    2018-08-06
  • centOS7.4啟動流程

    本文主要介紹:centos7.4啟動流程、Unit介紹、服務管理和查看、啟動排錯、破解口令及修復grub2

    2018-05-15
  • 第一周總結

    存儲網絡: DAS—–直接連接存儲(Direct attached storage) NAS—–網絡連接存儲(Network attached storage) SAN—–存儲區域網絡(storage area network) DAS優缺點: 直接存儲(Direct Attached Storage)。存儲設備與主機的緊密相連 1.管理成…

    Linux筆記 2018-04-01
  • if,case,for 腳本練習

    shell腳本練習

    2018-05-06
欧美性久久久久