# 計算機系統管理 SA HW5 2021 ###### tags: `NYCU SA` ## references > [參考](https://people.freebsd.org/~rodrigc/doc/data/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html) > [參考2](https://www.cyberciti.biz/faq/how-to-set-up-a-firewall-with-pf-on-freebsd-to-protect-a-web-server/) > [參考3(log)](https://www.openbsd.org/faq/pf/logging.html) > [疑似往年參考](https://yilianwu.io/posts/sa-nis-nfs-firewall-freebsd/) > [blacklistd reference](https://cryptomonkeys.com/2018/05/freebsd-blacklistd/) ## 題目 > [link](https://nasa.cs.nctu.edu.tw/sa/2021/slides/HW5.pdf) ## autostart wireguard 1. 執行`sudo crontab -e` 2. 新增這一行: `@reboot wg-quick up wg0` ## NFS ### NFS server 1. exports table: `sudo vim /etc/exports` ``` V4: / /vol/stu130 -maproot=nobody -network 10.113.0.130 -mask 255.255.255.255 /vol/public1 /vol/public2 -ro -maproot=nobody -network 10.113.0.0 -mask 255.255.255.0 ``` 2. 強制使用至少v4的nfs `sudo vim /etc/sysctl.conf` 新增這一行 `vfs.nfsd.server_min_nfsvers=4` 4. 編輯/etc/rc.conf,插入 ```python= nfs_server_enable="YES" nfs_server_flags="-u -t -n 10" rpcbind_enable="YES" nfsv4_server_enable="YES" # nfs version=4 nfsuserd_enable="YES" # nfs version=4 nfs_reserved_port_only="YES" # reserve port mountd_enable="YES" mountd_flags="-r -p 87" # bind port=87 ``` 5. 建立資料夾 ```bash= sudo mkdir /vol cd /vol sudo chmod o+w public1 public2 stu130 sudo chmod g+w public1 public2 stu130 ``` ### NFS client 1. 編輯/etc/rc.conf,插入 ```conf= nfs_client_enable="YES" nfsuserd_enable="YES" # nfs version=4 autofs_enable="YES" # nfs version=4 nfscbd_enable="YES" # nfs version=4 ``` 2. 修改 /etc/auto_master(把/net註解,加上最後一行) 將/net註解是因為等等要mount在他的子資料夾 ```conf= # $FreeBSD$ # # Automounter master map, see auto_master(5) for details. # #/net -hosts -nobrowse,nosuid,intr # When using the -media special map, make sure to edit devd.conf(5) # to move the call to "automount -c" out of the comments section. #/media -media -nosuid,noatime,autoro #/- -noauto /- /etc/auto.map -intr,nosuid,rw,nfsv4 ``` 3. 編輯/etc/auto.map: `sudo vim /etc/auto.map` ```conf= /net/data/stu130 -rw 10.113.254.130:/vol/stu130 /net/data/public1 -ro 10.113.254.130:/vol/public1 /net/data/public2 -ro 10.113.254.130:/vol/public2 ``` ## firewall ### enable pf 1. 編輯 `/etc/rc.conf` 新增下面這幾行 ```conf= pf_enable="YES" # Enable PF (load module if required) pf_rules="/etc/pf.conf" # rules definition file for pf pf_flags="" # additional flags for pfctl startup pflog_enable="YES" # start pflogd(8) pflog_logfile="/var/log/pflog" # where pflogd should store the logfile pflog_flags="" # additional flags for pflogd startup ``` :::info :bulb: **Hint:** 因為log是packet header,不是printable。可以使用 `sudo tcpdump -n -e -ttt -r /var/log/pflog` 讀log file。如果想即時查看log可執行 `tcpdump -n -e -ttt -i pflog0` 2. 參考 `/usr/share/examples/pf/*` 再編輯 `/etc/pf.conf` ```conf= block out log proto {icmp, icmp6} all pass out proto icmp from any to 10.113.0.254 pass in proto tcp from any to any port {80,443} ``` ### 自動block ssh 1. enable blacklistd >a. 在 `/etc/pf.conf`新增`anchor "blacklistd/*" in`這一行 >b. 編輯`/etc/blacklistd.conf`達到自動鎖SSH 1分鐘 > ```conf= ># $FreeBSD$ > # ># Blacklist rule ># adr/mask:port type proto owner name nfail disable >[local] >ssh stream * * * 3 1m >ftp stream * * * 3 24h >smtp stream * * * 3 24h >submission stream * * * 3 24h >#6161 stream tcp6 christos * 2 10m >* * * * * 3 60 > ># adr/mask:port type proto owner name nfail disable >[remote] >#129.168.0.0/16 * * * = * * >#6161 = = = =/24 = = >#* stream * * * 3 1m > ``` 2. 編輯/etc/rc.conf,插入 ```conf= blacklistd_enable="YES" blacklistd_flags="-r" ``` 3. 讓SSH有blacklistd: ```conf= sudo sysrc sshd_flags="-o UseBlacklist=yes" sudo service sshd restart ``` 4. iamgoodguy command解除block `sudo vim /usr/local/bin/iamgoodguy` ```script= #!/bin/sh pfctl -a blacklistd/22 -t port22 -T delete "$1" ``` ```script= sudo chmod u+x /usr/local/bin/iamgoodguy sudo chmod o+x /usr/local/bin/iamgoodguy sudo chmod g+x /usr/local/bin/iamgoodguy ``` 5. `sudo reboot` :arrow_right: 套用`/etc/rc.conf` ## 使用vscode 編輯FreeBSD的檔案 ### linux 1. 安裝sshfs `sudo apt install sshfs` 2. mkdir freebsd 3. mount freebsd `sshfs -p [SSH_port] [freeBSD_USER]@[freeBSD_IP]:[freeBSD_dir]` EX: `sshfs -p 12345 yourname@localhost:/` 這樣會把freeBSD的'/'mount到linux的freebsd資料夾 freeBSD的ip,port已經透過前面virtualbox NAT到localhost, port=12345 4. code freebsd ### windows 1. 開啟WSL的terminal 2. 安裝sshfs `sudo apt install sshfs` 3. mkdir freebsd 4. 取得windows IP `awk 'NR==4{print $2}' /etc/resolv.conf` 5. mount freebsd `sshfs -p [SSH_port] [freeBSD_USER]@[windows_IP]:[f5reeBSD_dir]` EX: `sshfs -p 12345 yourname@172.24.112.1:/` 這樣會把freeBSD的'/'mount到wsl的freebsd資料夾 freeBSD的ip,port已經透過前面virtualbox NAT到windows IP, port=12345 4. code freebsd