Top Banner
Linux 系統 安全設定
244

Linux system security

Jul 06, 2015

Download

Internet

Kenny Chen

Some security configuration in Linux system, includes system monitoring, pam, xinetd, tcpwrapper, sudo, ssh, and iptables.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linux system security

Linux系統安全設定

Page 2: Linux system security

•安全簡介•系統安全稽查•PAM 安全設定•Super Daemon (xinetd)•TCP Wrapper (tcpd)•Sudo 配置•SSH 安全連線•防火牆設定

Page 3: Linux system security

安全簡介

Page 4: Linux system security

• 終極系統安全• 系統安全等級• 安全重點所在

Page 5: Linux system security

終極系統安全

Page 6: Linux system security

•所謂的安全就是限制資源的分配

•Linux 系統的資源皆以檔案的形式存在

•Linux 系統安全就是限制使用者對檔案的存取

•只要有使用者的系統就會有漏洞(人,往往是影響系統安全的最大因素)

終極系統安全

Page 7: Linux system security

•絕對安全的系統就是沒有人使用的系統,但這樣系統是不存在的,也沒存在的意義

•因此,系統安全只是相對的對資源存取行為進行過濾

•系統安全之水桶理論

終極系統安全

Page 8: Linux system security

系統安全等級

Page 9: Linux system security

•系統的安全等級主要分兩個層次:

–實體安全

–網路安全

系統安全等級

Page 10: Linux system security

•實體安全項目

–系統漏洞修補–Boot Loader 參數保護–BIOS 密碼保護–主機/機櫃保護–機房/門禁保護–社交工程防範

系統安全等級

Page 11: Linux system security

•網路安全項目

–系統/服務漏洞修補–社交工程防範–防火牆防護–DMZ 緩衝區隔–入侵偵測系統( IDS)預警–服務過濾機制–安全驗證機制

系統安全等級

Page 12: Linux system security

安全重點所在

Page 13: Linux system security

•系統安全威脅常見來自網路

•可以運用的過濾機制很多

安全重點所在

Page 14: Linux system security

– 外部安全設施

安全重點所在

外圍防火牆

內部防火牆

System

DMZ+ IDS

Page 15: Linux system security

– 系統安全機制

安全重點所在

外圍防火牆

內部防火牆

本機防火牆

xinetd

tcpd

PAM

System

DMZ+ IDS

Daemon ACL

Page 16: Linux system security

– 單點過濾

– 全部通過

– 逐層把關

– 縱深防禦

安全重點所在

外圍防火牆

內部防火牆

本機防火牆

xinetd

tcpd

PAM

System

DMZ+ IDS

Daemon ACL

Page 17: Linux system security

• 問題:

–公共開放否?

安全重點所在

Page 18: Linux system security

• 問題:

–公共開放否?

–若然,所有防禦機制都必須解除!

安全重點所在

Page 19: Linux system security

•重點:

真正的戰場在系統!

安全重點所在

Page 20: Linux system security

- 是否需要開放連線?- 開放給哪些對象?- 所開放的服務是否安全?- 服務行程的存取範圍有多大?- 一旦行程被破解,危害程度如何?- 系統是否能及時偵測入侵行為?- 系統是否有足夠機制抵禦入侵?- 是否有良好的災後復原策略?- 如何避免問題的再次發生?

安全重點所在

Page 21: Linux system security

系統安全稽查

Page 22: Linux system security

•系統負載查詢•網路連線稽查•重要檔案稽查

Page 23: Linux system security

系統負載查詢

Page 24: Linux system security

•查詢指令:–uptime–top–vmstat–iostat–sar–last–lastlog

系統負載查詢

Page 25: Linux system security

•uptime 命令

系統負載查詢

Page 26: Linux system security

•資訊分析 :–系統時間–開機時間–登入人數– 系統負載

• 過去 1、 5、 15 分鐘平均負載• 提交工作剛好被 CPU 接收為 1• 提交工作超過 CPU 接收大於 1• 提交工作低於 CPU 接收小於 1

系統負載查詢

Page 27: Linux system security

•top 命令

系統負載查詢

Page 28: Linux system security

•資訊分析 :–uptime 命令結果–行程統計–CPU分配–記憶體分配–SWAP記憶體分配– 行程排行榜

• PID• USER• NI• %CPU• %MEM• COMMAND

系統負載查詢

Page 29: Linux system security

•命令操作 :– 預設 3 秒更新一次,按 Space 可以馬上更新–預設以%CPU排列,按 F可以選擇其他欄位– 可用 k 傳送信號– 可用 r 調整 NI– 更多操作說明可按 h– 離開按 q

