1. (60%)實作題:啟動 Server 作業硬碟 - unit06
    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. 針對 sshd 服務的相關設定項目:
      1. 由於某些緣故,這個系統的 sshd 必須要同時開啟 port 22 以及 port 3131,且開機完畢就啟動這兩個埠口
      2. 承上,針對 port 3131 的防火牆設定中:
        • 除了兩段區網需要放行之外 (eth0 與 team0 的所在網域)
        • 還需要針對 10.0.0.0/8 放行
        • 但是 10.10.10.0/24 這個區段必須要拒絕使用 port 3131
      3. 建立三個帳號,帳號名稱分別為 localuser1, localuser2, localuser3,三個帳號均加入 nosshgrp 次要群組支援, 這三個帳號的密碼均為 123hehe。此外,這三個帳號可以使用本機 tty1~tty6 登入系統取得 bash 界面,但是不能使用 ssh 遠端登入!
      4. sshd 這個服務拒絕直接以 root 的身份登入系統。
    6. yum install setroubleshoot-*
      vim /etc/ssh/sshd_config
      取消註解 #Port 22
      新增Port 3131
      
      semanage port -a -t ssh_port_t -p tcp 3131
      systemctl restart sshd
      
      netstat -tlunp		//檢查是否啟動
      
      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 -s 10.10.10.0/24 -p tcp -m tcp --dport 3131 -j REJECT
      iptables -A INPUT -s 172.18.255.0/24 -p tcp -m tcp --dport 3131 -j ACCEPT	//針對 port 3131 放行
      iptables -A INPUT -s 172.19.*.0/24 -p tcp -m tcp --dport 3131 -j ACCEPT
      iptables -A INPUT -s 10.0.0.0/8 -p tcp -m tcp --dport 3131 -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
      
      iptables-save > /etc/sysconfig/iptables
      
      sh /root/firewall.sh
      
      groupadd nosshgrp
      useradd -G nosshgrp localuser1
      useradd -G nosshgrp localuser2
      useradd -G nosshgrp localuser3
      echo 123hehe | passwd --stdin localuser1
      echo 123hehe | passwd --stdin localuser2
      echo 123hehe | passwd --stdin localuser3
      vim /etc/ssh/sshd_config
      最底下新增 DenyGroups nosshgrp
      
      vim /etc/ssh/sshd_config
      取消註解 #PermitRootLogin yes
      改成 PermitRootLogin no
      
      systemctl restart sshd
      
    7. 針對異地備份的功能設置
      1. 在 server 上面寫一隻名為 /root/bin/backup.sh 的腳本,這個腳本會進行:
        • 以 rsync 透過 ssh 通訊協定,將 Server 上的 /etc, /home, /root, /var/spool/mail 等目錄備份到 client 端的 /backups/ 裡面去
        • 必須要在 Server 上面以 root 的身份進行這個備份的動作,而且備份到 client 時,也是以 root 的身份登入到 client 上面。
        • 進行 ssh 協定時,需要使用 arcfour 的加密機制,這是為了避免 client 機器沒有支援 AES 的緣故。
      2. 上述腳本在運作中,不需要輸入密碼。
      3. 該腳本每日凌晨 3 點進行一次。
    8. mkdir /root/bin
      vim /root/bin/backup.sh
      chmod 755 /root/bin/backup.sh
      yum install rsync 
      
      #!/bin/bash
      
      rsync -av -e "ssh -c arcfour" /etc /home /root /var/spool/mail root@172.19.*.1:/backups/
      
      ssh-keygen
      ll ~/.ssh
      ssh-copy-id -i ~/.ssh/id_rsa root@172.19.*.1
      
      vim /etc/crontab
      新增 0 3 * * * root sh /root/bin/backup.sh
      
    9. 針對圖形界面 VNC 服務的啟動
      1. Server 為了圖形界面 VNC,請額外安裝 gnome-session, gnome-classic-session, gnome-terminal 等軟體
      2. 使用 student 的身份建立好 VNC 的服務,且服務密碼為 mystudent,埠口開在 5907 上面。
      3. 在 5901 ~ 5910 這一連續的埠口可以針對 172.30.0.0/16 這一段網域放行。
      4. 每次系統開機都會主動啟動 port 5907 這一段 VNC 服務。
    10. yum install tigervnc-server
      yum install gnome-session
      yum install gnome-classic-session
      yum install gnome-terminal
      
      su - student
      vncserver :7
      password: mystudent
      
      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 -s 10.10.10.0/24 -p tcp -m tcp --dport 3131 -j REJECT
      iptables -A INPUT -s 172.18.255.0/24 -p tcp -m tcp --dport 3131 -j ACCEPT
      iptables -A INPUT -s 172.19.*.0/24 -p tcp -m tcp --dport 3131 -j ACCEPT
      iptables -A INPUT -s 10.0.0.0/8 -p tcp -m tcp --dport 3131 -j ACCEPT
      iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      iptables -A INPUT -s 172.30.0.0/16 -p tcp -m tcp --dport 5901:5910 -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
      
      iptables-save > /etc/sysconfig/iptables
      
      sh /root/firewall.sh
      
      vim /etc/systemd/system/vncserver@.service
      
      systemctl daemon-reload
      systemctl enable vncserver@:7.service
      systemctl status vncserver@:7.service
      
  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. 使用特別的設定方式來處理無法使用 root 登入卻需要 root 權限的行為
      1. 在 Server 上面建立一個名為 admin 的帳號,該帳號的密碼請設定為 345haha。這個帳號使用 sudo 時,不需要輸入密碼即可放行。
      2. 在 Client 上面建立一隻名為 /home/student/bin/getroot.sh 的腳本,腳本的基本內容如下(請修改 ip 為正確的 server IP):
        #!/bin/bash
        
        ip="Your server IP"
        ssh -o StrictHostKeyChecking=no admin@${ip} "LANG=en_US; sudo sh -c \"
        	ls -l /root;
        	whoami
        	\"
        "
        
      3. 這隻腳本可以讓 student 執行,且 student 執行時,無須輸入任何密碼就可以取得 Server 的相關 root 權限資料。
    4. #Server端
      
      useradd admin
      echo 345haha | passwd --stdin admin
      
      vim /etc/sudoers
      在 root ALL=(ALL) ALL 下新增
      admin ALL=NOPASSWD:ALL
      
      #Client端
      
      vim /home/student/bin/getroot.sh
      chown student /home/student/bin/getroot.sh
      chmod 744 /home/student/bin/getroot.sh
      ssh-keygen
      ll ~/.ssh
      ssh-copy-id -i ~/.ssh/id_rsa admin@172.19.*.254