More Related Content Similar to Linux system security (20) More from Kenny (netman) (20) Linux system security2. •安全簡介
•系統安全稽查
•PAM 安全設定
•Super Daemon (xinetd)
•TCP Wrapper (tcpd)
•Sudo 配置
•SSH 安全連線
•防火牆設定
15. 安全重點所在
– 系統安全機制
外圍防火牆
DMZ+IDS
內部防火牆
本機防火牆
xinetd
tcpd
PAM
Daemon ACL
System
16. 安全重點所在
– 單點過濾
– 全部通過
– 逐層把關
– 縱深防禦
外圍防火牆
DMZ+IDS
內部防火牆
本機防火牆
xinetd
tcpd
PAM
Daemon ACL
System
20. 安全重點所在
- 是否需要開放連線?
- 開放給哪些對象?
- 所開放的服務是否安全?
- 服務行程的存取範圍有多大?
- 一旦行程被破解,危害程度如何?
- 系統是否能及時偵測入侵行為?
- 系統是否有足夠機制抵禦入侵?
- 是否有良好的災後復原策略?
- 如何避免問題的再次發生?
26. 系統負載查詢
•資訊分析:
–系統時間
–開機時間
–登入人數
–系統負載
• 過去 1、5、15 分鐘平均負載
• 提交工作剛好被CPU接收為 1
• 提交工作超過CPU接收大於 1
• 提交工作低於CPU接收小於 1
28. 系統負載查詢
•資訊分析:
–uptime 命令結果
–行程統計
–CPU分配
–記憶體分配
–SWAP記憶體分配
–行程排行榜
• PID
• USER
• NI
• %CPU
• %MEM
• COMMAND
29. 系統負載查詢
•命令操作:
–預設 3 秒更新一次,按 Space 可以馬上更新
–預設以%CPU排列,按F可以選擇其他欄位
–可用 k 傳送信號
–可用 r 調整 NI
–更多操作說明可按 h
–離開按 q
34. 系統負載查詢
•sar 命令
–必須先由 root 執行如下命令:
cp /etc/sysstat/sysstat.cron /etc/cron.d/
43. 網路連線稽查
•資訊分析:
–本機 socket
–遠端 socket
–連線狀態
• LISTEN:本機服務
• ESTABLISHED:已建立連線
• TIME_WAIT:即將關閉連線
–行程
56. PAM運作方式
•PAM 全稱:
–Pluggable Authentication Modules
•除了做身份驗證,還有很多安全控制模組
•需要身份驗證的程式,可自行開發模組
•也可以集中交由 PAM 來進行
•只要支援 PAM 的模組,都可給程式共享
59. 時間限制
•PAM 模組名稱:
–pam_time.so
•模組功能:
–限制服務僅在指定日期與時間或終端上提供
–可針對個別使用者進行限制:
• 名稱
• 時間
• 星期
67. 登錄限制
•PAM 模組名稱:
–pam_tally.so
•模組功能:
–紀錄失敗登錄的次數,若成功登錄則歸零
–可供 faillog 工具來限制登錄
68. 登錄限制
•設定語法:
pam_tally.so [options]
•常見選項:
onerr=[fail|succeed]
file=/path/to/counter
magic_root
per_user
•Example:
auth required pam_tally.so per_user
70. 登錄限制
•PAM 模組名稱:
–pam_limit.so
•模組功能:
–設定使用者可用的資源極限
–其中 maxlogins 可限制使用者最高登錄次數
77. xinetd 的功能
•因此,xinetd 可視為後端服務程式的調度
員,提供更彈性的資源負載:
–更佳的系統效能
–更安全的系統服務
–更穩定的系統運行
•然而,長時間頻繁存取的服務則不適用
xinetd 的方式來啟動
87. 來源限制
•來源格式:
–單一 IP :n.n.n.n
–多個 IP :n.n.n.{n,n,n,…}
–一個網路:n.n.n.0 或 n.n.n.n/mask
–單一主機:xxx.xxx.com
–單一 Domain:.xxx.com
94. 連線限制
•設定限制項目:
–instances
• 同一時間內單一服務所能承載的最多連線數目
–cps
• 第一個參數為一秒內只能所能承載的新建連線數目
• 第二個參數為新連線數目超過第一參數時,暫停多
少秒停止接受新建連線(不影響現有連線)
107. tcpd 的使用時機
•藉由 tcpd 的過慮,可為系統提供更完整的
安全防護:
–集中配置
–集中記錄(syslog)
–服務程序需支援 libwrap.so
110. 設定檔格式
• tcpd 參考的設定檔有兩個:
–/etc/hosts.allow
定義允許通過的連線
–/etc/hosts.deny
定義拒絕通過的連線
111. 設定檔格式
• 設定檔的參考順序:
–先參考 hosts.allow 再參考 hosts.deny
–規則參考以 first-match-first 為原則
• 符合 hosts.allow 規則就接受連線
• 不符合 hosts.allow 但符合 hosts.deny 則拒絕
• 若皆不符合預設為接受連線
114. 設定檔格式
• 規則格式:
daemon_list : client_list [: options]
–daemon_list 格式:
• 運行服務的程式名稱,如 sshd, in.telnetd
• wildcard : ALL
–client_list 格式:
• 單一 IP : 10.0.0.1
• 一個 network : 10.0.0.0/24, 10.0.0.
• 單一主機: www.example.com
• 一個 domain : .example.com
• WILDCARD
115. 設定檔格式
• 常用 client_list 之 wildcards:
–ALL
• 所有來源
–LOCAL
• 於 /etc/hosts 解釋到的不帶“ .”的主機名稱
–KNOWN
• 透過 DNS 或 /etc/hosts 解釋到的帶“ .”的主機
名稱
–UNKNOWN
• 不能解釋到主機名稱的來源
–PARANOID
• 可以解釋到主機名稱,但從該主機再查到的 IP 根
源 IP 不一致
118. 服務限制
• 規則範例一:
–只開放本機及指定網路連線 telnet 服務:
vi /etc/hosts.allow
vi /etc/hosts.deny
119. 服務限制
• 規則範例二:
–只開放可查詢得到名稱且 IP 一致的主機連線
ftp 服務:
vi /etc/hosts.allow
121. 觸發其他指令
• tcpd 常用來觸發命令的選項有兩個:
–twist
•該連線完全由指定命令來接管,命令的輸入與輸出
將連接至客戶端程式。
•其後不能有其他選項。
–spawn
•維持當前連線的情況下以子行程方式運行指定命令
,命令的輸入與輸出將連接到 /dev/null。
•其後仍可有其他選項。
131. sudo 之應用目的
•而且,透過 sudo 可以不需要把 root 密碼
釋放出去:
–執行者輸入自己的密碼
• 不超過 5 份鐘閒置則不需要重複輸入密碼
–或是根本不需要輸入密碼
137. 設定語法
–user 欄位格式:
• user
• %group
• USER_ALIAS
– User_Alias ALIAS_NAME = user1, user2, user3, …
138. 設定語法
–host 欄位格式:
• hostname
• IP
• network number
• +netgroup
• HOST_ALIAS
– Host_Alias ALIAS_NAME = host1, host2, host3, …
139. 設定語法
–run_as 欄位格式:
• user
• #uid
• %group
• RUNAS_ALIAS
– Runas_Alias ALIAS_NAME = user1, user2, user3, …
140. 設定語法
–command 欄位格式:
• command
• CMND_ALIAS
– Cmnd_Alias ALIAS_NAME = cmnd1, cmnd2, cmnd3, …
141. 設定語法
–Command 格式須知:
• 命令必須使用絕對路徑
• 使用 NOPASSWD: 前置標籤可不需要密碼
• 加上 ! 前置符號則禁止執行該命令
• 若有指定參數則命令與參數之間不得插入任何內容
• 命令與命令之間使用” , ”分隔
142. 設定語法
–Example:
%wheel ALL = (ALL) ALL
peter localhost = /usr/bin/passwd [A-z]*,
!/usr/bin/passwd root
ALL CDROM = NOPASSWD: /sbin/umount /CDROM,
/sbin/mount -o nosuid,nodev
/dev/cd0a /CDROM
144. 限制 sudoers
•在 SuSE Linux 系統上設定 sudoers 需要
注意如下設定:
Defaults targetpw # ask for the password of
the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use
this together with 'Defaults targetpw'!
146. 限制 sudoers
•修改建議:
–同時註解掉這兩行:
#Defaults targetpw # ask for the password of the
target user i.e. root
#ALL ALL=(ALL) ALL # WARNING! Only use this
together with 'Defaults targetpw'!
–然後再個別定義使用者及群組
148. 限制 su
•透過 sudo 可以有限度下放 root 權限
•但 su 命令則不然:
–root 密碼仍需釋放
–不能限制運行的命令及參數
–不能限制哪些帳號可以運行 su
–不能限制用甚麼帳號的身分運行 su
149. 限制 su
•解決方案 - PAM:
–使用 pam_wheel.so
• 限制哪些人才能執行 su
–使用 pam_listfile.so
• 限制 su 可以切換為哪些帳號
153. •SSH 簡介
•設定 user key
•關閉密碼認證
•設定 key 密碼保護
•執行遠端圖型界面
•封裝非加密連線
155. SSH 簡介
•SSH 全稱:
Secured SHell
• SSH 主要目的:
–安全的遠端連線操作
–所有傳送的封包均經過加密處理
–取代過往不安全的連線
• r 系列(rsh、rcp、rlogin、etc)
• telnet
• ftp
156. SSH 簡介
•SSH 主要功能:
–遠端登錄
–遠端命令執行
–遠端檔案複製
–主機身份驗證
–帳號身份驗證
–X 圖形介面轉送
–封裝其他非加密連線
157. SSH 簡介
•SSH 版本:
–SSH v1
• 無使用限制
• 加密使用的 Session Key 為 256bit 亂數
• Session Key 經過兩把 public key 加密傳送
• 攻擊者可以對現有連線注入額外資料
–SSH v2
• 商業使用受限制
• 加密 key 透過 Diffier-Hellmen 演算法交換
• 資訊完整性透過 HMAC 演算法保障
158. SSH 簡介
•SSH v1 連線流程:
1. client 連線 server 端 tcp/22
2. server 同時把兩把 public key 傳回
– Server Key
– Host Key
3. client以Host Key來比對known_hosts檔:
– 沒發現則詢問加入(需回答 yes)
– 若不通過則結束連線
4. client產生256bit的亂數作為Session Key
並用兩把public key加密後傳回給 server
5. 雙方使用Session Key來加密所有連線
160. SSH 簡介
•SSH v2 連線流程:
1. client 連線 server 端 tcp/22
2. server 同時把 Host Public Key 傳回
3. client以Host Key來比對known_hosts檔:
– 沒發現則詢問加入(需回答 yes)
– 若不通過則結束連線
4. 雙方用Diffie-Hellman演算法協商加密key
5. 及後所有連線用加密key來加密
162. SSH 簡介
•Linux 的 OpenSSH 版本:
–調用 OpenSSL 函式庫來實作加密
–不受商業使用的限制
–兼容官方 SSH 功能:
• v1.5 : SSH1 only
• v1.99 : SSH1 & SSH2
• v2.0 : SSH2 only
165. 設定 user key
•SSH 帳號驗證可以用 RSA Key 進行:
–免除密碼輸入
• 不怕密碼被竊取
• 可用於非互動操作
–更精確的身份辨識
167. 設定 user key
•User Key 建置步驟:
1. 用 ssh-keygen 產生 key pair
– private key : id_rsa
– public key : id_rsa.pub
2. 把 public key 複製至 server 端
3. 並增加至 server 帳號的
~/.ssh/authorized_keys
170. 設定 user key
•並增加至 server 帳號的
~/.ssh/authorized_keys
173. 關閉密碼認證
•SSH 的身份驗證方法:
–User Key
• 若 User Key 通過則馬上通過驗證
• 若 User Key 不通過則問密碼
–Password
• 若使用 PAM 則用 PAM 驗證身份
• 若 PAM 不通過或不使用,則使用系統密碼驗證
• 假如皆不通過,則拒絕連線
179. 設定 key 密碼保護
•在使用 ssh-keygen 產生 RSA/DSA key 的
同時,我們可以為 key 設定一個密碼(pass
phrase)
•也可以在 key 產生之後重新執行 ssh-keygen
-p 重設密碼:
180. 設定 key 密碼保護
•User Key 驗證認 key 不認人的風險:
–終端遭到竊用
–客戶主機遭破解
–Private Key 遭到竊取
•RSA/DSA key 密碼可以降低 private key 被
盜用的風險:
–在Private Key 調用的時候必須額外輸入密碼
–若密碼不對,無法使用 private key
181. 設定 key 密碼保護
•一旦 RSA/DSA key 被設定,SSH 連線所需
要輸入的密碼不再是遠端帳號的密碼,而是
key 保護密碼:
182. 設定 key 密碼保護
•RSA/DSA key 密碼也同時帶來不便:
–不適用在非互動的連線操作
–每次連線均需要輸入密碼
•其不便性可以透過如下命令來改善:
–ssh-agent
–ssh-add
183. 設定 key 密碼保護
•ssh-agent 的使用:
–先用 ssh-agent 載入一個 shell 程式
–再用 ssh-add 載入 private key
• private key 可載入多個
• 只有載入 private key 的時候需要輸入密碼
• 可以設定 X 系統在登入時同時輸入 key 密碼
–及後所有的連線都不再需要輸入密碼,只到結
束 shell 程式
194. 封裝非加密連線
•方法二, 在遠端開一個 port 然後透過
tunnel 連線回本地端服務:
– ssh -R 10110:1.2.3.4:110 4.3.2.1
– GatewayPorts yes
195. 封裝非加密連線
•方法三, 在本地端開一個 port 然後透過
tunnel 連線第三方主機的服務(離開tunnel
的連線沒有加密):
– ssh -L 10110:10.0.0.1:110 4.3.2.1
216. iptables 規則設計
•Iptables 內建三個 tables (及常用鏈):
–filter
• INPUT
• FORWARD
• OUTPUT
–nat
• PREROUTING
• POSTROUTING
• OUTPUT
–mangle
• PREROUTING
• OUTPUT
• …
223. iptables 命令語法
•常見 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
224. 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)
225. iptables 命令語法
•常用 iptables 規則內容(continued):
--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)
* tips: 規則內容越多,符合之封包越少。反
之,則越多
226. iptables 命令語法
•常用 iptables 規則內容(continued):
-j TARGET
(depends on table & CHAIN)
ACCEPT
DROP
SNAT , MASQUERADE
DNAT
REDIRECT
RETURN
… etc.
227. iptables 命令語法
•關於 -m (match) 之應用:
-m state --state <STATE>
• NEW (新建連線)
• ESTABLISHED (已成功建立之連線)
• RELATED (新建連線,但由已建立連線所引發)
• INVALID (非法連線)
228. iptables 命令語法
•關於 -m (match) 之應用(continued):
-m mac --mac-source <MAC>
(比對封包的來源 MAC 位址,僅限 local subnet。)
-m limit --limit <nu/unit> [--limit-burst <burst>]
(比對每一時間單位最大封包數,及觸發限制的數量。)
-m owner --uid-owner <uid>
(比對本機使用者 id。)
…
229. iptables 命令語法
•常用 iptables 之 TARGET:
filter TARGET
• ACCEPT: 允許封包通過當前的鏈
• DROP: 拒絕封包通過當前的鏈
• REJECT: 同 DROP ,但會送回 icmp 通知
230. iptables 命令語法
•常用 iptables 之 TARGET(continued):
nat TARGET
• SNAT: 修改 source socket
• DNAT: 修改 destination socket
• MASQUERADE:動態修改 source socket
231. iptables 命令語法
•常用 iptables 之 TARGET(continued):
others
• REDIRECT: 將連線導至本機行程
• RETURN: 結束自定鏈返回原鏈之下一規則
234. iptables 命令範例
•iptables 命令行範例(continued):
–允許從外部界面(eth0) 連至本機之
web 連線:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j
ACCEPT
235. iptables 命令範例
•iptables 命令行範例(continued):
–允許穿過本機之確認連線( 為內部發起
之連線) :
iptables -A FORWARD -m state --state
ESTABLISHED -j ACCEPT
236. iptables 命令範例
•iptables 命令行範例(continued):
–將內部(192.168.1.x) 送至 Internet
的封包作偽裝:
iptables -t nat -A POSTROUTING -o eth0 -s
192.168.1.0/24 --sport 1024:65535 -j
MASQUERADE
238. 設計自己的 iptables script
•目前的主流 Linux 版本都會提供工具以幫
忙設定 iptables 防火牆
•也會提供預設的防火牆規則
•基本上使用預設規則就足夠應付常規性的使
用
•但如果管理員需要客製化自己的防火規則,
則可撰寫自己的 shell script
239. 設計自己的 iptables script
•Example 1:
–單純作 Desktop 用途
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 -j DROP
iptables -P OUTPUT ACCEPT
240. 設計自己的 iptables script
•Example 2:
–單純作 Web Server 用途
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 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
iptables -P OUTPUT ACCEPT
241. 設計自己的 iptables script
•Example 3:
–單純作 router 用途
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 -j DROP
iptables -P OUTPUT ACCEPT
242. 設計自己的 iptables script
•Example 3:
–單純作 router 用途 (continued)
iptables -A FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 11.22.33.112/29 -j
ACCEPT
iptables -A FORWARD -d 11.22.33.113 -p tcp
--dport 80 -j ACCEPT
iptables -A FORWARD -j DROP
echo 1 > /proc/sys/net/ipv4/ip_forward
243. 設計自己的 iptables script
•Example 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 -j DROP
iptables -P OUTPUT ACCEPT
244. 設計自己的 iptables script
•Example 4:
–單純作 nat 用途 (continued)
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s
192.168.0.0/24 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 80 -j
DNAT --to 192.168.0.1
echo 1 > /proc/sys/net/ipv4/ip_forward