# 20.5 建立連線加密網站 (https) 及防砍站腳本
## 20.5 建立連線加密網站 (https) 及防砍站腳本
從本章一開始的 20.1 就談過 http 這個通訊協定是明碼傳送資料,而那個 https 才是加密傳輸的!那加密的方法是透過 SSL 啊,這個 SSL 就是以 openssl 軟體來提供的一個加密函式庫。更多與 https 有關的資訊,請參考 [20.1.4](#whatis_www_ssl) 吧!
- - - - - -
### 20.5.1 SSL 所需軟體與憑證檔案及預設的 https
要達成讓 apache 支援 https 協定的話,你必須要有 mod\_ssl 這個軟體才行!請先自行使用 yum 去裝好這個軟體吧! 並且重新啟動 httpd 喔!同時,我們的 CentOS 6.x 也已經預設提供了 SSL 機制所需要的私鑰與憑證檔案囉!相關軟體提供的檔案如下:
- /etc/httpd/conf.d/ssl.conf:mode\_ssl 提供的 Apache 設定檔;
- /etc/pki/tls/private/localhost.key:系統私鑰檔,可以用來製作憑證的!
- /etc/pki/tls/certs/localhost.crt:就是加密過的憑證檔!(signed certificate)
既然系統都已經幫我們搞定了,那麼就讓我們直接來瀏覽一下,看看系統預設提供的 https 是長的什麼模樣吧! 打開你的瀏覽器,輸入 [https://你的IP](https://%E4%BD%A0%E7%9A%84IP) 來連線看看:
![](https://box.kancloud.cn/2016-05-13_5735da7dc851c.gif)
圖 20.5-1、在 firefox 底下看到的 SSL 安全問題圖示
就如同本章 20.1.4 談到的,因為我們這個 Apache 網站並沒有將此憑證向 CA 註冊,因此就會出現上述的訊息了! 這就類似 ssh 連線時,系統需要你輸入『 yes 』是一樣的啦!要接受憑證後才能夠進行加密的功能。所以,請點選上圖中的箭頭 1,此時就會延伸出箭頭 2 的位置,按下去吧!然後就會出現如下所示:
![](https://box.kancloud.cn/2016-05-13_5735da7e032b4.gif)
圖 20.5-2、在 firefox 底下接受一把私有的憑證所需要的流程
如果你確定這個網站是你自己的可信任網站,那就按下 1 及 2 的箭頭處!如果還想要看一下這個網站所提供的相關憑證內容, 就按下 3 箭頭的地方:
![](https://box.kancloud.cn/2016-05-13_5735da7e18484.gif)
圖 20.5-3、在 firefox 底下觀察憑證的詳細內容
由於這個憑證檔案的建置是在第一次啟動 Linux 時就安裝好了憑證檔,而在 CentOS 6.x 底下,預設的憑證有效期限為 1 年,所以你就會看到上圖中箭頭 2 所指的,簽發日到到期日共有一年啊!當你按下關閉後,就能夠看到實際的 https:// 提供的網站內容囉!這就是預設的 SSL 網站啦!你的重要資訊可以放在這裡~讓資料在網路上傳輸更佳的安全!
- - - - - -
### 20.5.2 擁有自製憑證的 https
- 建立憑證檔
預設的憑證雖然已經可以讓你順利的使用 https 了,不過,憑證的有效日僅有 1 年而已~實在討厭~ 所以,我們還是得要自製憑證才行~這個憑證的製作僅是私有 WWW 網站的用途,並沒有要拿去 CA 註冊喔! 那麼自製憑證需要什麼步驟呢?基本上需要的流程是:
1. 先建立一把 private key 預備提供給 SSL 憑證簽章要求所用;
2. 最後建立 SSL 憑證 (test certificates)。
那麼建立憑證有沒有很困難呢?沒有啦!因為 CentOS 6.x 已經幫我們寫好了 Makefile 了!你先到 /etc/pki/tls/certs 這個目錄下,然後直接輸入 make 這個指令,就能夠看到所有可行的目標動作!我們就可以很快速的建置好憑證喔! 不過,因為預設的私鑰檔需要加上密碼才能夠進行建立,所以我們還得要額外進行一下動作就是了。好! 現在假設我們要建立的是名為 vbird 的憑證!那麼底下流程中,所有的關鍵字就是 vbird!簡單流程如下所示:
```
# 1\. 先到 /etc/pki/tls/certs 去建立一把給 Apache 使用的私鑰檔案:
[root@www ~]# cd /etc/pki/tls/certs
[root@www certs]# make vbird.key
umask 77 ; /usr/bin/openssl genrsa -aes128 2048 > vbird.key <==其實是這個指令
Generating RSA private key, 2048 bit long modulus
.................................................................+++
...............................+++
e is 65537 (0x10001)
Enter pass phrase: <==這裡輸入這把私鑰的密碼,需要多於四個字元!
Verifying - Enter pass phrase: <==再一次!
# 2\. 將剛剛建立的檔案中,裡面的密碼取消掉!不要有密碼存在啦!
[root@www certs]# mv vbird.key vbird.key.raw
[root@www certs]# openssl rsa -in vbird.key.raw -out vbird.key
Enter pass phrase for vbird.key.raw: <==輸入剛剛的密碼啦!
writing RSA key
[root@www certs]# rm -f vbird.key.raw <==舊的金鑰檔移除
[root@www certs]# chmod 400 vbird.key <==權限一定是 400 才行!
# 3\. 建置所需要的最終憑證檔!
[root@www certs]# make vbird.crt SERIAL=2011080801
umask 77 ; /usr/bin/openssl req -utf8 -new -key vbird.key -x509 -days 365
-out vbird.crt -set_serial 2011080801 <==可以加入日期序號
You are about to be asked to enter information that will be incorporated
into your certificate request.
-----
Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Tainan
Organization Name (eg, company) [Default Company Ltd]:KSU
Organizational Unit Name (eg, section) []:DIC
Common Name (eg, your name or your server's hostname) []:www.centos.vbird
Email Address []:vbird@www.centos.vbird
[root@www certs]# ll vbird*
-rw-------. 1 root root 1419 2011-08-08 15:24 vbird.crt <==最終憑證檔!
-r--------. 1 root root 1679 2011-08-08 15:22 vbird.key <==系統私鑰檔
```
這樣就建立好憑證檔了!接下來就是得要去處理 ssl.conf 這個設定內容喔!另外,這把憑證依舊只能使用 1 年!如果你想要建立十年的憑證,那就得要修改一下 Makefile 裡面的內容,將 365 改成 3650 即可!
**Tips:** 如果你曾經多次重複進行上述的建立憑證動作,會發現到同一個憑證內容若製作多次,則最終用戶端瀏覽器會出現一些錯誤訊息, 導致無法連線!因此,建議多加一個序號 (SERIAL) 的參數,可以修訂這個錯誤喔!
![](https://box.kancloud.cn/2016-05-13_5735736501917.gif)
- 修改 ssl.conf 的內容,使用自製憑證
修改 ssl.conf 的內容也是很簡單!只要修改兩個地方,亦即是檔案檔名的地方即可!
```
[root@www ~]# vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/vbird.crt <==約在 105 行
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key <==約在 112 行
[root@www ~]# /etc/init.d/httpd restart
```
然後再以瀏覽器去瀏覽 https:// 的網址,就能夠查閱到剛剛建立的憑證資料。不過,因為我們之前已經有瀏覽過預設的憑證, 所以網頁以及憑證都有被快取過!因此,你可能得需要到瀏覽器的隱私保護的地方,將記錄的憑證刪除,並且將網頁快取刪除, 這樣才能夠看到最終如下的正確憑證資料喔!
![](https://box.kancloud.cn/2016-05-13_5735da7e2fcff.gif)
圖 20.5-4、檢查憑證的詳細內容!
- - - - - -
### 20.5.3 將加密首頁與非加密首頁分離
或許你已經發現一個無俚頭的地方,就是我的 http:// 以及 https:// 首頁是一模一樣的嘛!那麼我的讀者幹嘛沒事找事幹, 肯定不會使用 https 的嘛!那怎辦?怎麼強制使用者使用 https:// 來查閱我的重要資料?很簡單啊! 透過虛擬主機就好了啊!因為 SSL 模組也是預設提供了這個功能的嘛!修改會不會很麻煩呢?不會啦! 你只要將 http 及 https 的首頁分離即可!我們這麼假設好了:
- 一般明碼傳輸的網頁首頁不要變更;
- https:// 的首頁放置到 /var/www/https/ 目錄下。
所以我們得先要設定 /var/www/https 目錄才行!然後,只要修改 ssl.conf 檔案內容即可!整個過程可以這樣處理:
```
# 1\. 處理目錄與預設的首頁 index.html 檔案:
[root@www ~]# mkdir /var/www/https
[root@www ~]# echo "This is https' home" > /var/www/https/index.html
# 2\. 開始處理 ssl.conf 的內容囉!
[root@www ~]# vim /etc/httpd/conf.d/ssl.conf
Listen 443 <==預設的監聽埠口!不建議修改!
<VirtualHost _default_:443> <==就是虛擬主機的設定囉!
DocumentRoot "/var/www/https" <==約84行,拿掉註解改掉目錄名稱
ServerName *:443 <==拿掉註解,並將主機名稱設定為 *
SSLEngine on <==有支援 SSL 的意思!
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/vbird.crt
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key
</VirtualHost>
[root@www ~]# /etc/init.d/httpd restart
```
大部分都使用預設值,就是 DocumentRoot 以及 ServerName 需要留意就是了。如此一來,我們就將 https, http 兩個完整的分開,你的重要資料需要加密的,終於有個可靠的地方擺放囉!^\_^
- - - - - -
### 20.5.4 防砍站軟體
幾個比較知名的網站管理員大概都有這樣的困擾,那就是網站常被砍站軟體所強力下載,結果造成主機的 CPU loading 過重,最後竟然會導致死掉~唉!真是的~人怕出名豬怕肥吶!先來解釋一下什麼是砍站吧!
所謂的『砍站』,就是以類似多點連線下載的持續性訊息傳遞軟體進行網站資料的下載,而且, 一啟用該軟體,該軟體就將『整個網站』的內容都給他 download 下來,很厲害吧!沒錯!是很厲害,但是卻也害死人了~怎麼說呢?
因為這種軟體常常會為了加快 download 的速度,所以採用多點連線的方式,也就是會持續不斷的向 Server 發出要求封包,而由於這些封包並不見得能夠成功的讓 Server 把資料傳導給 Client 端,常常會無法投遞就是啦!這樣的結果就是...造成 Server 要一直不斷的回應,又無法正確的回應出去, 此外,要求太過頻繁,結果主機應接不暇,最後...就當機了...真的是林老師ㄌㄟ~
鳥哥的鳥站主機古早以前,就是因為這樣的原因,導致服務常常斷斷續續的,並且,由於 CPU loading 太高,結果讓正常連線進來看資料的網友沒有足夠的資源,因此網頁開啟的速度就變的很慢~唉~ 這些砍站的人,也太不道德啦!
由於這種砍站軟體真的很麻煩,一不注意馬上就又會被砍站而當機,三天兩頭就要重新開機一次,完全讓 Linux 的穩定性無法發揮!真是氣死了~後來,鳥哥就自行寫了一個 scripts 來擋這樣的 IP !我的作法是這樣的:
1. 由於砍站軟體會多點連續下載,因此,同一個 IP 在同一個時間內,會有相當多的連線發生;
2. 由於他是重複不斷的要求連線,因此剛剛建立的連線在達成下載的目的後,會立刻死掉, 而又多生出其他的連線出來,因此,這個時候他的連線情況就變的相當的不正常了!
3. 由於某些較舊的砍站軟體並不會『欺騙』主機,所以,會在主機的登錄檔裡面記錄住 Teleport 的標記!
4. 既然如此的話,那麼我就讓我的主機每分鐘去檢查兩個東西(1)先檢查 log file ,如果有發現到相關的 Teleport 字詞,就將該 IP 抵擋掉;(2)使用 netstat 來檢查同一個 IP 的同時連線,如果該連線超過一個值(例如同時有 12 個連線)的話,那麼就將該 IP 抵擋掉!
5. 此外,由於上面的方案可能會將 Proxy 的 Client 端也同時抵擋掉,真是可憐啊! 這個時候,這支程式就會主動的將(1)的情況的主機抵擋 3 天,至於(2)的情況則抵擋2小時! 過了該抵擋的時限後,該 IP 即可又連上我們的主機了!
大致上就是這樣吧!這樣的一程式需要與 iptables 相互配合,所以,請先查閱一下[第九章的防火牆](http://linux.vbird.org/linux_server/0250simple_firewall.php)內容,然後再來下載這支程式吧! 這支程式你可以在底下的網址下載喔!
- <http://linux.vbird.org/download/index.php?action=detail&fileid=47>
詳細的安裝步驟鳥哥已經以中文寫在該檔案裡面了,所以請先查看一下該檔案的前面說明部分吧!此外, Study Area 的 netman 大哥也已經開發了一套很棒的防砍站的程式了! 在防堵砍站的原理上面是完全相同的,不過寫法可能不是很雷同就是了!如果有需要的話,也可以前往 Study-Area 搜尋一下囉!
- <http://phorum.study-area.org/viewtopic.php?t=13643>
- - \*
- 鸟哥的Linux私房菜:服务器架设篇 第三版
- 第一部份:架站前的进修专区
- 作者序
- 第一章、架设服务器前的准备工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架设服务器流程
- 1.3 自我评估是否已经具有架站的能力
- 1.4 本章习题
- 第二章、基础网络概念
- 2.1 网络是个什么玩意儿
- 2.2 TCP/IP 的链结层相关协议
- 2.3 TCP/IP 的网络层相关封包与数据
- 2.4 TCP/IP 的传输层相关封包与数据
- 2.5 连上 Internet 前的准备事项
- 2.6 重点回顾:
- 2.7 本章习题
- 2.8 参考数据与延伸阅读
- 第三章、局域网络架构简介
- 3.1 局域网络的联机
- 3.2 本书使用的内部联机网络参数与通讯协议
- 第四章、连上 Internet
- 4.1 Linux 连上 Internet 前的注意事项
- 4.2 连上 Internet 的设定方法
- 4.3 无线网络--以笔记本电脑为例
- 4.4 常见问题说明
- 4.5 重点回顾
- 4.6 本章习题
- 4.7 参考数据与延伸阅读
- 第五章、 Linux 常用网络指令
- 5.1 网络参数设定使用的指令
- 5.2 网络侦错与观察指令
- 5.3 远程联机指令与实时通讯软件
- 5.4 文字接口网页浏览
- 5.5 封包撷取功能
- 5.6 重点回顾
- 5.7 本章习题
- 5.8 参考数据与延伸阅读
- 第六章、 Linux 网络侦错
- 6.1 无法联机原因分析
- 6.2 处理流程
- 6.3 本章习题
- 6.4 参考数据与延伸阅读
- 第二部分:主机的简易资安防护措施
- 第七章、网络安全与主机基本防护:限制端口, 网络升级与 SELinux
- 7.1 网络封包联机进入主机的流程
- 7.2 网络自动升级软件
- 7.3 限制联机埠口 (port)
- 7.4 SELinux 管理原则
- 7.5 被攻击后的主机修复工作
- 7.6 重点回顾
- 7.7 课后练习
- 7.8 参考数据与延伸阅读
- 第八章、路由观念与路由器设定
- 8.1 路由
- 8.2 路由器架设
- 8.3 动态路由器架设:quagga (zebra + ripd)
- 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
- 8.5 重点回顾
- 8.6 本章习题
- 8.7 参考数据与延伸阅读
- 第九章、防火墙与 NAT 服务器
- 9.1 认识防火墙
- 9.2 TCP Wrappers
- 9.3 Linux 的封包过滤软件:iptables
- 9.4 单机防火墙的一个实例
- 9.5 NAT 服务器的设定
- 9.6 重点回顾
- 9.7 本章习题
- 9.8 参考数据与延伸阅读
- 第十章、申请合法的主机名
- 10.1 为何需要主机名
- 10.2 注册一个合法的主机名
- 10.3 重点回顾
- 10.4 本章习题
- 10.5 参考数据与延伸阅读
- 第三部分:局域网络内常见的服务器架设
- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
- 11.1 远程联机服务器
- 11.2 文字接口联机服务器: SSH 服务器
- 11.3 最原始图形接口: Xdmcp 服务的启用
- 11.4 华丽的图形接口: VNC 服务器
- 11.5 仿真的远程桌面系统: XRDP 服务器
- 11.6 SSH 服务器的进阶应用
- 11.7 重点回顾
- 11.8 本章习题
- 11.9 参考数据与延伸阅读
- 第十二章、网络参数控管者: DHCP 服务器
- 12.1 DHCP 运作的原理
- 12.2 DHCP 服务器端的设定
- 12.3 DHCP 客户端的设定
- 12.4 DHCP 服务器端进阶观察与使用
- 12.5 重点回顾
- 12.6 本章习题
- 12.7 参考数据与延伸阅读
- 第十三章、文件服务器之一:NFS 服务器
- 13.1 NFS 的由来与其功能
- 13.2 NFS Server 端的设定
- 13.3 NFS 客户端的设定
- 13.4 案例演练
- 13.5 重点回顾
- 13.6 本章习题
- 13.7 参考数据与延伸阅读
- 第十四章、账号控管: NIS 服务器
- 14.1 NIS 的由来与功能
- 14.2 NIS Server 端的设定
- 14.3 NIS Client 端的设定
- 14.4 NIS 搭配 NFS 的设定在丛集计算机上的应用
- 14.5 重点回顾
- 14.6 本章习题
- 14.7 参考数据与延伸阅读
- 第十五章、时间服务器: NTP 服务器
- 15.1 关于时区与网络校时的通讯协议
- 15.2 NTP 服务器的安装与设定
- 15.3 客户端的时间更新方式
- 15.4 重点回顾
- 15.5 本章习题
- 15.6 参考数据与延伸阅读
- 第十六章、文件服务器之二: SAMBA 服务器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服务器的基础设定
- 16.3 Samba 客户端软件功能
- 16.4 以 PDC 服务器提供账号管理
- 16.5 服务器简单维护与管理
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考数据与延伸阅读
- 第十七章、区网控制者: Proxy 服务器
- 17.1 什么是代理服务器 (Proxy)
- 17.2 Proxy 服务器的基础设定
- 17.3 客户端的使用与测试
- 17.4 服务器的其他应用设定
- 17.5 重点回顾
- 17.6 本章习题
- 17.7 参考数据与延伸阅读
- 第十八章、网络驱动器装置: iSCSI 服务器
- 18.1 网络文件系统还是网络驱动器
- 18.2 iSCSI target 的设定
- 18.3 iSCSI initiator 的设定
- 18.4 重点回顾
- 18.5 本章习题
- 18.6 参考数据与延伸阅读
- 第四部分:常见因特网服务器架设
- 第十九章、主机名控制者: DNS 服务器
- 19.1 什么是 DNS
- 19.2 Client 端的设定
- 19.3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
- 19.4 DNS 服务器的详细设定
- 19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 19.6 DNS 服务器的进阶设定
- 19.7 重点回顾
- 19.8 本章习题
- 19.9 参考数据与延伸阅读
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服务器之三: FTP 服务器
- 21.1 FTP 的数据链路原理
- 21.2 vsftpd 服务器基础设定
- 21.3 客户端的图形接口 FTP 联机软件
- 21.4 让 vsftpd 增加 SSL 的加密功能
- 21.5 重点回顾
- 21.6 本章习题
- 21.7 参考数据与延伸阅读
- 第二十二章、邮件服务器: Postfix
- 22.1 邮件服务器的功能与运作原理
- 22.2 MTA 服务器: Postfix 基础设定
- 22.3 MRA 服务器: dovecot 设定
- 22.4 MUA 软件:客户端的收发信软件
- 22.5 邮件服务器的进阶设定
- 22.6 重点回顾
- 22.7 本章习题
- 22.8 参考数据与延伸阅读