More Related Content
Similar to Linux firewall (20)
More from Kenny (netman) (20)
Linux firewall
- 2. 講師簡介
姓名
陳思永 (Kenny Chen)
學歷
澳洲國立新南威爾斯州理工技術學院 ( 雪梨理工 ---SIT, NSW TAFE)
專長
– 系統管理: Linux Administration
– 各種 Internet/Intranet servers 的建置 , Network Security,
專長 Open Source solution 。
– 網路系統設計佈署及維護
– MIS 系統規劃整合與管理
專業認證
LPIC, RHCE, NCLP
- 3. 陳思永 (Kenny Chen)
Linux 授課經驗
• 曾授課地點 :
巨匠電腦高雄認證中心、巨匠電腦台南認證中心
聯成電腦教育學苑 ( 台南 )
聚碩科技教育訓練中心 ( 高雄啟迪 )
奇科電腦 ( 台北 )
網虎國際集團 ( 高雄 )
• 曾授課內容 :
LPIC / NCLP / RHCE 國際認證課程
IBM Linux
Linux Enterprise Security
Xlinux 1.0 System & Network Administrator
- 13. 每一個封包都含有一對 socket pair
●
Source Socket:
- Source Port (TCP Header bit 0-15)
- Source Address (IP Header bit 96-127)
●
Destination Socket:
- Destination Port (TCP Header bit 16-31)
- Destination Address (IP Header bit 128-159)
1. 防火牆的工作原理
- 22. Linux 的防火牆版本以 kernel 版本為別
- Kernel 2.0.x:
ipfwadm ( 搭配模組 ip_fw_*.o)
- Kernel 2.2.x:
ipchains ( 搭配模組 ip_masq_*.o)
- Kernel 2.4.x (2.6.x):
iptables ( 搭配模組 ip*.o, ip_nat_*.o,
ip_conntrack_*.o)
2. Linux 的防火牆版本
- 23. * kernel 2.4/6.x 之 ipchains
●
ipchains 仍可編譯以模組方式載入
●
ipchains 不能與 iptables 同時載入
●
但沒提供 ipchains 可用的模組
結論:
盡量不要在 kernel 2.4/6.x 及以後版本使用
ipchains
2. Linux 的防火牆版本
- 28. Iptables 內建三個 tables ( 及常用鏈 ) :
●
filter
INPUT
FORWARD
OUTPUT
●
nat
PREROUTING
POSTROUTING
OUTPUT
●
mangle
PREROUTING
OUTPUT
…
3. Iptables 程式介紹
- 33. iptables 命令格式:
iptables [-t table] -CMD CHAIN rule -j TARGET
常見 command :
●
列視規則: -L [CHAIN] [-n]
●
增加規則: -A CHAIN rule
●
插入規則: -I CHAIN [ln] rule
●
替換規則: -R CHAIN ln rule
●
刪除規則: -D CHAIN <ln | rule>
●
清空整鏈: -F [CHAIN]
●
設定原則: -P CHAIN <DROP | ACCEPT>
---------------------
●
建立自定鏈: -N C_CHAIN
●
刪除自定鏈: -X C_CHAIN
3. Iptables 程式介紹
- 34. 常用 iptables 規則內容:
-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: 規則內容越多,符合之封包越少。反之,則越多
3. Iptables 程式介紹
- 35. 關於 -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 。 )
…
3. Iptables 程式介紹
- 36. 常用 iptables 之 TARGET :
●
filter TARGET
ACCEPT: 允許封包通過當前的鏈
DROP: 拒絕封包通過當前的鏈
REJECT: 同 DROP ,但會送回 icmp 通知
●
nat TARGET
SNAT: 修改 source socket
DNAT: 修改 destination socket
MASQUERADE: 動態修改 source socket
●
others
REDIRECT: 將連線導至本機行程
RETURN: 結束自定鏈返回原鏈之下一規則
3. Iptables 程式介紹
- 37. iptables 命令行範例
●
拒絕新建連線進入本機:
iptables -t filter -A INPUT -m state --state NEW -j
DROP
●
允許從外部界面 (eth0) 連至本機之 web 連線:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
●
允許穿過本機之確認連線 ( 為內部發起之連線 ) :
iptables -A FORWARD -m state --state ESTABLISHED -j
ACCEPT
●
將內部 (192.168.1.x) 送至 Internet 的封包作偽裝:
iptables -t nat -A POSRTOUTING -o eth0 -s 192.168.1.0/24
--sport 1024:65535 -j MASQUERADE
3. Iptables 程式介紹
- 39. 常見 Linux Firewall 應用:
單一 client
允許單向連外,集中在 filter INPUT 。
單一 server
允許本機連外及特定服務,集中在 filter INPUT 。
4. Iptables 應用例析
- 40. 常見 Linux Firewall 應用 ( 續 ) :
Gateway
●
允許本機連外及遠端操控,集中在 filter INPUT 。
●
允許由內連外,集中在 filter FORWARD 。
●
允許由外連內之服務,集中在 filter FORWARD 。
●
需啟用 ip_forward 。
4. Iptables 應用例析
- 41. 常見 Linux Firewall 應用 ( 續 ) :
NAT
●
允許本機連外及遠端操控,集中在 filter INPUT 。
●
允許由內連外,集中在 nat POSTROUTING 。
●
允許由外連內之服務,集中在 nat PREROUTING 。
●
需啟用 ip_forward 。
●
可省略 filter FORWARD ( 路由不通 ) 。
4. Iptables 應用例析
- 42. 4.1 單一 client 主機規則範例:
# 清空規則
iptables -F
# 接受確認連線
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 接受 loopback 連線
iptables -A INPUT -i lo -j ACCEPT
# 除 ping 外,接受 ICMP 封包
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -j ACCEPT
# 其餘全部封殺
iptables -A INPUT -j DROP
4. Iptables 應用例析
- 43. 4.2 單一 server 主機 (web) 規則範例:
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
# 接受 www 之連線
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
4. Iptables 應用例析
- 45. 4.3 單一 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 -s 211.47.56.117 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
# 允許確認連線
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許內部連線
iptables -A FORWARD -m state --state NEW
-i eth1 -o eth0 -s 211.47.56.112/29 -j ACCEPT
4. Iptables 應用例析
- 46. 4.3 單一 gateway 主機 ( 可路由 ) 規則範例
( 續 ) :
# 允許 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
# 開放封包轉發
echo 1 > /proc/sys/net/ipv4/ip_forward
4. Iptables 應用例析
- 48. 4.4 單一 nat 主機 ( 不可路由 ) 規則範例:
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 -s 10.0.1.117 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
# 為內部連線作封包偽裝
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
4. Iptables 應用例析
- 49. 4.4 單一 nat 主機 ( 不可路由 ) 規則範例 ( 續 ) :
# 為 DNS 作 port-mapping
iptables -t nat -A PREROUTING -i eth0 -d 211.47.56.113
-p udp --dport 53 -j DNAT --to 10.0.1.114
# 為 WEB 作 port-mapping
iptables -t nat -A PREROUTING -i eth0 -d 211.47.56.113
-p tcp --dport 80 -j DNAT --to 10.0.1.115
# 為 SMTP 作 port-mapping
iptables -t nat -A PREROUTING -i eth0 -d 211.47.56.113
-p tcp --dport 25 -j DNAT --to 10.0.1.116
# 為 SSH 作 port-mapping
iptables -t nat -A PREROUTING -i eth0 -d 211.47.56.113
-p tcp --dport 22 -j DNAT --to 10.0.1.117
4. Iptables 應用例析
- 51. 4.5 Transparent Proxy 規則範例:
●
iptables 設定:
iptables -t nat -A PRETROUTING -i eth1 -p tcp --dport 80
-j REDIRECT --to-ports 3128
●
squid 設定 (squid.conf) :
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
NEW: … 3128 transparent
4. Iptables 應用例析
- 53. 5.1 auth 協定所導至的服務延
●
視服務程式需求而定
●
由 server 端發起
●
連至 client 端 tcp/113
* 解決方案
●
允許 auth 連線
-p tcp --dport 113 -j ACCEPT
●
拒絕 auth 連線
-p tcp --dport 113 -j REJECT
5. 常見問題及解決方案
- 58. 5.3 NAT 之下的 ftp 連線
●
NAT 只修改了 tcp/ip header ,並沒修改 ftp packet :
5. 常見問題及解決方案
- 59. 5.3 NAT 之下的 ftp 連線
●
使用 ip_conntrack_ftp, ip_nat_ftp 及 --state RELATED
來解決:
5. 常見問題及解決方案
- 60. 5.4 在同一 subnet 裡的 DNAT
●
Source Socket 沒被修改,及發生 ICMP host-redirect :
5. 常見問題及解決方案
- 61. 5.4 在同一 subnet 裡的 DNAT
●
同時對 Source Socket 作修改即可解決:
iptables -t nat -A POSTROUTING -d 10.1.2.4 -s 10.1.2.0/24 -j SNAT
--to 10.1.2.254
* 其他方法:
DNS
5. 常見問題及解決方案
- 64. 5.6 Transparent Firewall 的設定
●
編譯核心修補,設為 bridge ( 以 kernel 2.4.25 為例 ) :
cd /usr/src/linux-2.4.25
wget http://heanet.dl.sourceforge.net/sourceforge/ebtables/ebtables-brnf-5_vs_2.4.25.diff.gz
zcat ebtables-brnf-5_vs_2.4.25.diff.gz | patch -p1
●
將 802.1d Ethernet Bridging 與 Bridge: ebtables (NEW) 及其
子項目全選
●
重編 kernel ,並以之開機。
●
載入模組: modprobe bridge
5. 常見問題及解決方案
- 65. 5.6 Transparent Firewall 的設定 ( 續 ):
●
安裝 bridge-utils ( 以 rh9 為例 ) :
wget http://bridge.sourceforge.net/bridge-utils/bridge-
utils-0.9.6.tar.gz
tar zxvf bridge-utils-0.9.6.tar.gz
cp bridge-utils/bridge-utils.spec /usr/src/redhat/SPECS/
cp bridge-utils-0.9.6.tar.gz /usr/src/redhat/SOURCES/
rpmbuild -bb /usr/src/redhat/SPECS/bridge-utils.spec
rpm -ivh /usr/src/redhat/RPMS/i386/bridge-utils-*
*NEW: yum install bridge-utils
5. 常見問題及解決方案
- 66. 5.6 Transparent Firewall 的設定 ( 續 ):
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge eth1
ifconfig eth0 0.0.0.0 promisc
ifconfig eth1 0.0.0.0 promisc
echo “1” > /proc/sys/net/ipv4/ip_forward
5. 常見問題及解決方案