| 防火牆(Firewall)簡介 |
| 1. 防火牆可作用在網路層/傳輸層(Network/Transport Layer)或應用層(Application Layer),網路層的防火牆處理速度較快,使用者感覺不到但容易破解,應用層的防火牆處理速度慢但可檢查的項目多,因此較不容易破解。 2. iptables 屬於網路層/傳輸層的防火牆,它將封包的處理分成三個tables, table中包含chains, chains 裡面包含 rules 和 policies。請參閱架構圖 3. 三個tables分別是 (1) nat:提供位址轉換(Network Address Translation)功能 (2) mangle:提供封包改寫(Mangling)功能 (3) filter:提供封包過濾(Filtering)功能 |
| 移除 ipchain 模組 |
| 1. lsmod | grep ipchains 檢查 ipchains 是否載入 kernel(因為RedHat目前預設安裝的防火牆仍是使用 ipchains) 2. rmmod ipchains 從 kernel 移除 ipchains 模組 3. service ipchains stop 停止 ipchains 的執行 4. rpm -e ipchains-1.3.10-13 移除 ipchains 套件的安裝 |
| 安裝 iptables 模組 |
| 1. rpm -Uvh iptables-1.2.5-3.i386.rpm 安裝 iptables 套件 2. modprobe ip_tables 將 iptables 模組載入 kernel 3. lsmod ip_tables 檢查 kernel 是否有 iptables 模組 |
| iptable 指令格式 |
| iptables [-t 表格名稱] 指令 條件 [目標|鏈] 1. 指令集 -N | 建立一個新的(自定)鏈 | -X | 刪除一個空的(自定)鏈 | -P | 改變一個內建鏈的原則 | -L | 列出一個鏈中的規則 | -F | 清除一個(內建)鏈中的所有規則 | -A | 在一個鏈的最後面新增( append ) 一條規則 | -I | 在鏈內某個位置插入( insert ) 一條新規則 | -R | 在鏈內某個位置替換( replace ) 一條規則 | -D | 在鏈內某個位置刪除( delete ) 一條規則 | | |
2 . 目標集 ACCEPT | 通過這個鏈檢驗,接受這個封包 | SNAT | 改變封包來源IP欄位的值(nat, POST) | DROP | 未通過這個鏈檢驗,立即丟棄這個封包 | DNAT | 改變封包目標IP欄位的值(nat, PRE,O) | QUEUE | 將封包重導至本機端的佇列 ( queue ) 程式 | MASQUERADE | 動態的根據路由,來修改 Source Socket(nat, POST) | RETURN | 通過這個鏈的檢驗,回到原來的鏈中 | REDIRECT | 重導封包至另外一個位址或連接埠 | TOS | 改變封包 TOS 欄位的值 | TTL | 改變封包 TTL 欄位的值 | REJECT | 未通過這個鏈檢驗,丟回錯誤封包作回應(filter,I,F,O) | | |
3. 條件 -i -o | 相關界面 | –sport | 來源埠口 | -p | 所屬協定(tcp, udp, icmp) | -d | 目的地(Address/SubnetMask) | -m state | 連線類型(ESTABLISHED, INVALID) | –dport | 目的地埠口 | –tcp-flags –icmp-type | 封包類型 | INPUT OUTPUT FORWARD | 封包於防火牆中的流向 | -s | 來源地(Address/SubnetMask) | -j | 跳至目標或自定鏈 |
在預設鏈中,規則(Rules)由第一條往下檢查,當在某一條規則滿足檢驗時(可能是拒絕或通行),往下的規則就不在檢驗。 在自定鏈中,規則(Rules)由第一條往下檢查,當在某一條規則滿足檢驗時(可能是拒絕或通行),往下的規則就不在檢驗,而跳回呼叫它的預設鏈,繼續往下檢驗。 |
| 設定使用 iptables |
| 1. 啟動 kernel 的 ip_routing 功能 更改 /etc/sysctl.conf設定檔,設定 net.ipv4.ip_forward = 1 或 執行 echo “1″ > /proc/sys/net/ipv4/ip_forward 2. 啟動 iptables 服務 service iptables [start | restart | status] 當啟動 iptables時,會讀入 /etc/sysconfig/iptables 的檔案內容,該檔案儲存之前對防火牆設定的內容,如此一來重開機時,原來的設定還繼續可用。在 Fedora Core 3 安裝完 iptables 後,預設沒有產生 /etc/sysconfig/iptables 檔案,所以要使用 iptables 需先產生它 1. iptables -L 2. iptables-save > /etc/sysconfig/iptables |
| iptables 相關指令 |
| 1. iptables-save [-t table] > ipt.txt:將 iptables 的所有設定,寫到 ipt.txt 檔案 2. iptables-restore [-n] < ipt.txt:清除 iptables 目前的所有設定,然後 ipt.txt 檔案來設定 iptables |
| 使用 nat table 來作 SNAT 或 MASQUERADE |
| 1. nat table 的封包流向圖 2. NAT 有動態 NAT及靜態 NAT,靜態 NAT又可分為 SNAT(Source NAT)及 DNAT(Destination NAT) 3. 如果對外IP是動態IP使用 MASQUERADE,如果是靜態IP使用 SNAT(比較有效率) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 對外IP | 1. 開啟瀏覽器執行http://Linux的IP:10000/,輸入帳號及密碼 2. 點選“網路”標籤 3. 點選“Linux Firewall”圖示(圖) 如果是第一次執行,則出現此圖,此時只要選擇“Do network address translation on external interface”,並勾選 eth0,再按“Setup Firewall”按鈕,如果不是第一次的話,繼續第四步 4. 在“Showing IPtable”欄位,點選 nat table 後,按下“Showing IPtable”按鈕 5. 在“Packets after routing (POSTROUTING) ”區域,按下“Add rule”按鈕(圖) 6. 在“Add rule”畫面,在“Action to take”欄位,勾選 Masquerade,在“Outgoing interface”欄位,點選 equals 及 eth0 ,按下“建立”按鈕(圖) |
|
| 使用 nat table 來作 DNAT |
| iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 4899 -j DNAT –to-destination 192.168.0.17 | 1. 開啟瀏覽器執行http://Linux的IP:10000/,輸入帳號及密碼 2. 點選“網路”標籤 3. 點選“Linux Firewall”圖示(圖) 4. 在“Showing IPtable”欄位,點選 nat table 後,按下“Showing IPtable”按鈕 5. 在“Packets before routing (PREROUTING) ”區域,按下“Add rule”按鈕(圖) 6. 在“Add rule”畫面,在“Action to take”欄位,勾選 Destination NAT ,在“IPs and ports for DNAT”欄位,輸入 192.168.0.17,在“Incoming interface”欄位,點選 equals 及 eth0, 在“Network protocol”欄位,點選 equals 及 tcp,在“Destination TCP or UDP port”欄位,點選 equals ,“ports”欄位輸入 4899 後,按下“建立”按鈕(圖) |
|
| 使用 filter table 來作阻擋 ICMP 封包 |
| filter table 的封包流向圖
iptables -t filter -A INPUT -i eth0 -p icmp -j DROP | 1. 開啟瀏覽器執行http://Linux的IP:10000/,輸入帳號及密碼 2. 點選“網路”標籤 3. 點選“Linux Firewall”圖示(圖) 4. 在“Showing IPtable”欄位,點選 filter table 後,按下“Showing IPtable”按鈕 5. 在“Incoming packets (INPUT) ”區域,按下“Add rule”按鈕(圖) 6. 在“Add rule”畫面,在“Action to take”欄位,勾選 Drop,在“Incoming interface”欄位,點選 equals 及 eth0 ,在“Network protocol”欄位,點選 equals 及 icmp 後 ,按下“建立”按鈕(圖) |
|
| 使用 iptable 作本機Transparent Proxy |
|
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128 vi /etc/squid/squid.conf 加入下列4行設定 httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on | 1. 開啟瀏覽器執行http://Linux的IP:10000/,輸入帳號及密碼 2. 點選“網路”標籤 3. 點選“Linux Firewall”圖示(圖) 4. 在“Showing IPtable”欄位,點選 filter table 後,按下“Showing IPtable”按鈕 5. 在“Incoming packets (INPUT) ”區域,按下“Add rule”按鈕(圖)
6. 在“Add rule”畫面,在“Action to take”欄位,勾選 REDIRECT,在“Incoming interface”欄位,點選
equals 及 eth1 ,在“Network protocol”欄位,點選 equals 及 tcp 後 ,按下“建立”按鈕(圖) |
|
| 使用 iptable 作遠端Transparent Proxy |
<!–
|
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 140.126.100.3:3128 | 1. 開啟瀏覽器執行http://Linux的IP:10000/,輸入帳號及密碼 2. 點選“網路”標籤 3. 點選“Linux Firewall”圖示(圖) 4. 在“Showing IPtable”欄位,點選 filter table 後,按下“Showing IPtable”按鈕 5. 在“Incoming packets (INPUT) ”區域,按下“Add rule”按鈕(圖) 6. 在“Add rule”畫面,在“Action to take”欄位,勾選 REDIRECT,在“Incoming interface”欄位,點選 equals 及 eth1 ,在“Network protocol”欄位,點選 equals 及 tcp 後 ,按下“建立”按鈕(圖) |
|
–>