1. (50%)實作題:啟動 Server 作業硬碟 - unit04
    1. 網路參數的設定,請依據底下的方式來設定好你的網路環境:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.18.255.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 使用 teamd 的機制建立內部區域網路的備援功能:
        • team 的界面使用 team0 卡號,且連線名稱請命名為 team0
        • team 使用 activebackup 備援功能,不要使用 loadbalance
        • team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
        • 內部網路參數為: 172.19.*.254/24,不需要 gateway
      4. 主機名稱指定為: server*.example.dic
      5. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 基本的伺服器作業系統設定行為:
      1. 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
      2. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
      3. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
      4. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    3. 實際設定好本機防火牆
      1. 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
      2. 將預設的規則轉存到 /root/firewall.sh 這個檔案內
      3. 首先將全部的規則刪除 (應該有三條指令)
      4. 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
      5. 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
      6. 放行你自己的內部區域網路那個網域的連線要求
      7. 讓 ssh 只對外部的區網放行,不會對 Internet 放行
      8. 讓 http 針對整個 Internet 放行
      9. 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
      10. 重新啟動 iptables 服務,然後觀察規則是否正確
    4. systemctl status firewalld		//查看firewalld狀態
      systemctl stop firewalld		//關閉firewalld
      systemctl disable firewalld		//預設關閉firewalld
      
      yum install iptables-services		//安裝iptables
      systemctl start iptables		//啟動iptables
      systemctl enable iptables		//預設啟動iptables
      
      vim /root/firewall.sh			//編輯腳本
      
      #!/bin/bash
      
      iptables -F
      iptables -X					//清除規則
      iptables -Z
      
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT			//定義預設政策
      iptables -P FORWARD ACCEPT
      
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A INPUT -p icmp -j ACCEPT
      iptables -A INPUT -s 172.19.*.0/24 -j ACCEPT					//定義規則
      iptables -A INPUT -s 172.18.255.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
      iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      iptables -A INPUT -j REJECT
      
      iptables-save > /etc/sysconfig/iptables		//轉存
      
      sh /root/firewall.sh			//編輯腳本
      
    5. 實際設定好 Server 的路由功能
      1. 讓核心支援 IP 轉遞的功能
      2. 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
      3. 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
      4. 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
      5. 此功能在開機後依舊能夠順利啟動
    6. vim /etc/sysctl.conf
      net.ipv4.ip_forward = 1
      
      sysctl -p				//啟用設定
      cat /proc/sys/net/ipv4/ip_forward	//觀察是否生效 (1 是有生效, 0 是未生效)
      
      vim /root/firewall.sh			//編輯腳本
      
      #!/bin/bash
      
      iptables -F
      iptables -X					//清除規則
      iptables -Z
      
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT			//定義預設政策
      iptables -P FORWARD ACCEPT
      
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A INPUT -p icmp -j ACCEPT
      iptables -A INPUT -s 172.19.*.0/24 -j ACCEPT					//定義規則
      iptables -A INPUT -s 172.18.255.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
      iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      iptables -A INPUT -j REJECT
      
      iptables -t nat -F
      iptables -t nat -X				//NAT設定
      iptables -t nat -Z
      iptables -t nat -A POSTROUTING -s 172.19.*.0/24 -o eth0 -j MASQUERADE		   //IP 偽裝
      
      iptables-save > /etc/sysconfig/iptables		//轉存
      
      sh /root/firewall.sh			//編輯腳本
      
      vim /etc/sysconfig/iptables-config
      IPTABLES_MODULES="nf_nat_ftp  nf_conntrack_ftp"
      
    7. 針對 NAT 的設定行為:
      1. 讓由 eth0 進入的封包,想要連線到本機的 port 82 時,重新導向到 172.19.*.1 的 port 80 上面去。
    8. vim /root/firewall.sh			//編輯腳本
      
      #!/bin/bash
      
      iptables -F
      iptables -X					//清除規則
      iptables -Z
      
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT			//定義預設政策
      iptables -P FORWARD ACCEPT
      
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A INPUT -p icmp -j ACCEPT
      iptables -A INPUT -s 172.19.*.0/24 -j ACCEPT					//定義規則
      iptables -A INPUT -s 172.18.255.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
      iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      iptables -A INPUT -j REJECT
      
      iptables -t nat -F
      iptables -t nat -X				//清除規則
      iptables -t nat -Z
      iptables -t nat -A POSTROUTING -s 172.19.*.0/24 -o eth0 -j MASQUERADE	 	  //IP 偽裝
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 82 -j DNAT --to-destination 172.19.*.1:80     //重新導向
      
      iptables-save > /etc/sysconfig/iptables		//轉存
      
      sh /root/firewall.sh			//編輯腳本
      
  2. (20%)實作題:啟動 client 作業硬碟
    1. 網路參數的設定,請依據底下的方式來設定好:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.19.*.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 主機名稱指定為: client.lan*.example.dic
      4. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 實際設定好本機防火牆
      1. 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
      2. 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
      3. 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
      4. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
    3. systemctl status firewalld      			//查看firewalld狀態
      systemctl start firewalld       			//啟動firewalld
      systemctl enable firewalld       			//預設啟動firewalld
      
      firewall-cmd --list-all         			//查看firewall已放行服務列表
      firewall-cmd --add-service=http				//放行http服務
      firewall-cmd --add-service=http --permanent       	//將此服務永遠放行
      firewall-cmd --list-all       				//查看firewall已放行服務列表
      
      firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.19.*.0/24" accept'                //放行來自本機同一個網段的封包
      firewall-cmd --add-rich-rule 'rule family="ipv4" source address="172.19.*.0/24" accept' --permanent    //將此規則永遠放行
      
      firewall-cmd --list-all    --permanent			//查看firewall永久放行服務列表
      
    4. 啟動內部服務
      1. 安裝名為 httpd 的軟體,同時設定啟動、開機啟動 httpd 這個服處等任務
      2. 撰寫 /var/www/html/index.html 的檔案,內容只須兩行,你的姓名與學號即可。
    5. yum install httpd		//安裝httpd
      systemctl start httpd		//啟動httpd
      systemctl enable httpd       	//預設啟動httpd
      
      vim /var/www/html/index.html
      
  3. (30%)簡易問答題: 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 一般所謂的防火牆,依據達成方式的不同,主要分為那兩種基本的防火牆?
    2. CentOS 7 預設提供那兩種『防火牆服務』呢?
    3. 承上,那達成該種防火牆服務的指令又個別為何呢?
    4. CentOS 7 防火牆使用 Netfilter ,該機制提供了哪三個主要的表格 (tables) 呢?其中上課用到的是那兩個?個別針對哪種主機來進行封包的過濾與重導向?
    5. 針對 Linux 本機的封包進出來說, Netfilter 主要提供的是那一個表格 (table) 的那兩個鏈 (chain) 來管理的?
    6. 那一個指令可以觀察 Netfilter 的預設政策、各鏈的流向與防火牆的規則順序?
    7. 承上,那一個檔案主要就是在紀錄這些設定的?
    8. 針對 ssh 來說,底下的錯誤要怎麼改善?寫下改善後的語法:
      iptables -A INPUT -s 192.168.0.0/16 --dport 22 -j ACCEPT
    9. 在 iptables 的動作中, REJECT 與 DROP 有什麼差別?
    10. 啟動核心的 IP 轉遞功能時,(1)需要修改哪個設定檔? (2)實際上變更的是那一個核心檔案的值?
    11. 所謂的 IP 分享器的 IP 偽裝功能,只要是修改那一個 Netfilter 的表格與鏈?
    12. 所謂的 port mapping 的功能,主要是修改那一個 Netfilter 的表格與鏈?
    13. 承上面兩題,哪個被稱為 SNAT 或 DNAT 呢?