SlideShare a Scribd company logo
1 of 67
Download to read offline
Linux 的防火牆設計
與應用
Netman ( netman@study-area.org )
講師簡介
姓名
陳思永 (Kenny Chen)
學歷
澳洲國立新南威爾斯州理工技術學院 ( 雪梨理工 ---SIT, NSW TAFE)
專長
– 系統管理: Linux Administration
– 各種 Internet/Intranet servers 的建置 , Network Security,
專長 Open Source solution 。
– 網路系統設計佈署及維護
– MIS 系統規劃整合與管理
專業認證
LPIC, RHCE, NCLP
陳思永 (Kenny Chen)
Linux 授課經驗
• 曾授課地點 : 
巨匠電腦高雄認證中心、巨匠電腦台南認證中心 
聯成電腦教育學苑 ( 台南 ) 
聚碩科技教育訓練中心 ( 高雄啟迪 ) 
奇科電腦 ( 台北 ) 
網虎國際集團 ( 高雄 )
• 曾授課內容 : 
LPIC / NCLP / RHCE 國際認證課程
IBM Linux
Linux Enterprise Security 
Xlinux 1.0 System & Network Administrator
主題大綱
1. 防火牆的工作原理
2. Linux 的防火牆版本
3. Iptables 程式介紹
4. Iptables 應用例析
5. 常見問題及解決方案
  防火牆的工作原理
Part I
所謂網路連線其實就是兩個端點的連線
 1. 防火牆的工作原理
連線兩端透過封包 (packet) 傳遞資料
 1. 防火牆的工作原理
●
封包基本由 header 與 payload 組成
●
Packet 透過封裝傳遞
 1. 防火牆的工作原理
不同協定之封包封裝
 1. 防火牆的工作原理
TCP 封包之 header 內容



 1. 防火牆的工作原理
IP 封包之 header 內容 

 1. 防火牆的工作原理
●
Socket 是連線兩端的封包起止站
●
Socket 由 Address 與 Port 組成
 1. 防火牆的工作原理
每一個封包都含有一對 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. 防火牆的工作原理
TCP 連線的建立方式 (three-way-handshake)
●
TCP header 之
bit 106-111
 1. 防火牆的工作原理
NAT 的工作原理
●
透過 socket 替換達成 routing
 1. 防火牆的工作原理
防火牆原理
透過檢查封包 header(or payload) 的內容來
決定封包是否能夠通過
 1. 防火牆的工作原理
防火牆常被部署在對內 ( 信任 ) 與對外
( 不信任 ) 網路之間的必經通道之上
 1. 防火牆的工作原理
DMZ 是防火牆部署中常見的設計
●
主要用來區隔堡壘主機,以降低入侵風險。
 1. 防火牆的工作原理
DMZ 之設計是多樣的
●
安全與成本及難度成正比、與便利成反比。
 1. 防火牆的工作原理
Internet 的連線常經過多重的防火牆過濾
 1. 防火牆的工作原理