系統負載查詢

Page 30: Linux system security

•vmstat 命令

系統負載查詢

Page 31: Linux system security

•資訊分析 :–行程狀態–記憶體分配–SWAP讀寫–IO讀寫–系統操作–CPU分配

系統負載查詢

Page 32: Linux system security

•iostat 命令

系統負載查詢

Page 33: Linux system security

•資訊分析 :–CPU分配–設備讀寫統計 (毫秒 )

• await: IO等待時間• svctm: IO處理時間

系統負載查詢

Page 34: Linux system security

•sar 命令– 必須先由 root 執行如下命令:

cp /etc/sysstat/sysstat.cron /etc/cron.d/

系統負載查詢

Page 35: Linux system security

•資訊分析 :

–使用者程序負載–系統程序負載–CPU閒置

系統負載查詢

Page 36: Linux system security

•last 命令

系統負載查詢

Page 37: Linux system security

•資訊分析 :

–系統最近紀錄的每一個成功登錄時間– 使用 -x 選項可獲得 runlevel 切換時間–系統會定期輪替掉記錄檔 (/var/log/wtmp)

系統負載查詢

Page 38: Linux system security

•lastlog 命令

系統負載查詢

Page 39: Linux system security

•資訊分析 :

–每一個帳號的最後一次登錄時間–系統帳號不應該有登錄記錄

系統負載查詢

Page 40: Linux system security

網路連線稽查

Page 41: Linux system security

•查詢指令:–netstat–nmap

網路連線稽查

Page 42: Linux system security

•netstat 命令

網路連線稽查

Page 43: Linux system security

•資訊分析:– 本機 socket– 遠端 socket–連線狀態

• LISTEN:本機服務• ESTABLISHED:已建立連線• TIME_WAIT:即將關閉連線

–行程

網路連線稽查

Page 44: Linux system security

•nmap 命令

網路連線稽查

Page 45: Linux system security

•資訊分析 :–Port/類別–服務狀態–服務名稱–版本號碼

網路連線稽查

Page 46: Linux system security

重要檔案稽查

Page 47: Linux system security

•主要稽查檔案:

–執行檔與函式庫

–帶 SUID/SGID之執行檔• 檔案擁有者為 root則任何人運行皆為 root• 倘若被植入惡意程式碼將危及整個系統

重要檔案稽查

Page 48: Linux system security

•查詢指令:

–find–diff

重要檔案稽查

Page 49: Linux system security

•find 命令

重要檔案稽查

Page 50: Linux system security

•資訊分析:

–找出所有帶 SUID/SGID 的檔案– 並由 ls -l 列出基本資訊–(用md5sum更佳,但較為耗時 )

重要檔案稽查

Page 51: Linux system security

• diff 命令

重要檔案稽查

Page 52: Linux system security

•資訊分析:

– 前後用 find 產生不同的記錄– 再用 diff 來比較前後記錄即可得知差異的檔案

重要檔案稽查

Page 53: Linux system security

PAM 安全設定

Page 54: Linux system security

•PAM 運作方式•時間限制•名單限制•登錄限制

Page 55: Linux system security

PAM 運作方式

Page 56: Linux system security

•PAM 全稱:–Pluggable Authentication Modules

•除了做身份驗證,還有很多安全控制模組•需要身份驗證的程式,可自行開發模組• 也可以集中交由 PAM 來進行• 只要支援 PAM 的模組,都可給程式共享

PAM 運作方式

Page 57: Linux system security

PAM 運作方式

App AppApp

PAM

Module ModuleModule

Config Files

Page 58: Linux system security

時間限制

Page 59: Linux system security

•PAM 模組名稱:–pam_time.so

•模組功能:–限制服務僅在指定日期與時間或終端上提供–可針對個別使用者進行限制:

• 名稱• 時間• 星期

時間限制

Page 60: Linux system security

•模組設定檔:–/etc/security/time.conf

•設定語法:services;ttys;users;times

•Example:login ; tty* & !ttyp* ; !root ; !Al0000-2400

時間限制

Page 61: Linux system security

•實作範例:

–/etc/pam.d/common-account account required pam_time.so

–/etc/security/time.conflogin;tty*;geeko;Wk0900-1800

login;tty*;kenny;Wk0900-1800

時間限制

Page 62: Linux system security

名單限制

Page 63: Linux system security

•PAM 模組名稱:–pam_listfile.so

