--- tags: 1101, lsa --- - Book mode https://hackmd.io/@ncnu-opensource/book > 下周期中考 # Week 12(2021/12/09) [TOC] # DMZ  - 所有網路都要經過firewall才能出去 - DMZ裡面不能連出去,但外網可以連進來 - DMZ 不能直接連到 student - 先 ping 看看能不能連線 - 外網連到firewall的port,透過firewall轉送連線到DMZ內的http service - 學校有外網、內網和防火牆,另外切一個區域叫DMZ > 實體DMZ : 南北韓中間的非戰區 - 到 DMZ 後即使攻擊成功,也不會危害到內網的東西 # 實作 :::info 需求 * firewall * 對外網卡 *1 (橋接介面卡, bridge): * wan * 對內網卡 *2 (僅限主機介面卡, Host-Only) * lan * dmz * http-service * 對內網卡 *1 (僅限主機介面卡, Host-Only) : lan * student * 對內網卡 *1 (僅限主機介面卡, Host-Only) : lan :::  ## DMZ<=>firewall<=>外網 - DMZ can out (為了安裝軟體) - **在firewall上:** 允許連線進到Dmz網卡的都可以轉至Wan網卡出去 ```terminal= sudo iptables -I FORWARD -i {dmz} -o {wan} -j ACCEPT ``` - **在http-service上:** 設置gateway ```terminal= sudo route add default gw {firewall IP} ```  - 封包轉送至指定 ip:port </br> - 在 firewall ```terminal= sudo iptables -t nat -A PREROUTING \ -p tcp --dport 8080 \ # 到我的8080port -i {wan} \ -j DNAT --to {http ip}:80 # 轉送去目的ip(DMZ)的80port ```  - 從 `{wan}` (網卡卡號) 傳送過來的封包 - `prerouting`: 在封包實際進入電腦之前就先處理封包目的地 - `DNAT`:轉送到 `{http IP}`的 80 port > 白話: 連到 `{wan}` 的 8080 ,都轉送到 `{http IP}:80` - 看剛剛設定的資料 (ps. 參數說明前面有提到) ```Bash= sudo iptables -nvL -t nat --line-number ``` - FORWARD ACCEPT(同意轉送) 去該台 80 port 的封包  - 同意轉送至`{http IP}:80`(destination) 且使用 tcp 的封包 ```terminal= sudo iptables -I FORWARD -d {http ip} -p tcp --dport 80 -j ACCEPT ``` ## DMZ<=>firewall<=>內網 - 同意從 {lan}(firewall 的內網網卡)到 {dmz}(DMZ 的網卡)來的封包 ```terminal= # 內網的 IP 要連到 DMZ sudo iptables -I FORWARD -i {lan} -o {dmz} -j ACCEPT # 任何人傳到 DMZ 前先將 IP 轉換成 內部 IP 到 DMZ 的 網卡? sudo iptables -t nat -A POSTROUTING -o {dmz} -j MASQUERADE ``` >`{lan}` 連內網的網卡 ></br> `{dmz}` 連到dmz的網卡 > MASQUERADE : 將內網IP轉成外網IP (IP 轉換)  - 封包轉送至指定 ip:port ```terminal= # 目的port 我(firewall)的8080,從 {lan}(內網網卡,在 firewall 上) , 轉送到 http 的 80 port sudo iptables -t nat -A PREROUTING \ -p tcp --dport 8080 \ -i {lan} \ -j DNAT --to {http ip}:80 ``` ```terminal= # 目的port 我(firewall)的8080,從 dmz(在firewall 上的) , 轉送到http 的 80 port sudo iptables -t nat -A PREROUTING \ -p tcp --dport 8080 \ -i {dmz} \ -j DNAT --to {http ip}:80 ``` :::info **花式連線** - ping (ICMP) - 透過 Internet 層發出 ICMP,並讓對方回傳 - 若是 Internet / Transport 層的問題就用 ping - wget & curl - 都當成 http 的 client,都是去做 http 的連線,跟chrome沒有太大的差別 - 測試跨全層(全面測試)有沒有錯誤時用curl - traceroute - 把路徑上的每個節點通通列出來 - `sudo apt install traceroute` - 指令 `traceroute <網址>` - 補充:如果查到最後斷掉,有可能是ICMP的問題,被對方擋了。 - mtr - 觀察每個節點 ::: - 檢查有沒有封包進出 : `tcpdump port <port 號>` - 怎麼讓公網的人能夠連進 DMZ 裡面的 SSH - 接受來自外界到我的 22 port - 別人是用 destination: FIREWALL:22 連過來,所以不能直接 forward 給 DMZ - 要怎麼把 destination: FIREWALL 改成 dest: DMZ網段 (不要用 MASQUEADE) :::info > 我會建議外面連進來的都不要下 MASQUERADE [name=BT] - 因為沒有 MASQUERADE 才可以知道連進來的 IP (被攻擊時就可以知道source IP) - 記得如果沒有 MASQUERADE 要設 gateway,不然回傳不回去(因為不會轉換IP,不同網段之間就無法傳遞) - 不設 MASQUERADE 的話,routing table 需要有相關設定(gateway),否則找不到傳送路線 9- 網路上的封包,是不知道中間到底01多少路途,直接交給預設最信任的人,交給他傳送 ::: :::info > 要做 MASQUEADE [name=BT] - 從**內網到外網**的時候要做 MASQUEADE(把內網 IP 變成自己的 public IP),否則對方server 可能會亂傳給別人的內網 - 封包就算收得到也會迷失在外網的網海中(別人家也有叫做192.168.....的host) ::: - 轉送功能 - 若要跨網段傳資料,就(firewall?)就需要有轉送功能 1. kernel TCP forward link要有開 2. routing table(如果沒有firewall也無法送到student) 3. TCP/IP有forward的相關設定 IP 10. ~ . ~ . ~ 私人網域 172. 192.168 244 :::danger - 希望大家 17:00 到 - 照理來說是考到 20:00 > 但可能到 00:00 ... :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up