Linux 的防火牆版本
Part II
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 的防火牆版本
* kernel 2.4/6.x 之 ipchains
●
ipchains 仍可編譯以模組方式載入
●
ipchains 不能與 iptables 同時載入
●
但沒提供 ipchains 可用的模組
結論:
盡量不要在 kernel 2.4/6.x 及以後版本使用
ipchains
2. Linux 的防火牆版本
Iptables 程式介紹
Part III
防火牆程式根據規則 (rule) 來處理封包
●
rule by rule
●
first match
●
policy
3. Iptables 程式介紹
防火牆規則收集於不同的鏈 (chain) 中
●
chain by chain
●
all through
3. Iptables 程式介紹
鏈存在於不同的表 (table) 中
●
different table for different job
●
table by table
3. Iptables 程式介紹
Iptables 內建三個 tables ( 及常用鏈 ) :
●
filter
INPUT
FORWARD
OUTPUT
●
nat
PREROUTING
POSTROUTING
OUTPUT
●
mangle
PREROUTING
OUTPUT
…
3. Iptables 程式介紹
Linux 系統對封包的 routing 處理
●
To local
●
To outside
3. Iptables 程式介紹
封包於 iptables 之穿行
●
When?
●
Where?
3. Iptables 程式介紹
封包於 iptables 之處理
●
Which table?
●
Which chain?
3. Iptables 程式介紹
一個非本機封包於 iptables 之處理
3. Iptables 程式介紹
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 程式介紹
常用 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 程式介紹
關於 -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 程式介紹
常用 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 程式介紹
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 程式介紹
Iptables 應用例析
Part IV
常見 Linux Firewall 應用:
單一 client
允許單向連外,集中在 filter INPUT 。
單一 server
允許本機連外及特定服務,集中在 filter INPUT 。
4. Iptables 應用例析
常見 Linux Firewall 應用 ( 續 ) :
Gateway
●
允許本機連外及遠端操控,集中在 filter INPUT 。
●
允許由內連外,集中在 filter FORWARD 。
●
允許由外連內之服務,集中在 filter FORWARD 。
●
需啟用 ip_forward 。
4. Iptables 應用例析
常見 Linux Firewall 應用 ( 續 ) :
NAT
●
允許本機連外及遠端操控,集中在 filter INPUT 。
●
允許由內連外,集中在 nat POSTROUTING 。
●
允許由外連內之服務,集中在 nat PREROUTING 。
●
需啟用 ip_forward 。
●
可省略 filter FORWARD ( 路由不通 ) 。
4. Iptables 應用例析
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 應用例析
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 應用例析
4.3 單一 gateway 主機 ( 可路由 ) 應用:
4. Iptables 應用例析
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 應用例析
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 應用例析
4.4 單一 nat 主機 ( 不可路由 ) 應用:
4. Iptables 應用例析
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 應用例析
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 應用例析
4.5 Transparent Proxy 應用:
●
免除 client 端設定
●
增加可控性
4. Iptables 應用例析
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 應用例析
常見問題及解決方案
Part V
5.1 auth 協定所導至的服務延
●
視服務程式需求而定
●
由 server 端發起
●
連至 client 端 tcp/113
* 解決方案
●
允許 auth 連線
-p tcp --dport 113 -j ACCEPT
●
拒絕 auth 連線
-p tcp --dport 113 -j REJECT
5. 常見問題及解決方案
5.2 ftp 服務連線無法建立資料通道
●
ftp 連線分兩個通道進行:
5. 常見問題及解決方案
5.2 ftp 服務連線無法建立資料通道
●
防火牆會擋掉由外之內的建立連線:
5. 常見問題及解決方案
5.2 ftp 服務連線無法建立資料通道
●
使用 passive mode 可穿越:
5. 常見問題及解決方案
5.2 ftp 服務連線無法建立資料通道
●
或搭配 ip_conntrack_ftp 模組亦可以解決:
5. 常見問題及解決方案
5.3 NAT 之下的 ftp 連線
●
NAT 只修改了 tcp/ip header ,並沒修改 ftp packet :
5. 常見問題及解決方案
5.3 NAT 之下的 ftp 連線
●
使用 ip_conntrack_ftp, ip_nat_ftp 及 --state RELATED
來解決:
5. 常見問題及解決方案
5.4 在同一 subnet 裡的 DNAT
●
Source Socket 沒被修改,及發生 ICMP host-redirect :
5. 常見問題及解決方案
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. 常見問題及解決方案
5.5 Subnet 太小不便切割
●
使用 proxy arp 降低浪費 :
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
5. 常見問題及解決方案
5.6 Transparent Firewall 的應用
●
減少 IP 浪費 & 簡化部署難度
●
提高防禦安全 ( 本身無 IP 可連接 )
5. 常見問題及解決方案
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. 常見問題及解決方案
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. 常見問題及解決方案
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. 常見問題及解決方案
謝謝﹗
Q & A

More Related Content

What's hot

Computer Network 1 TCP/IP
Computer Network 1 TCP/IPComputer Network 1 TCP/IP
Computer Network 1 TCP/IP
Felix Lin
 
第18讲 Hdlc和Ppp
第18讲 Hdlc和Ppp第18讲 Hdlc和Ppp
第18讲 Hdlc和Ppp
F.l. Yu
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
 
網路安全原理
網路安全原理網路安全原理
網路安全原理
ceed100043
 
第20讲 帧中继
第20讲 帧中继第20讲 帧中继
第20讲 帧中继
F.l. Yu
 
Blk md-bc04-b at指令集
Blk md-bc04-b at指令集Blk md-bc04-b at指令集
Blk md-bc04-b at指令集
Jan Hynneke
 
第19讲 Isdn
第19讲 Isdn第19讲 Isdn
第19讲 Isdn
F.l. Yu
 

What's hot (20)

嵌入式inux應用專題文件-智慧家庭系統
嵌入式inux應用專題文件-智慧家庭系統嵌入式inux應用專題文件-智慧家庭系統
嵌入式inux應用專題文件-智慧家庭系統
 
-Nginx book
 -Nginx book -Nginx book
-Nginx book
 
Cisco路由协议高度总结
Cisco路由协议高度总结Cisco路由协议高度总结
Cisco路由协议高度总结
 
Computer Network 1 TCP/IP
Computer Network 1 TCP/IPComputer Network 1 TCP/IP
Computer Network 1 TCP/IP
 
第18讲 Hdlc和Ppp
第18讲 Hdlc和Ppp第18讲 Hdlc和Ppp
第18讲 Hdlc和Ppp
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
 