•模組功能:–限制服務僅向檔案所列名單提供 (或拒絕 )

名單限制

Page 64: Linux system security

•設定語法:item=[tty|user|rhost|ruser|group|shell]sense=[allow|deny] file=/path/filenameonerr=[succeed|fail][apply=[user|@group]][quiet]

•Example:auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

名單限制

Page 65: Linux system security

•實作範例:

–/etc/pam.d/sshd auth required pam_listfile.so item=user

sense=allow file=/etc/sshusers onerr=fail

名單限制

Page 66: Linux system security

登錄限制

Page 67: Linux system security

•PAM 模組名稱:–pam_tally.so

•模組功能:–紀錄失敗登錄的次數,若成功登錄則歸零– 可供 faillog 工具來限制登錄

登錄限制

Page 68: Linux system security

•設定語法:pam_tally.so [options]

•常見選項:onerr=[fail|succeed]file=/path/to/countermagic_rootper_user

•Example:auth required pam_tally.so per_user

登錄限制

Page 69: Linux system security

•實作範例:

–/etc/pam.d/common-auth auth required pam_tally.so per_user

–failog命令:• faillog• faillog [-u user] -m <n>• faillong -u user -r

登錄限制

Page 70: Linux system security

•PAM 模組名稱:–pam_limit.so

•模組功能:–設定使用者可用的資源極限– 其中 maxlogins 可限制使用者最高登錄次數

登錄限制

Page 71: Linux system security

•設定檔案:/etc/security/limits.conf

•設定語法:user - maxlogins <n>

•Example:geeko - maxlogins 5

登錄限制

Page 72: Linux system security

Super Daemon (xinetd)

Page 73: Linux system security

•xinetd 的功能•設定檔格式•來源限制•時間限制•連線限制•簡易服務配置

Page 74: Linux system security

xinetd 的功能

Page 75: Linux system security

• 網路服務程式需要先行載入並且監聽相應的port

•不管是否有服務請求到達,服務程式都駐守在系統負載中:

–損耗更多的系統資源–系統效能變差–系統穩定度變低–系統安全性更糟糕

xinetd 的功能

Page 76: Linux system security

•有別於獨立運行的網路服務, xinetd 僅在服務請求到達的時候才調用服務程式

•當服務連線結束時, xinetd 也會同時卸載服務程式

xinetd 的功能

Page 77: Linux system security

•因此, xinetd 可視為後端服務程式的調度員,提供更彈性的資源負載:

–更佳的系統效能–更安全的系統服務–更穩定的系統運行

• 然而,長時間頻繁存取的服務則不適用xinetd 的方式來啟動

xinetd 的功能

Page 78: Linux system security

•此外, xinetd 也能對服務連線提供更多的存取限制:

–限制來源–限制時間–限制連線

xinetd 的功能

Page 79: Linux system security

xinetd 的功能

Page 80: Linux system security

設定檔格式

Page 81: Linux system security

•主設定檔:–/etc/xinetd.conf

•設定語法:defaults{

key = valuekey += valuekey -= value

}

設定檔格式

Page 82: Linux system security

•Example:

設定檔格式

Page 83: Linux system security

