1. (70%)實作題:啟動 Server 作業硬碟 - unit10
    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. 實際設定好 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. 此功能在開機後依舊能夠順利啟動
    5. 基礎 Apache 架設
      1. WWW 啟動的埠口會同時啟動於 port 80 與 port 9999 這兩個
      2. 管理員的 email 請設定為 student@server.lanXX.example.dic
      3. 取消強制使用 UTF8 的語系設定
      4. 設定 index.html, welcome.html, default.html 作為你的首頁檔名
      5. 當瀏覽 http://localhost 時,會顯示你的學號與姓名
      6. 讓你的伺服器可以同時提供 port 80 與 port 9999 的網路連線 (防火牆功能思考)
    6. yum install httpd
      systemctl start httpd
      systemctl enable httpd
      
      vim /etc/httpd/conf/httpd.conf
      
      Listen 80
      Listen 9999		//新增
      
      <IfModule dir_module>
          DirectoryIndex index.html welcome.html default.html		//更改
      </IfModule>
      
      #AddDefaultCharset UTF-8		//註解
      
      vim /var/www/html/index.html
      
      學號 姓名
      
      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 -p tcp -m tcp --dport 9999 -j ACCEPT		<----- 新增此規則
      iptables -A INPUT -j REJECT
      
      iptables-save > /etc/sysconfig/iptables
      
      sh /root/firewall.sh
      
    7. 個人首頁的設定
      1. 請設定,預設建立新用戶時,該用戶的家目錄會存在一個名為 web 的目錄,且內含一個 index.html 的檔案,檔案內容填寫『 Personal web page 』即可。
      2. 當瀏覽器瀏覽 http://localhost/~username 時,會顯示 /home/username/web/index.html 的內容。
      3. 為了擔心個人用戶用爆系統容量,因此請設定好 /home 這個目錄的檔案系統得要支援磁碟容量配額 (quota) 的功能。 若 /home 並不存在獨立的 partition ,那你可能得要針對根目錄進行 quota 的設定 (雖然這不是個好建議!)。但是 Linux 核心預設不能讓根目錄掛載為支援 quota, 因此需要動點小手術。請參考 https://help.directadmin.com/item.php?id=557 來取得正確的 quota 支援。(註,我們只需要 userquota 即可, projectquota 可以不予理會)
      4. 建立一隻名為『 /root/webuser.sh 』的腳本,並建立一個名為 /root/webuser.txt 的檔案,/root/webuser.txt 的內容有點像這樣:
        alex
        dora
        hank
        
        而 /root/webuser.sh 的腳本使用 for, do, done 的迴圈功能,會針對上述 /root/webuser.txt 的檔案進行如下動作:
        • 使用預設方式建立用戶,且用戶的密碼與帳號相同。
        • 建立用戶後,會給予該用戶 soft/hard 分別為 400MB/500MB 的可用磁碟容量
        • 讓該用戶的家目錄權限設定為 711
        建置完畢後請執行一次該腳本,並使用 http://localhost/~alex 確認該帳號是存在的!
      5. 讓 alex, dora, hand 可以使用 ftp 上傳/下載資料到伺服器上,且這三個用戶必須是 chroot 的使用環境。
      6. 伺服器的防火牆必須要放行 FTP (注意 port 的放行以及 FTP 的相關模組設定與載入)
    8. mkdir /etc/skel/web
      
      vim /etc/skel/web/index.html
      
      Personal web page
      
      vim /etc/login.defs
      
      UMASK 022
      
      vim /etc/httpd/conf.d/userdir.conf
      
      <IfModule mod_userdir.c>
          UserDir web
      </IfModule>
      <Directory "/home/*/web">
          AllowOverride FileInfo AuthConfig Limit Indexes
          Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
          Require method GET POST OPTIONS
      </Directory>
      
      vim /etc/default/grub
      
      找到 GRUB_CMDLINE_LINUX
      在該行尾端加上 rootflags = uquota
      
      cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.orig
      grub2-mkconfig -o /boot/grub2/grub.cfg
      reboot
      
      vim /root/webuser.txt
      
      alex
      dora
      hank
      
      vim /root/webuser.sh
      
      #!/bin/bash
      for var in {1..3}
      do
      	user=$(sed -n ${var}p /root/webuser.txt)
      	useradd ${user}
      	echo ${user} | passwd --stdin ${user}
      	xfs_quota -x -c "limit -u bsoft=400M bhard=500M ${user}" /
      	chmod 711 /home/${user}
      done
      
      sh /root/webuser.sh
      
      yum install vsftpd
      systemctl start vsftpd
      systemctl enable vsftpd
      
      vim /etc/vsftpd/vsftpd.conf
      
      取消註解
      chroot_local_user=YES
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list
      新增
      allow_writeable_chroot=YES
      
      touch /etc/vsftpd/chroot_list
      systemctl restart vsftpd
      
      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 -p tcp -m tcp --dport 9999 -j ACCEPT
      iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT		<----- 新增此規則
      iptables -A INPUT -j REJECT
      
      iptables-save > /etc/sysconfig/iptables
      
      sh /root/firewall.sh
      
    9. 受保護目錄的建置
      1. 只有 127.0.0.0/8, 以及 Server 自己的所有 IPv4 的 IP 位址可以瀏覽 http://localhost/pro_one/ 這個目錄,且當成功瀏覽這個目錄時, 畫面會顯示『 This is protect one directory 』
      2. 當輸入 http://localhost/pro_two/ 這個目錄時,會提示需要輸入帳號密碼,當輸入帳號為 student 且密碼也是 student 時, 才會予以放行。
        • 請使用 .htaccess 的方式來處理這個題目
        • 假設密碼檔位於 /var/www/apache.pw 這個檔案內
        • 正確輸入帳密會顯示『 I am Protect two hehe 』的字樣。
    10. mkdir /var/www/html/pro_one
      mkdir /var/www/html/pro_two
      
      vim /var/www/html/pro_one/index.html
      
      This is protect one directory
      
      vim /var/www/html/pro_two/index.html
      
      I am Protect two hehe
      
      vim /etc/httpd/conf.d/"檔名自己取".conf
      
      <Directory "/var/www/html/pro_one">
          Options Indexes FollowSymLinks
          AllowOverride None
          Require ip 127.0.0.0/8 172.19.*.0/24 172.18.255.*
      </Directory>
      
      <Directory "/var/www/html/pro_two">
          Options Indexes FollowSymLinks
          AllowOverride AuthConfig
      </Directory>
      
      systemctl restart httpd
      
      cd /var/www/html/pro_two
      
      vim .htaccess
      
      AuthType	basic
      AuthName	"你要顯示到彈出式視窗的文字"
      AuthUserFile	/var/www/apache.pw
      require user 	student
      
      htpasswd -c /var/www/apache.pw student
      
  2. (10%)實作題:啟動 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. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行