Linux Network Monitoring
Linux Network MonitoringLinux Network Monitoring
Linux Network Monitoring
 
網路安全原理
網路安全原理網路安全原理
網路安全原理
 
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
 
20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大20170415- 智慧空調通訊系統實務_柯大
20170415- 智慧空調通訊系統實務_柯大
 
第20讲 帧中继
第20讲 帧中继第20讲 帧中继
第20讲 帧中继
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
 
Blk md-bc04-b at指令集
Blk md-bc04-b at指令集Blk md-bc04-b at指令集
Blk md-bc04-b at指令集
 
第19讲 Isdn
第19讲 Isdn第19讲 Isdn
第19讲 Isdn
 
Fortinet Fortigate 60D 中文安裝手冊 ( Ver 5.2.3)
Fortinet Fortigate 60D 中文安裝手冊 ( Ver 5.2.3)Fortinet Fortigate 60D 中文安裝手冊 ( Ver 5.2.3)
Fortinet Fortigate 60D 中文安裝手冊 ( Ver 5.2.3)
 
Snort分析评估
Snort分析评估Snort分析评估
Snort分析评估
 
Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯
 
Unix socket
Unix socketUnix socket
Unix socket
 
Linux system security
Linux system securityLinux system security
Linux system security
 
Linux bonding
Linux bondingLinux bonding
Linux bonding
 

Similar to Linux firewall

九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
heima911
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
colderboy17
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
Yiwei Ma
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
 
資策會網工班第八十期Cisco競賽第三組簡報
資策會網工班第八十期Cisco競賽第三組簡報資策會網工班第八十期Cisco競賽第三組簡報
資策會網工班第八十期Cisco競賽第三組簡報
d12hd12h
 
Deployment instruction tg3100 ig-cn
Deployment instruction tg3100 ig-cnDeployment instruction tg3100 ig-cn
Deployment instruction tg3100 ig-cn
ahnlabchina
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
Michael Zhang
 
Deployment instruction tg4100 f-ig_cn
Deployment instruction tg4100 f-ig_cnDeployment instruction tg4100 f-ig_cn
Deployment instruction tg4100 f-ig_cn
ahnlabchina
 
I pv6 windows 實做課程_0705
I pv6 windows 實做課程_0705I pv6 windows 實做課程_0705
I pv6 windows 實做課程_0705
宏義 張
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
Na Lee
 

Similar to Linux firewall (20)

探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
資策會網工班第八十期Cisco競賽第三組簡報
資策會網工班第八十期Cisco競賽第三組簡報資策會網工班第八十期Cisco競賽第三組簡報
資策會網工班第八十期Cisco競賽第三組簡報
 
Deployment instruction tg3100 ig-cn
Deployment instruction tg3100 ig-cnDeployment instruction tg3100 ig-cn
Deployment instruction tg3100 ig-cn
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 
金盾集訓 II
金盾集訓 II金盾集訓 II
金盾集訓 II
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Deployment instruction tg4100 f-ig_cn
Deployment instruction tg4100 f-ig_cnDeployment instruction tg4100 f-ig_cn
Deployment instruction tg4100 f-ig_cn
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815
 
LinuxGuide4F2E
LinuxGuide4F2ELinuxGuide4F2E
LinuxGuide4F2E
 
Linuxguide4f2e
Linuxguide4f2eLinuxguide4f2e
Linuxguide4f2e
 
I pv6 windows 實做課程_0705
I pv6 windows 實做課程_0705I pv6 windows 實做課程_0705
I pv6 windows 實做課程_0705
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 

More from Kenny (netman)

More from Kenny (netman) (20)

rpi_audio configuration steps
rpi_audio configuration stepsrpi_audio configuration steps
rpi_audio configuration steps
 
Rpi audio
Rpi audioRpi audio
Rpi audio
 
Importance of linux system fundamental in technical documentation reading
Importance of linux system fundamental in technical documentation readingImportance of linux system fundamental in technical documentation reading
Importance of linux system fundamental in technical documentation reading
 
Ha opensuse
Ha opensuseHa opensuse
Ha opensuse
 
Chap 19 web
Chap 19 webChap 19 web
Chap 19 web
 
Chap 18 net
Chap 18 netChap 18 net
Chap 18 net
 
Chap 17 advfs
Chap 17 advfsChap 17 advfs
Chap 17 advfs
 
About the Course
About the CourseAbout the Course
About the Course
 
Linux fundamental - Chap 16 System Rescue
Linux fundamental - Chap 16 System RescueLinux fundamental - Chap 16 System Rescue
Linux fundamental - Chap 16 System Rescue
 
Linux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job SchedulingLinux fundamental - Chap 15 Job Scheduling
Linux fundamental - Chap 15 Job Scheduling
 