•服務設定檔:–/etc/xinetd.d/*

•個別服務均可使用各自的服務配置:

– 若服務檔沒有則使用 defaults– 若跟 defaults 衝突則以服務檔優先

• 服務名稱必須在 /etc/services 經過定義

設定檔格式

Page 84: Linux system security

•Example:

設定檔格式

Page 85: Linux system security

來源限制

Page 86: Linux system security

•限制設定項目:

–only_from• 只允許特定連線

–no_access• 拒絕特定連線

– 兩者可混用,重疊範圍以 no_access 為依

來源限制

Page 87: Linux system security

•來源格式:

– 單一 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

來源限制

Page 88: Linux system security

•Example:

來源限制

Page 89: Linux system security

時間限制

Page 90: Linux system security

•限制設定項目:

access_times

時間限制

Page 91: Linux system security

•時間格式:–hh:mm-hh:mm

•取值範圍:–hh: 00-23–mm: 00-59

時間限制

Page 92: Linux system security

•Example :

時間限制

Page 93: Linux system security

連線限制

Page 94: Linux system security

•設定限制項目:

–instances• 同一時間內單一服務所能承載的最多連線數目

–cps• 第一個參數為一秒內只能所能承載的新建連線數目• 第二個參數為新連線數目超過第一參數時,暫停多少秒停止接受新建連線(不影響現有連線)

連線限制

Page 95: Linux system security

•Example:

連線限制

Page 96: Linux system security

簡易服務配置

Page 97: Linux system security

•功能說明:

– 不需要獨立開發 socket 服務程式– 透過 xinetd 來運行簡單的 script

簡易服務配置

Page 98: Linux system security

• 步驟一,建立 script:

vi /usr/local/bin/my_service

簡易服務配置

Page 99: Linux system security

• 步驟二,定義 service port:

vi /etc/services

簡易服務配置

Page 100: Linux system security

• 步驟三,配置 xinetd 服務檔:

vi /etc/xinetd.d/my_service

簡易服務配置

Page 101: Linux system security

• 步驟四,重新啟動 xinetd:

/etc/init.d/xinetd restart

簡易服務配置

Page 102: Linux system security

•步驟五,測試:

簡易服務配置

Page 103: Linux system security

TCP Wrapper (tcpd)

Page 104: Linux system security

•tcpd 的使用時機•設定檔格式•服務限制•觸發其他指令

Page 105: Linux system security

tcpd 的使用時機

Page 106: Linux system security

•網路服務程式在決定是否接收新建連線之前 ,可先交由 tcpd 檢查:

–接收該連線–拒絕該連線–運行額外的程式

tcpd 的使用時機

Page 107: Linux system security

• 藉由 tcpd 的過慮,可為系統提供更完整的安全防護:

–集中配置–集中記錄 (syslog)– 服務程序需支援 libwrap.so

tcpd 的使用時機

Page 108: Linux system security

tcpd 的使用時機

Page 109: Linux system security

設定檔格式

Page 110: Linux system security

• tcpd 參考的設定檔有兩個:

–/etc/hosts.allow定義允許通過的連線

–/etc/hosts.deny定義拒絕通過的連線

設定檔格式

Page 111: Linux system security

• 設定檔的參考順序:

– 先參考 hosts.allow 再參考 hosts.deny– 規則參考以 first-match-first 為原則

• 符合 hosts.allow 規則就接受連線• 不符合 hosts.allow 但符合 hosts.deny 則拒絕• 若皆不符合預設為接受連線

設定檔格式

Page 112: Linux system security

設定檔格式

Page 113: Linux system security

• hosts.allow 與 hosts.deny 的規則個時是相同的:

– 放在 hosts.allow 則是接受連線– 放在 hosts.deny 則是拒絕連線

設定檔格式

Page 114: Linux system security

• 規則格式: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

設定檔格式

Page 115: Linux system security

• 常用 client_list 之 wildcards:–ALL

• 所有來源–LOCAL

• 於 /etc/hosts “解釋到的不帶 .”的主機名稱–KNOWN

• 透過 DNS 或 /etc/hosts “解釋到的帶 .”的主機名稱

–UNKNOWN• 不能解釋到主機名稱的來源

–PARANOID• 可以解釋到主機名稱,但從該主機再查到的 IP 根

源 IP 不一致

設定檔格式

Page 116: Linux system security

服務限制

Page 117: Linux system security

•tcpd 可採用的限制方式有兩種:

–除非指定開放否則全部限制–除非指限制放否則全部開放

服務限制

Page 118: Linux system security

• 規則範例一:– 只開放本機及指定網路連線 telnet 服務:

vi /etc/hosts.allow

vi /etc/hosts.deny

服務限制

Page 119: Linux system security

• 規則範例二:– 只開放可查詢得到名稱且 IP 一致的主機連線ftp 服務:

vi /etc/hosts.allow

服務限制

Page 120: Linux system security

觸發其他指令

Page 121: Linux system security

• tcpd 常用來觸發命令的選項有兩個:

–twist•該連線完全由指定命令來接管,命令的輸入與輸出將連接至客戶端程式。

•其後不能有其他選項。

–spawn•維持當前連線的情況下以子行程方式運行指定命令

,命令的輸入與輸出將連接到 /dev/null。•其後仍可有其他選項。

觸發其他指令

Page 122: Linux system security

•規則範例一:– 若從 foo.bar.com 連線列印服務則以 email 通知管理員,其餘的連線一律擋掉

觸發其他指令

Page 123: Linux system security

•規則範例二:– “允許已定義且不帶 .” 的主機連線 telnet 服務,其餘的連線一律擋掉,且傳回拒絕信息

觸發其他指令

Page 124: Linux system security

•規則範例三:– 來自特定網路的 rsync 連線專用客製化的程式,其餘的連線維持正常

觸發其他指令

Page 125: Linux system security

Sudo 配置

Page 126: Linux system security

•sudo 之應用目的•設定語法•限制 sudoers•限制 su

Page 127: Linux system security

sudo 之應用目的

Page 128: Linux system security

•過往要把 root權限授權出去有兩種方法:

– 直接把 user ID 設為 0– 把 root 密碼釋放出去

• 直接用 root 登錄• su 切換為 root

sudo 之應用目的

Page 129: Linux system security

•然而這兩種方法都有致命的不足:

–all or nothing 不能折衷– 無法控制 root 權限之執行–難以追蹤– 容易洩露 root 密碼–容易誤觸危險程式

sudo 之應用目的

Page 130: Linux system security

•透過 sudo可以有限度的下放 root的權限:

–哪些帳號或群組–在那些機器上–用甚麼身份–執行甚麼命令–甚至只能使用哪些命令參數

sudo 之應用目的

Page 131: Linux system security

• 而且,透過 sudo 可以不需要把 root 密碼釋放出去:

–執行者輸入自己的密碼• 不超過 5 份鐘閒置則不需要重複輸入密碼

–或是根本不需要輸入密碼

sudo 之應用目的

Page 132: Linux system security

• 透過 sudo 運行的每一道命令進行記錄:

–logfile–syslog

sudo 之應用目的

Page 133: Linux system security

•sudo 的使用方法:

–sudo [-u user] command [argument…]

sudo 之應用目的

Page 134: Linux system security

設定語法

Page 135: Linux system security

•sudo 的設定檔:

–/etc/sudoers

• 不建議直接用文字編輯器修改• 應該用 visudo 命令來修改

設定語法

Page 136: Linux system security

•sudoers 設定檔語法欄位:

user host = (run_as) command [argument]

設定語法

Page 137: Linux system security

–user 欄位格式:

• user• %group• USER_ALIAS

– User_Alias ALIAS_NAME = user1, user2, user3, …

設定語法

Page 138: Linux system security

–host 欄位格式:

• hostname• IP• network number• +netgroup• HOST_ALIAS

– Host_Alias ALIAS_NAME = host1, host2, host3, …

設定語法

Page 139: Linux system security

–run_as 欄位格式:

• user• #uid• %group• RUNAS_ALIAS

– Runas_Alias ALIAS_NAME = user1, user2, user3, …

設定語法

Page 140: Linux system security

–command 欄位格式:

• command• CMND_ALIAS

– Cmnd_Alias ALIAS_NAME = cmnd1, cmnd2, cmnd3, …

設定語法

Page 141: Linux system security

–Command 格式須知:

• 命令必須使用絕對路徑• 使用 NOPASSWD: 前置標籤可不需要密碼• 加上 ! 前置符號則禁止執行該命令• 若有指定參數則命令與參數之間不得插入任何內容• ”命令與命令之間使用 , ”分隔

設定語法

Page 142: Linux system security

–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

設定語法

Page 143: Linux system security

限制 sudoers

Page 144: Linux system security

• 在 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'!

限制 sudoers

Page 145: Linux system security

•兩行設定效果為:

– 所有使用者皆可籍由 sudo 執行任何命令– 但需輸入目標帳號的密碼,如此 root 密碼仍需釋放出來

限制 sudoers

Page 146: Linux system security

•修改建議:

–同時註解掉這兩行:#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'!

–然後再個別定義使用者及群組

限制 sudoers

Page 147: Linux system security

限制 su

Page 148: Linux system security

• 透過 sudo 可以有限度下放 root 權限

• 但 su 命令則不然:

–root 密碼仍需釋放–不能限制運行的命令及參數– 不能限制哪些帳號可以運行 su– 不能限制用甚麼帳號的身分運行 su

限制 su

Page 149: Linux system security

• 解決方案 - PAM:

– 使用 pam_wheel.so• 限制哪些人才能執行 su

– 使用 pam_listfile.so• 限制 su 可以切換為哪些帳號

限制 su

Page 150: Linux system security

•Example1:

–vi /etc/pam.d/su–vi /etc/pam.d/su-l

限制 su

Page 151: Linux system security

•Example2:

–vi /etc/pam.d/su–vi /etc/pam.d/su-l

限制 su

Page 152: Linux system security

SSH 安全連線

Page 153: Linux system security

•SSH 簡介•設定 user key•關閉密碼認證•設定 key 密碼保護•執行遠端圖型界面•封裝非加密連線

Page 154: Linux system security

SSH 簡介

Page 155: Linux system security

•SSH 全稱:Secured SHell

• SSH 主要目的:–安全的遠端連線操作–所有傳送的封包均經過加密處理–取代過往不安全的連線

• r 系列( rsh、 rcp、 rlogin、 etc)• telnet• ftp

SSH 簡介

Page 156: Linux system security

•SSH 主要功能:

–遠端登錄–遠端命令執行–遠端檔案複製–主機身份驗證–帳號身份驗證–X 圖形介面轉送–封裝其他非加密連線

SSH 簡介

Page 157: Linux system security

•SSH 版本:

–SSH v1• 無使用限制• 加密使用的 Session Key 為 256bit 亂數• Session Key 經過兩把 public key 加密傳送• 攻擊者可以對現有連線注入額外資料

–SSH v2• 商業使用受限制• 加密 key 透過 Diffier-Hellmen 演算法交換• 資訊完整性透過 HMAC 演算法保障

SSH 簡介

Page 158: Linux system security

•SSH v1 連線流程:1. client 連線 server 端 tcp/222. 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來加密所有連線

SSH 簡介

Page 159: Linux system security

SSH 簡介

Page 160: Linux system security

•SSH v2 連線流程:1. client 連線 server 端 tcp/222. server 同時把 Host Public Key 傳回3. client以 Host Key來比對 known_hosts檔:

– 沒發現則詢問加入(需回答 yes)– 若不通過則結束連線

4. 雙方用 Diffie-Hellman演算法協商加密 key5. 及後所有連線用加密 key來加密

SSH 簡介

Page 161: Linux system security

SSH 簡介

Page 162: Linux system security

•Linux 的 OpenSSH 版本:

– 調用 OpenSSL 函式庫來實作加密–不受商業使用的限制– 兼容官方 SSH 功能:

• v1.5 : SSH1 only• v1.99 : SSH1 & SSH2• v2.0 : SSH2 only

SSH 簡介

Page 163: Linux system security

• 偵查 OpenSSH 版本:

SSH 簡介

Page 164: Linux system security

設定 user key

Page 165: Linux system security

•SSH 帳號驗證可以用 RSA Key 進行:

–免除密碼輸入• 不怕密碼被竊取• 可用於非互動操作

–更精確的身份辨識

設定 user key

Page 166: Linux system security

•SSH2 支援兩種演算法:

–RSA

–DSA

設定 user key

Page 167: Linux system security

•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

設定 user key

Page 168: Linux system security

• 用 ssh-keygen 產生 key pair

設定 user key

Page 169: Linux system security

• 把 public key 複製至 server 端:

設定 user key

Page 170: Linux system security

• 並增加至 server 帳號的~/.ssh/authorized_keys

設定 user key

Page 171: Linux system security

•測試(不需要密碼)

設定 user key

Page 172: Linux system security

關閉密碼認證

Page 173: Linux system security

•SSH 的身份驗證方法:

–User Key• 若 User Key 通過則馬上通過驗證• 若 User Key 不通過則問密碼

–Password• 若使用 PAM 則用 PAM 驗證身份• 若 PAM 不通過或不使用,則使用系統密碼驗證• 假如皆不通過,則拒絕連線

關閉密碼認證

Page 174: Linux system security

關閉密碼認證

Page 175: Linux system security

•身份驗證修改:– 禁用密碼,只接受 user key

• 避免密碼遭到攔截• 避免機器人程式猜密碼• 限定被授權主機連線( key 必須事前抄入)• 使用於非互動連線( shell script)

關閉密碼認證

Page 176: Linux system security

•關閉密碼驗證:

–vi /etc/ssh/sshd_config

–/etc/init.d/sshd restart

關閉密碼認證

Page 177: Linux system security

•測試:

關閉密碼認證

Page 178: Linux system security

設定 key 密碼保護

Page 179: Linux system security

• 在使用 ssh-keygen 產生 RSA/DSA key 的 同時,我們可以為 key 設定一個密碼 (pass

phrase)• 也可以在 key 產生之後重新執行 ssh-keygen -p 重設密碼:

設定 key 密碼保護

Page 180: Linux system security

•User Key 驗證認 key 不認人的風險:–終端遭到竊用–客戶主機遭破解–Private Key 遭到竊取

•RSA/DSA key 密碼可以降低 private key 被盜用的風險:

–在 Private Key 調用的時候必須額外輸入密碼– 若密碼不對,無法使用 private key

設定 key 密碼保護

Page 181: Linux system security

• 一旦 RSA/DSA key 被設定, SSH 連線所需 要輸入的密碼不再是遠端帳號的密碼,而是

key 保護密碼:

設定 key 密碼保護

Page 182: Linux system security

•RSA/DSA key 密碼也同時帶來不便:

–不適用在非互動的連線操作–每次連線均需要輸入密碼

•其不便性可以透過如下命令來改善:

–ssh-agent–ssh-add

設定 key 密碼保護

Page 183: Linux system security

•ssh-agent 的使用:

– 先用 ssh-agent 載入一個 shell 程式– 再用 ssh-add 載入 private key

• private key 可載入多個• 只有載入 private key 的時候需要輸入密碼• 可以設定 X 系統在登入時同時輸入 key 密碼

–及後所有的連線都不再需要輸入密碼,只到結 束 shell 程式

設定 key 密碼保護

Page 184: Linux system security

•ssh-agent 使用測試:

設定 key 密碼保護

Page 185: Linux system security

執行遠端圖型界面

Page 186: Linux system security

•過往傳統的軟端連線軟體一般都只能運行文字介面的程式

•X系統本身有支援 X Protocol可以運行遠端圖形介面,也可應用 XDMCP登入遠端桌面

–網路資訊以明碼傳輸–安全性不足–身份驗證困難–容易遭受中間人攻擊

執行遠端圖型界面

Page 187: Linux system security

•SSH server 可以提供 XForwarding 功能:

–所有網路資訊均以加密–更安全可靠的傳輸–可以進行身份驗證–可以抵禦中間人攻擊

執行遠端圖型界面

Page 188: Linux system security

•SSH server 設定:

–vi /etc/ssh/sshd_config

執行遠端圖型界面

Page 189: Linux system security

•SSH client 端命令參數: -X

執行遠端圖型界面

Page 190: Linux system security

封裝非加密連線

Page 191: Linux system security

•目前很多原本沒有加密服務均已開發出支援加密的版本

–需版本支援–需要額外的設定

封裝非加密連線

Page 192: Linux system security

•倘若版本不支援加密協定,或是臨時需要加密連線, SSH 可以提供封裝服務,把原本沒

加密的連線封裝到已經加密的 ssh tunnel 中

•原有服務無須做任何修改 , 只需要在 ssh 客戶端執行時增加參數就行

封裝非加密連線

Page 193: Linux system security

• 方法一, 在本地端開一個 port 然後透過tunnel 連線遠端服務:

–  ssh -L 10110:4.3.2.1:110 4.3.2.1

封裝非加密連線

Page 194: Linux system security

• 方法二, 在遠端開一個 port 然後透過tunnel 連線回本地端服務:

– ssh -R 10110:1.2.3.4:110 4.3.2.1– GatewayPorts yes

封裝非加密連線

Page 195: Linux system security

• 方法三, 在本地端開一個 port 然後透過tunnel 連線第三方主機的服務 (離開 tunnel的連線沒有加密 ):

– ssh -L 10110:10.0.0.1:110 4.3.2.1

封裝非加密連線

Page 196: Linux system security

防火牆設定

Page 197: Linux system security

•防火牆原理•防火牆設計•iptables 規則設計•iptables 命令語法•iptables 命令範例•設計自己的 iptables script

Page 198: Linux system security

防火牆原理

Page 199: Linux system security

•網路連線兩端透過封包 (packet)傳遞資料:

防火牆原理

Page 200: Linux system security

• 封包基本由 header 與 payload 組成•Packet 則是層層封裝傳遞

防火牆原理

Page 201: Linux system security

•TCP 封包之 header 內容

防火牆原理

Page 202: Linux system security

•IP 封包之 header 內容

防火牆原理

Page 203: Linux system security

•Socket 是連線兩端的封包起止站–Source Socket–Destination Socket

•Socket 由 Address 與 Port 組成

防火牆原理

Page 204: Linux system security

•NAT 的工作原理– 透過 socket 替換達成 routing

防火牆原理

Page 205: Linux system security

•防火牆原理– 透過檢查封包 header(or payload) 的內容來決定封包是否能夠通過

防火牆原理

Page 206: Linux system security

防火牆設計

Page 207: Linux system security

•防火牆常被部署在對內 (信任 )與對外 (不信任 )網路之間的必經通道之上

防火牆設計

Page 208: Linux system security

•DMZ 是防火牆部署中常見的設計–主要用來區隔堡壘主機,以降低入侵風險

防火牆設計

Page 209: Linux system security

•DMZ 之設計是多樣的–安全與成本及難度成正比、與便利成反比

防火牆設計

Page 210: Linux system security

•Internet 的連線常經過多重的防火牆過濾

防火牆設計

Page 211: Linux system security

•Internet 的連線常經過多重的防火牆過濾–連線時雙向的–必須全部通過

防火牆設計

Page 212: Linux system security

iptables 規則設計

Page 213: Linux system security

•防火牆程式根據規則 (rule)來處理封包–rule by rule–first match–policy

iptables 規則設計

Page 214: Linux system security

•防火牆規則收集於不同的鏈 (chain)中–chain by chain–all through

iptables 規則設計

Page 215: Linux system security

•鏈存在於不同的表 (table)中–different table for different job–table by table

iptables 規則設計

Page 216: Linux system security

•Iptables 內建三個 tables (及常用鏈 ):–filter

• INPUT• FORWARD• OUTPUT

–nat• PREROUTING• POSTROUTING• OUTPUT

–mangle• PREROUTING• OUTPUT• …

iptables 規則設計

Page 217: Linux system security

•Linux 系統對封包的 routing 處理–To local–To outside

iptables 規則設計

Page 218: Linux system security

• 封包於 iptables 之穿行–時間–檢查點

iptables 規則設計

Page 219: Linux system security

•iptables 所介入的處理:–which table–which chain

iptables 規則設計

Page 220: Linux system security

• 一個非本機封包於 iptables 之處理:

iptables 規則設計

Page 221: Linux system security

iptables 命令語法

Page 222: Linux system security

•iptables 命令格式:

iptables [-t table] -CMD CHAIN rule -j TARGET

iptables 命令語法

Page 223: Linux system security

• 常見 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

iptables 命令語法

Page 224: Linux system security

• 常用 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)

iptables 命令語法

Page 225: Linux system security

• 常用 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: 規則內容越多,符合之封包越少。反之,則越多

iptables 命令語法

Page 226: Linux system security

• 常用 iptables 規則內容 (continued):

-j TARGET (depends on table & CHAIN)

ACCEPTDROPSNAT , MASQUERADEDNATREDIRECTRETURN… etc.

iptables 命令語法

Page 227: Linux system security

• 關於 -m (match) 之應用:

-m state --state <STATE>

• NEW (新建連線 )• ESTABLISHED (已成功建立之連線 )• RELATED (新建連線,但由已建立連線所引發 )• INVALID (非法連線 )

iptables 命令語法

Page 228: Linux system security

• 關於 -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。 )

iptables 命令語法

Page 229: Linux system security

• 常用 iptables 之 TARGET:

filter TARGET

• ACCEPT: 允許封包通過當前的鏈• DROP: 拒絕封包通過當前的鏈• REJECT: 同 DROP ,但會送回 icmp 通知

iptables 命令語法

Page 230: Linux system security

• 常用 iptables 之 TARGET(continued):

nat TARGET

• SNAT: 修改 source socket• DNAT: 修改 destination socket• MASQUERADE: 動態修改 source socket

iptables 命令語法

Page 231: Linux system security

• 常用 iptables 之 TARGET(continued):

others

• REDIRECT: 將連線導至本機行程• RETURN: 結束自定鏈返回原鏈之下一規則

iptables 命令語法

Page 232: Linux system security

iptables 命令範例

Page 233: Linux system security

•iptables 命令行範例:

–拒絕新建連線進入本機:

iptables -t filter -A INPUT -m state --state NEW -j DROP

iptables 命令範例

Page 234: Linux system security

•iptables 命令行範例 (continued):

–允許從外部界面 (eth0) 連至本機之web 連線:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables 命令範例

Page 235: Linux system security

•iptables 命令行範例 (continued):

–允許穿過本機之確認連線 (為內部發起之連線 ):

iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT

iptables 命令範例

Page 236: Linux system security

•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

iptables 命令範例

Page 237: Linux system security

設計自己的 iptables script

Page 238: Linux system security

• 目前的主流 Linux 版本都會提供工具以幫 忙設定 iptables 防火牆

•也會提供預設的防火牆規則

•基本上使用預設規則就足夠應付常規性的使用

•但如果管理員需要客製化自己的防火規則, 則可撰寫自己的 shell script

設計自己的 iptables script

Page 239: Linux system security

•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

設計自己的 iptables script

Page 240: Linux system security

•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

設計自己的 iptables script

Page 241: Linux system security

•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

設計自己的 iptables script

Page 242: Linux system security

•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

設計自己的 iptables script

Page 243: Linux system security

•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

設計自己的 iptables script

Page 244: Linux system security

•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

設計自己的 iptables script