# Week 11(2020/11/26) 期中考題 part 2 底加拉(上機/筆試) - Book mode https://hackmd.io/@ncnu-opensource/book [TOC] ## 規則: ![](https://i.imgur.com/hJueRO7.png) - 如有問題請舉手發問。 - 請在 AWS 上實作。 - 請勿編輯本頁面。 - 請勿以私訊或聊天室等任何方式彼此溝通。 - 當然也請不要直接實體溝通啦... 那算作弊哦 - 可以上網自由地找資料、補充這學期相對應的共筆頁面。 - 請確定執行正確,再找助教 DEMO,僅 **部份**題目 需要 DEMO - 會標記在題目上 - 除了 Webserver 外,DEMO 時,助教發現答案錯誤便 **無法** 擁有再更改的權利(即為該題錯誤) - 筆試答案的部份請寫在試卷上 **We Are Watching You.** ## SSH 5% - 請建立 3 台 AWS EC2 的 Ubuntu VM - 並將下列 ssh 公鑰寫入各個 VM 的特定檔案中,讓助教能以 **無密碼** 的方式 ssh 進你的所有 server 中 - P.S.: 助教擁有私鑰 :::success ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCMCsWRObWBj5mv8FdWFNEb17TDTnlVH6yT1QAOemfsCsjIc1VTTGi1t7HkQJegSJdORNJe2ezSU1vPYhuOCWsnzC2x7tD2aAhrs3SlecR5pMYyhfCsOW+hP8ypb6aaHFSMK49fQf2QGhg80z3pwF1CDIO/3SfhjZR2eA69IsoopgmZ71Q8XmS790GPCNCsBdMkHRgTqJGp8DloxLkuMJQr8ouzm9JpKnnq2Uh0QCHRuRlonKkt/TQXntLR7htaniHjGe/wOcqfzxYfGTLDsPP7rbgZ3tMdttB0IFqGi1jNCdmnpQH15LSY+GnapaBgQekwtIrXsGucUYhM8e2L9dDz 1091lsamideumtest ::: ## Web server 65% 請建立 3 台 EC2 VM 分別實作 Nginx, Apache, Lighttpd server 請依照要求完成以 IP , domain name, 或 port 區分 virtual host 並呈現出不同顯示畫面,詳細架構連接如下圖: ![](https://i.imgur.com/zDKcJkf.png) ### A. <span class="vm">VM-1</span> Nginx server 1. (10%) 輸入 ==<public_**ip**>== 會得到以下頁面 (請依照下列格式作答並顯示在網頁上): - (10%) 成功輸出並且輸出內容正確 - (5%) 成功輸出但輸出內容錯誤 - (0%) 未成功輸出 ```htmlmixed= <head> <meta charset='UTF-8'> <h1>課程相關</h1> <h2>中文全名:(請填入此處)</h2> <h2>英文全名:(請填入此處)</h2> <h2>英文縮寫:(請填入此處)</h2> </head> ``` 2. (5%)輸入 ==<public_**ip**>:8080== 會 proxy 到 [Mr.郭網頁](https://vincentinttsh.github.io/) :::success 請使用 [NO-IP 免費提供 public domain name]( https://www.noip.com/) 取得兩個如 **題3** 與 **題4** 規定之 domain name EX: (以學號 106213014 為例,請依據自己的學號做替換) 106213014-apache.hopto.org 106213014-lighttpd.hopto.org ::: 3. (20%) 輸入 ==<學號>-apache.hopto.org== 會導向 Apache server 的頁面 **(詳細格式請看 VM-2)** - (10%) ==:80 (port)== : 助教資訊 - (10%) ==:80 (port)/~<username> (預設使用者)== : 學生個人資訊 4. (15%) 輸入 ==<學號>-lighttpd.hopto.org== 會導向 Lighttpd server 的頁面 **(詳細格式請看 VM-3)** - (10%) ==:80 (port)== : 老師相關訊息 - (5%) ==:8080 (port)== : 連到 lsa.bluet.org 5. (15%)輸入 ==<public_domain_**name**>== 會在以下 3 個網頁間做 load balance - (5%) 網頁顯示 — 助教的名字 (Apache) - (5%) 網頁顯示 — 老師的資訊 (Lighttpd) - (5%) 網頁顯示 — 老師的網頁 (Lighttpd proxy) ### B. <span class="vm">VM-2</span> Apache server 1. 在 port = 80 時,請作答並以下列格式顯示內容: ```htmlmixed= <head> <meta charset='UTF-8'> <h1>助教們的中文名字</h1> <h2>(請在此處填寫所有助教名字,包含愛心助教共 5 位)</h2> </head> ``` 2. 網址後增加 `/~<username> (預設使用者)` 可 show 出以下學生資訊: ```htmlmixed= <head> <meta charset='UTF-8'> <h1>本次作答學生資訊</h1> <h2>姓名:(請填寫名字)</h2> <h2>學號:(請填寫學號)</h2> </head> ``` ### C. <span class="vm">VM-3</span> Lighttpd server 1. 在 port = 80(Default) 時,請作答並以下列格式顯示內容: ```htmlmixed= <head> <meta charset='UTF-8'> <h1>LSA 的老師</h1> <h2>中文名字:(請作答)</h2> <h2>英文全名:(請作答)</h2> <h2>常用 ID:(請作答)</h2> <h2>Telegram ID:(請作答)</h2> <h2>Facebook 個人檔案的名稱:(請作答)</h2> </head> ``` 2. 在 port = 8080 時,請 proxy 到 lsa.bluet.org ## 手寫 ### 問答題 26% 1. 2% 請問 Linux kernel 第一版是由誰實作的(使用英文回答) 3. 4% Open Source 主張人們對於軟體應該有什麼權利 Open source licenses affect the way people can ___, _____, ______, and __________ software. In general, open source licenses grant computer users permission to use open source software for any purpose they wish. - use、study、 modify 3. 2% 根網域 DNS 伺服器有幾台(不含中國自己講的) 4. 12% 列舉 3 種 webserver(Nginx, Lighttpd, Apache)各自的優劣處 - Nginx - pros: 輕量,善於處理靜態文件,適合做proxy角色,承接多位使用者的連線 - cons: 不善於處理動態文件 - Lighttpd - pros: 輕量快速 - cons: 與Nginx一樣不善於處理動態文件 - Apache - pros: 模組多樣 (只有這個優點) - cons: 很老很肥(不輕量) 5. 4% 在網路世界裡,DMZ 的特點為何?請舉例一個會放在 DMZ 中的服務以及原因 - 特點: 不得以給外網存取的服務,可放在DMZ - 例子: moodle 6. 2% 8.8.8.8 是什麼主機,是由誰提供到? - DNS,Google ### 子網路遮罩 30% 請根據已知資訊,幫我算算下圖 firewall 三張網卡的 IP 及 subnet mask 吧! - 10% eth1 : - firewall 的對外網卡 - 10.多、192.168多 (不要太誇張都給過) - IP 位址、subnet mask為您自己的主機的 IP 及 subnet mask - 10% eth2 - 格式 ==`172.19._._/_`== - firewall 的對內(DMZ 區域)網卡 - IP 位址為該網段的最後一個可用 IP - Ans : 172.19.31.254 - ==s1(Lighttpd) IP 位址為172.19.18.24/20== - ==s2(DNS) IP 位址為172.19.19.24/20== - ==s3(ssh) IP 位址為172.19.19.25/20== - 10% eth3 - 格式 ==`192.168._._/_`== - firewall 的對內(NAT 區域)網卡 - IP 位址為此網段之第一個可用 IP - - 192.168.0(64、128、192).1/18 - 這網段需要 16384 的 IP space - 32-14(2^14=16384)=18 bits(subnet) ### iptables 50%(依照答案正確程度給分) ![](https://i.imgur.com/JHi7yPD.png) :::info **情境** LSA 學院的校網架構如下,擁有一個內網 (LAN) 讓學生們使用,一個 DMZ 放置網頁服務,兩者都不可直接對外 (BBI) ,校網對外 (BBI) 的流量都需要經過 Firewall 過濾再轉送,此外,Firewall 上有 Nginx 作為 Proxy Server 來接收 HTTP 請求,並往後導向 DMZ 的 lighttpd web 伺服器。 ::: :::success :apple: iptables 所有規則都設定在 firewall 防火牆預期的過濾方式如下,請試著根據要求設定防火牆的 iptables 規則: - **BBI 連向 HTTP 服務** (==綠==) - BBI 可以連向 Firewall 的 Nginx - Firewall Nginx 可以將流量 proxy 給 DMZ 的 lighttpd Web 伺服器 (即是 Firewall 可以連上 DMZ 的 Web 伺服器) - **SSH 跳板兒** (==紅==) - BBI 連向 Firewall 2222 port 的流量會被導向 DMZ 的 SSH 伺服器 - DMZ SSH 伺服器可以 SSH 到 LAN 的所有伺服器 - **DMZ 出去** - DMZ 對外只可以跟 NTP 伺服器連線對時 (==黃==) (Hint: 可以透過 /etc/services 查詢 port) - **LAN 出去** - LAN 的主機可以連上任何地方 (BBI, DMZ, Firewall) - LAN 內的主機需要做 DNS 查詢時,都會被導向 DMZ 的 s2 DMZ (==紫==) - 除上述情境,其餘流量皆不允許接受 ::: - INPUT ```shell= # 連線 nginx iptable -A INPUT -p -tcp --dport 80 -j ACCEPT # 允許 LAN 連上 firewall iptables -A INPUT -i {LAN_interface} -j ACCEPT # DMA 相關 iptables -A INPUT eth2 -m conntrack --ctstate # 其餘皆不准 iptables -A INPUT -j DROP ``` - OUTPUT ```shell= # Firewall Nginx proxy to DMZ web iptables -A OUTPUT -d {lighttpd_ip} -p tcp --dport 80 -j ACCEPT # 相關 iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # 其餘皆不准 iptables -A OUTPUT -j DROP ``` - FORWARD ```shell= # DMZ 允許該往段向外網 NTP 伺服器對時 iptable -A FORWARD -i {} -o {} -p udp --dprot 123 -j ACCEPT # 允許該網段(LAN)主機去任何地方 iptables -A FORWARD -i {LAN_interface} -j ACCEPT # 允許 DMZ ssh 到 NAT (New 額外 +2.5) iptables -A FORWARD -s {ssh_ip} -o {LAN_interface} -p tcp --dport 22 -j ACCEPT # 允許相關連線 FORWARD (# DMZ 其餘除非是相關連線,皆不可進出) (# LAN 除非相關不然不可以主動連向 LAN) iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # 其餘皆不准 iptables -A FORWARD -j DROP ``` - POSTROUTING ```shell= # DMZ -> BBI iptables -t nat -A POSTROUTING -i {DMZ_interface} -o {BBI_interface} -j MASQUERADE # DMZ -> LAN (DMZ SSH server only) iptables -t nat -A POSTROUTING -i {DMZ_interface} -o {LAN_interface} -s {SSH_IP} --dport 22 -j MASQUERADE # LAN -> BBI iptables -t nat -A POSTROUTING -i {LAN_interface} -o {BBI_interface} -j MASQUERADE # LAN -> DMZ iptables -t nat -A POSTROUTING -i {LAN_interface} -o {DMZ_interface} -j MASQUERADE ``` - PREROUTING ```shell= # 連向 DMZ 的 SSH 伺服器的 2222 port 會被導向 22 port iptables -t nat -A PREROUTING -i {BBI_interface} -p tcp --dport 2222 -j DNAT -to-destination {ssh_ip}:22 # LAN DNS --> DMZ iptables -t nat -A PREROUTING -i -p tcp --dport 53 -j DNAT --to-destination {DNS_ip}:53 # ssh 走 udp 與 tcp 這兩個 port iptables -t nat -A PREROUTING -i {LAN_interface} -p udp --dport 53 -j DNAT -to-destination {DNS_ip}:53 iptables -t nat -A PREROUTING -i {LAN_interface} -p tcp --dport 53 -j DNAT -to-destination {DNS_ip}:53 ``` - 其他重要指令 - 要把 forward 打開 ( 預設是關閉的 ) ```shell= # Uncomment the next line to enable packet forwarding for IPv4 sudo vim /etc/sysctl.conf ``` ### [加分題] DNS 10% 1. 5% 子子最近在機器上想瀏覽 google 網頁(http://www.google.com),卻發現機器好像中毒了,總是跳出奇怪的頁面,請嘗試找出原因,不需修復。 :::info 機器IP:52.5.66.200 帳號:student ::: ```shell= ssh -i lsa_test2 student@52.5.66.200 ``` - 先去看一下連到 google 有甚麼問題 ```shell= curl www.google.com ``` - 檢查 host 有沒有問題 ```shell= cat /etc/hosts ``` - 檢查 nsswitch ```shell= cat /etc/nsswitch.conf ``` - 問題點 = 無法跑到真正的 google 網站,而是自己內部的ip 2. 5% 緯緯最近在機器上想瀏覽網頁,但發現除非是打 IP,不然都無法上網,請嘗試找出原因,不需修復。 :::info 機器IP:3.214.192.235 帳號:student ::: - 先試試看打 domain name 會怎樣 ```shell= ping www.google.com ``` - 檢查 nsswitch(先看file,再看 dns) ```shell= cat /etc/nsswitch.conf cat /etc/resolv.conf ``` - 問題點 (Ans) - 沒有任何的 dns server 設定 - 也可加入dns server 設定 ### [加分題] Crontab 15% 若我們想要自動化定時執行命令,我們會使用 `crontab` 助教歐阿最近想要建立一個定時提醒(使用 `mail` 指令發信提醒),她發現假日總是過得特別快,他希望在每個「星期日」時能夠在「23:59」提醒他,時間要過了假日要結束了! 1. 5% 當我們要編輯 `crontab` 的內容,應該如何下指令? ```shell= crontab -e ``` ```shell= vim /etc/crontab ``` 2. 5% 當要使用 `mail` 指令,寄送一篇 txt 檔 如下(`/home/lsa/sunday.txt`),並且主旨為 `LSA-pencil-test`,請依照給予的檔案路徑以及主旨要求,並將寄件目的地設為**任一助教的 `學校 email`**,請寫下完整指令 > Hint: 若要實作確認是否寄送成功,可先寄給自己,再從 **垃圾郵件** 中查找 ``` (檔案位址:/home/lsa/sunday.txt) Hello, you need to work tomorrow ``` ```shell= echo "LSA-pencil-test" | mail -s s107213004@mail1.ncnu.edu.tw ``` 3. 5% 承題意,應該如何編輯 crontab 指令,使其符合歐阿的定時要求 ```shell= 59 23 * * 7 root mail ```