Linux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell scriptLinux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell script
 
Linux fundamental - Chap 13 account management
Linux fundamental - Chap 13 account managementLinux fundamental - Chap 13 account management
Linux fundamental - Chap 13 account management
 
Linux fundamental - Chap 12 Hardware Management
Linux fundamental - Chap 12 Hardware ManagementLinux fundamental - Chap 12 Hardware Management
Linux fundamental - Chap 12 Hardware Management
 
Linux fundamental - Chap 11 boot
Linux fundamental - Chap 11 bootLinux fundamental - Chap 11 boot
Linux fundamental - Chap 11 boot
 
Linux fundamental - Chap 10 fs
Linux fundamental - Chap 10 fsLinux fundamental - Chap 10 fs
Linux fundamental - Chap 10 fs
 
Linux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkgLinux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkg
 
Linux fundamental - Chap 08 proc
Linux fundamental - Chap 08 procLinux fundamental - Chap 08 proc
Linux fundamental - Chap 08 proc
 
Linux fundamental - Chap 07 vi
Linux fundamental - Chap 07 viLinux fundamental - Chap 07 vi
Linux fundamental - Chap 07 vi
 
Linux fundamental - Chap 06 regx
Linux fundamental - Chap 06 regxLinux fundamental - Chap 06 regx
Linux fundamental - Chap 06 regx
 
Linux fundamental - Chap 05 filter
Linux fundamental - Chap 05 filterLinux fundamental - Chap 05 filter
Linux fundamental - Chap 05 filter
 

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
  • 4. 主題大綱 1. 防火牆的工作原理 2. Linux 的防火牆版本 3. Iptables 程式介紹 4. Iptables 應用例析 5. 常見問題及解決方案
  • 8. ● 封包基本由 header 與 payload 組成 ● Packet 透過封裝傳遞  1. 防火牆的工作原理
  • 10. TCP 封包之 header 內容     1. 防火牆的工作原理
  • 11. IP 封包之 header 內容    1. 防火牆的工作原理
  • 12. ● Socket 是連線兩端的封包起止站 ● Socket 由 Address 與 Port 組成  1. 防火牆的工作原理
  • 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. 防火牆的工作原理
  • 14. TCP 連線的建立方式 (three-way-handshake) ● TCP header 之 bit 106-111  1. 防火牆的工作原理
  • 15. NAT 的工作原理 ● 透過 socket 替換達成 routing  1. 防火牆的工作原理
  • 16. 防火牆原理 透過檢查封包 header(or payload) 的內容來 決定封包是否能夠通過  1. 防火牆的工作原理
  • 17. 防火牆常被部署在對內 ( 信任 ) 與對外 ( 不信任 ) 網路之間的必經通道之上  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 的防火牆版本
  • 25. 防火牆程式根據規則 (rule) 來處理封包 ● rule by rule ● first match ● policy 3. Iptables 程式介紹
  • 26. 防火牆規則收集於不同的鏈 (chain) 中 ● chain by chain ● all through 3. Iptables 程式介紹
  • 27. 鏈存在於不同的表 (table) 中 ● different table for different job ● table by table 3. Iptables 程式介紹
  • 28. Iptables 內建三個 tables ( 及常用鏈 ) : ● filter INPUT FORWARD OUTPUT ● nat PREROUTING POSTROUTING OUTPUT ● mangle PREROUTING OUTPUT … 3. Iptables 程式介紹
  • 29. Linux 系統對封包的 routing 處理 ● To local ● To outside 3. Iptables 程式介紹
  • 31. 封包於 iptables 之處理 ● Which table? ● Which chain? 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 應用例析
  • 44. 4.3 單一 gateway 主機 ( 可路由 ) 應用: 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 應用例析
  • 47. 4.4 單一 nat 主機 ( 不可路由 ) 應用: 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 應用例析
  • 50. 4.5 Transparent Proxy 應用: ● 免除 client 端設定 ● 增加可控性 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. 常見問題及解決方案
  • 54. 5.2 ftp 服務連線無法建立資料通道 ● ftp 連線分兩個通道進行: 5. 常見問題及解決方案
  • 56. 5.2 ftp 服務連線無法建立資料通道 ● 使用 passive mode 可穿越: 5. 常見問題及解決方案
  • 57. 5.2 ftp 服務連線無法建立資料通道 ● 或搭配 ip_conntrack_ftp 模組亦可以解決: 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. 常見問題及解決方案
  • 62. 5.5 Subnet 太小不便切割 ● 使用 proxy arp 降低浪費 : echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp 5. 常見問題及解決方案
  • 63. 5.6 Transparent Firewall 的應用 ● 減少 IP 浪費 & 簡化部署難度 ● 提高防禦安全 ( 本身無 IP 可連接 ) 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. 常見問題及解決方案