Linux 防火牆簡介 防火牆的工作原理 1 2 防火牆優點 : 設定較為簡單 能阻隔多數不法入侵 防火牆缺點 : 無法防禦內部攻擊 針對規則運作可能產生問題 防火牆 防火牆的工作原理 防火牆常被部署在對內 ( 信任 ) 與對外 ( 不信任 ) 網路之間的必經通道之上 連線兩端透過封包傳遞資料 3 4 連線兩端透過封包傳遞資料
各種防護機制於 OSI 七層示意圖 防火牆的工作原理 不同協定之封包封裝 防毒軟體 :5 層 ~7 層 入侵偵測系統等 :3 層 5 層 防火牆 :3 層 ~7 層 5 6 TCP 封包之 header 內容 IP 封包之 header 內容 7 8
防火牆的內部 單一主機的防火牆 AP Service started success Service active Firewall pass Routing OS Sever Sever AP Internet OS Internal Internet 9 10 Iptables 程式介紹 http://www.netfilter.org/index.html 防火牆程式根據規則 (rule) 來處理封包 rule by rule first match policy IPTables 11 12
Chain 工作流程 IP packet Rule 1 Action 1 Iptables 簡介 不同的鏈存在於不同的表 (table) 中 different table for different job table by table Rule 2 Action 2 Rule 10 Action 10 預設動作 (Policy) Action: Accept Deny Drop 13 14 Iptables 簡介 Iptables 內建三個 tables ( 及常用鏈 ): filter INPUT FORWARD OUTPUT nat PREROUTING POSTROUTING OUTPUT mangle PREROUTING OUTPUT Iptables 工作原理 Linux 系統可能處理的封包 From outside From local Input Output 15 16
Iptables 工作原理 Linux 系統對封包的 routing 處理 To local To outside Iptables 工作原理 封包於 iptables 之穿行 When? Where? 17 18 Iptables 程式介紹 一個非本機封包於 iptables 之處理 http://www.netfilter.org/index.html Firewall GUI 19 20
21 22 /etc/init.d/iptables stop /etc/init.d/iptables start 檢查 : # iptables L # /etc/init.d/iptables status 啟動 iptables /sbin/iptables more /etc/sysconfig/iptables http://www.netfilter.org/index.html Iptables 指令 stopped [root@nivek ~]# /etc/init.d/iptables status 表格 :filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited started [root@nivek ~]# /etc/init.d/iptables status Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 23 Chain OUTPUT (policy ACCEPT) num target prot opt source destination 24
iptables -L -v -n Chain INPUT (policy DROP 280 packets, 32685 bytes) pkts bytes target prot opt in out source destination 3300 136K ACCEPT tcp -- eth1 * 192.168.56.1 192.168.56.2 tcp dpt:22 140 51297 LOG all -- eth0 * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 378K 46M LOG all -- eth1 * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 140 10220 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 304 35676 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 4435 1275K LOG all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 4717 882K LOG all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 13 624 ACCEPT tcp -- eth0 eth1 0.0.0.0/0 192.168.56.1 tcp dpt:22 state NEW 4379 1214K ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 4609 877K ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 9 396 ACCEPT tcp -- eth1 eth0 0.0.0.0/0 10.10.90.10 tcp dpt:22 state NEW 40 1832 ACCEPT tcp -- eth0 eth1 0.0.0.0/0 192.168.56.10 tcp dpt:22 state NEW Chain OUTPUT (policy DROP 7 packets, 588 bytes) pkts bytes target prot opt in out source destination 5687 6275K ACCEPT tcp -- * eth1 192.168.56.2 192.168.56.1 tcp spt:22 102 48836 LOG all -- * eth4 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 78904 8127K LOG all -- * eth1 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 140 10220 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 參數 : -t : 後面接 table, 例如 nat 或 filter, 若省略此項, 使用預設的 filter -L : 列出目前的 table 的規則 -n : 不進行 IP 與 HOSTNAME 的反查, 顯示訊息的速度會快很多 -v : 列出更多的資訊, 包括通過該規則的封包總位元數 相關的網路介面等 25 清除規則 /sbin/iptables [-FXZ] -F : 清除所有的已訂定的規則 -X : 殺掉所有使用者建立的 tables -Z : 將所有 tables 的計數與流量統計歸零 example: /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z 26 Iptables 語法 語法 : iptables [-t Table] -CMD[Chain] [ 比對規則 ] [ 處理方式 ] 範例 : iptables t filter AINPUT o eth1 s 192.168.1.0/24 j Drop Iptables 語法 iptables 命令格式 : iptables [-t Table] -CMD[Chain][ 比對規則 ] [ 處理方式 ] 常見 command: 檢視規則 :-L : [CHAIN][-n] 增加規則 :-A : CHAINrule 插入規則 :-I : CHAIN[ln] rule 替換規則 :-R : CHAINln rule 刪除規則 :-D : CHAIN <ln rule> 清空整鏈 :-F : [CHAIN] 設定原則 :-P : CHAIN<DROP ACCEPT> 27 28
Iptables 指令 iptables 命令格式 : iptables[-t Table] -CMD [Chain][ 比對規則 ][ 處理方式 ] Tables 類型 --table filter 或 -t filter 是預設的 table --table nat 或 -t nat 進行一對一 一對多 多對多網址轉譯工作 --table mangle 或 -t mangle 特殊的封包的路由旗標有關動作延伸名稱說明 TTL 修改 Time-To-Live 資訊 MARK 允許在封包中的 mark 欄位指定一個值 TOS 支援 IP 表頭 TOS 欄位值的設定 29 Iptables 指令 語法 : iptables [-t Table] -CMD [Chain][ 比對規則 ] [ 處理方式 ] 比對規則 : -i interface(only in PREROUTING, INPUT, FORWARD) -o interface(only in POSTROUING, OUTPUT, FORWARD) -s src.addr(can be ip, net/mask, hostname) -d dest.addr(can be ip, net/mask, hostname) -p proto(can be TCP, UDP, ICMP, ALL) --sport src:port(only with -p TCP & -p UDP, can be port, port:range) --dport dest:port(only with -p TCP & -p UDP, can be port, port:range) --icmp-type(only with -p ICMP, can be type, type/error_code) -j TARGET(depends on table & CHAIN, can be ACCEPT, DROP, SNAT, DNAT, MASQUERADE, REDIRECT, RETURN etc. ) * tips: 規則內容越多, 符合之封包越少 反之, 則越多 30 Iptables 指令 Iptables 指令 比對規則 :-m(match) 之應用 : -m state --state <STATE> NEW ( 新建連線 ) ESTABLISHED ( 已成功建立之連線 ) RELATED ( 新建連線, 但由已建立連線所引發 ) INVALID ( 非法連線 ) UNKOWN ( 不明連線 ) -m mac --mac-source <MAC> ( 比對封包的來源 MAC 位址, 僅限 local subnet ) -m limit --limit <nu/unit> [--limit-burst <burst>] ( 比對每一時間單位最大封包數, 及觸發限制的數量 ) -m owner --uid-owner <uid> ( 比對本機使用者 id ) 31 語法 : iptables [-t 作用的 Table] [ 處理 Chain 的方式 ] [ 比對規則 ] [ 處理方式 ] 常用 iptables 之 [ 處理方式 ](TARGET): filter TARGET ACCEPT: 允許封包通過當前的鏈 DROP: 拒絕封包通過當前的鏈 REJECT: 同 DROP, 但會送回 icmp 通知 nat TARGET SNAT: 修改 source socket DNAT: 修改 destination socket MASQUERADE: 動態修改 source socket 32
定義政策 ( Policy ) http://www.netfilter.org/index.html Iptables 範例 /sbin/iptables [-t tables] [-P] [INPUT,OUTPUT,FORWARD PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP] 參數說明 : -t :table 的名稱例如 nat, filter -P : 定義政策 ( Policy ) INPUT : 封包為輸入主機的方向 OUTPUT : 封包為輸出主機的方向 FORWARD: 封包為不進入主機而向外再傳輸出去的方向 PREROUTING : 在進入路由之前進行的工作 OUTPUT : 封包為輸出主機的方向 POSTROUTING: 在進入路由之後進行的工作 33 34 Example /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -t nat -P PREROUTING ACCEPT /sbin/iptables -t nat -P OUTPUT ACCEPT /sbin/iptables -t nat -P POSTROUTING ACCEPT 35 Iptables Rules Order # 清空規則 iptables -F # 拒絕 ICMP 封包, 接受 ping 封包, iptables-a INPUT -p icmp-j DROP iptables-a INPUT -p icmp --icmp-type 8 -j ACCEPT C:\>ping 192.168.0.1 # 清空規則 iptables-f # 拒絕 ICMP 封包, 接受 ping 封包, iptables-a INPUT -p icmp--icmp-type 8 -j ACCEPT iptables-a INPUT -p icmp-j DROP C:\>ping 192.168.0.1 36
Iptables 應用例析 # 清空規則 iptables -F # 不允许 192.168.0.1 进入防火墙 ipchains-a input -j DENY -s 192.168.0.1 # 接受 loopback 連線 iptables -A INPUT -i lo -j ACCEPT # 拒絕 ICMP 封包, 接受 ping 封包, iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -j DROP # 其餘全部封殺 iptables -A INPUT -j DROP 37 常見 Linux Firewall 應用 常見 Linux Firewall 應用 : 單一 client 允許單向連外, 集中在 filter INPUT 拒絕新建連線進入本機 : iptables-t filter -A INPUT -m state --state NEW -j DROP 單一 server 允許本機連外及特定服務, 集中在 filter INPUT 允許從外部界面 (eth0) 連至本機之 web 連線 : iptables-a INPUT -i eth0 -p tcp--dport80 -j ACCEPT 38 Allow services /sbin/iptables -A INPUT -p TCP --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p TCP --dport 25 -j ACCEPT /sbin/iptables -A INPUT -p UDP --dport 53 -j ACCEPT /sbin/iptables -A INPUT -p TCP --dport 53 -j ACCEPT /sbin/iptables -A INPUT -p TCP --dport 80 -j ACCEPT /sbin/iptables -A INPUT -p TCP --dport 110 -j ACCEPT Iptables 應用 單一 gateway 主機 ( 可路由 ) 應用 : eth1 eth0 39 40
單一 gateway 規則範例 iptables-f iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT # 允許信任操作主機連線 iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables-a INPUT -i eth0 -s 211.47.1.111-p tcp--dport22 -j ACCEPT # 其餘拒絕 iptables-a INPUT -j DROP 允許服務連線 # 允許確認連線 iptables-a FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許 DNS 服務連線 iptables -A FORWARD -p udp --dport 53 -d 211.47.56.114 -j ACCEPT # 允許 WEB 服務連線 iptables -A FORWARD -p tcp --dport 80 -d 211.47.56.115 -j ACCEPT # 允許 SMTP 服務連線 iptables -A FORWARD -p tcp --dport 25 -d 211.47.56.116 -j ACCEPT # 允許 SSH 服務連線 iptables -A FORWARD -p tcp --dport 22 -d 211.47.56.117 -j ACCEPT # 其餘拒絕 iptables -A FORWARD -j DROP 41 42 /usr/sbin/tcpd 進行 TCP 的檢驗工作 TCP_Wrappers 檢驗流程設定檔 < 一設定完畢立刻就生效 > /etc/hosts /etc/hosts.allow /etc/hosts.deny 語法 < 服務名稱 > : <IP/network> : <action> network 使用 192.168.0.0/255.255.255.0 Network 不可使用 192.168.0.0/24 43 TCP_Wrappers Example /etc/hosts.allow in.telnetd: 192.168.1.2, 192.168.1.10, 192.168.1.20 in.ftpd: 192.168.1.2, 192.168.1.10, 102.168.1.20 sshd: 192.168.1.0/255.255.255.0 /etc/hosts.deny in.telnetd: ALL in.ftpd: ALL sshd: ALL 44
Reference 謝謝! Linux 防火牆與 NAT 主機 http://linux.vbird.org/linux_server/0250simple_firewall.php Linux 2.4 NAT HOWTO http://www.netfilter.org/documentation/howto/nat- HOWTO.html Linux 防火牆入門相關網站 http://linux.tnc.edu.tw/techdoc/firewall/ref-url.html Red Hat Enterprise Linux 4 安全性設定手冊 http://web.mit.edu/rhel-doc/4/rh-docs/rhel-sg-zh_tw- 4/index.html Q & A 45 46