LPI Linux 認證/LPIC2 考試 202/系統安全
|
|
- 配置路由器
- 保護 FTP 伺服器
- 安全 Shell (OpenSSH)
- TCP_wrappers
- 安全任務
描述:候選人應該能夠配置 ipchains 和 iptables 來執行 IP 偽裝,並說明網路地址轉換和專用網路地址在保護網路中的重要性。這個目標包括配置埠重定向、列出過濾規則,以及編寫根據源或目標協議、埠和地址接受或阻止資料報的規則。還包括儲存和重新載入過濾配置,使用 /proc/sys/net/ipv4 中的設定來響應 DOS 攻擊,使用 /proc/sys/net/ipv4/ip_forward 開啟和關閉 IP 轉發,以及使用 PortSentry 等工具來阻止埠掃描和漏洞探測。
關鍵檔案、術語,以及實用程式包括
/proc/sys/net/ipv4 /etc/services ipchains iptables routed
配置連線到網際網路等不安全網路的路由器,您應該採取許多步驟。首先,確定您需要的服務,並制定一個策略來阻止所有其他服務!這樣可以最大程度地減少您遭受安全漏洞的風險。
路由器的常見步驟是
記錄所有丟棄/拒絕的資料包(並限制記錄速率,以避免日誌檔案大小爆炸)儘可能使用 NAT - 不可路由地址更難被攻擊定義 TCP/UDP 的預設策略 - 阻止埠響應:丟棄/拒絕/重置?
丟棄實際上沒有幫助,現在的掃描器很容易檢測到它。拒絕仍然表明防火牆正在阻止訪問,重置就像什麼都沒有監聽一樣(即“正常”方式)。
除非您知道需要它,否則丟棄(並記錄 + 限制)所有 ICMP 資料包,除了最有用的:目標不可達、時間超過和回聲回覆
防禦已知攻擊,即:IP 地址反欺騙、停用源路由資料包、停用 icmp_redirect、記錄“火星人”IP 地址(即出現在不屬於它們的介面上的地址)、停用 syn_cookies、停用 ECN(顯式擁塞通知)、停用 TCP 時間戳、ICMP 廣播和 ICMP 錯誤資料包
.
描述:候選人應該能夠配置匿名下載 FTP 伺服器。這個目標包括配置 FTP 伺服器以允許匿名上傳、列出如果允許匿名上傳需要採取的其他預防措施、配置具有 chroot 限制的訪客使用者和組,以及配置 ftpaccess 以拒絕訪問指定的使用者或組。
關鍵檔案、術語,以及實用程式包括
ftpaccess, ftpusers, ftpgroups /etc/passwd chroot
保護 FTP 伺服器將包括
- 定製 FTP 警告橫幅
- 定製 FTP 問候橫幅
- 保護、拒絕和限制使用者帳戶
- 保護匿名訪問
- 保護匿名上傳
檔案傳輸協議 (FTP) 是一種較舊的 TCP 協議,用於在網路上傳輸檔案。由於與伺服器的所有事務(包括使用者身份驗證)都是未加密的,因此它被認為是不安全的協議,應謹慎配置。
我們將重點關注華盛頓大學的 wu-ftpd FTP 伺服器。
Wu-ftpd 的主要配置檔案位於 /etc 中:ftpusers、ftpaccess 和 ftpconversions。ftpusers 檔案包含所有不允許登入您的 FTP 伺服器的使用者列表。您可以想象,使用者 root 應該列在這裡。您還應該確保其他特殊使用者帳戶(如 lp、shutdown、mail 等)也列在這裡。
ftpaccess 檔案用於配置安全性、使用者定義等問題。它實際上是通用配置檔案。您可以在此處設定的一些有趣設定是:loginfails [number]
where number is a number that stands for the amount of times that a user is allowed to fail to authenticate before being totally disabled.
shutdown [filename]
where filename is the name of a file that, if it exists, automatically shuts down the FTP server without a need to actually close the port in the /etc/inetd.conf file and then restarting inetd.
最後,ftpconversions 檔案用於允許客戶端對檔案進行特殊的“即時”轉換,例如自動解壓縮下載的檔案。
在 FTP 客戶端連線時向其返回自定義橫幅是一個好主意,因為它有助於掩蓋 FTP 伺服器執行的系統是什麼。您可以使用 TCP 包裝器或以下描述的方法向傳入連線傳送橫幅。
在 /etc/ftpaccess 的配置檔案中新增以下行:banner /etc/banners/warning.msg
橫幅檔案的內容應該類似於:Hello, all activity on ftp.example.com is logged.
登入後,所有使用者都會看到一個歡迎橫幅。預設情況下,此橫幅包含版本資訊,這些資訊對試圖識別系統漏洞的駭客很有用。要更改 wu-ftpd 的歡迎橫幅,請在 /etc/ftpusers 中新增以下指令:greeting text <insert_greeting_here> Securing FTP servers
由於 FTP 透過不安全的網路傳遞未加密的使用者名稱和密碼進行身份驗證,因此建議阻止系統使用者從其使用者帳戶訪問伺服器。要在 wu-ftpd 中停用使用者帳戶,請在 /etc/ftpusers 中新增以下指令:deny-uid * 要在 wu-ftpd 中停用特定使用者帳戶,請將使用者名稱新增到 /etc/ftpusers
設定匿名 FTP 的最佳方式是配置一個 chroot 監獄:與其允許完全訪問系統,不如將訪問許可權限制在一個給定的目錄中。換句話說,匿名使用者登入系統後,只能訪問使用者 ftp 的主目錄,而不能訪問其他任何地方。如果使用者輸入 cd /,在大多數其他情況下,這應該會將使用者帶到系統的根目錄,但它只會將使用者帶到 /home/ftp(這是使用者 ftp 的預設主目錄)。
大多數發行版,如 RedHat,都提供了一個匿名 ftp 包,以幫助準備 chroot 監獄。重要的是,要給您的嚴格 FTP 使用者在 Linux 系統上不提供任何真實的 shell 帳戶。這樣一來,如果有人能夠成功地從 FTP chroot 環境中退出(有關定義,請參見下文),由於他們沒有 bash shell,因此他們將無法執行任何使用者任務。首先,為此目的建立新使用者。由於 chroot 環境的工作方式,這必須與具有無限訪問許可權的常規使用者帳戶分開。Chroot 會讓使用者感覺好像他們所在的 檔案系統級別是檔案系統的頂層。
使用 /dev/null 作為 shell 為這些新使用者設定 shell,並在允許的 shell 列表 /etc/shells 中新增 /dev/null。還要確保在 /etc/passwd 中,他們的主目錄列為 /home/./ftp(對於使用者 ftp),即使實際目錄是 /home/ftp
設定一個 chroot 使用者環境:您實際上是在建立一個包含足夠必要元件(二進位制檔案、密碼檔案等)的骨架根檔案系統,以允許 Unix 在使用者登入時執行 chroot。請注意,wu-ftpd 可能會使用 --enable-ls 選項進行編譯,在這種情況下,/home/ftp/bin 和 /home/ftp/lib 目錄將不再需要,因為這個新選項允許 Wu-ftpd 使用它自己的 ls 函式。我們仍然會演示舊方法,供那些希望將 /bin/ls 複製到 chroot 的 FTP 目錄 /home/ftp/bin 中,並建立相應的庫相關工具的人使用。以下是使用 chroot 監獄執行 Wu-ftpd 軟體所需的步驟:首先建立所有必要的 chroot 環境目錄
[root@deep ] /# mkdir /home/ftp/dev [root@deep ] /# mkdir /home/ftp/etc [root@deep ] /# mkdir /home/ftp/bin [root@deep ] /# mkdir /home/ftp/lib
出於安全原因,將新目錄的許可權更改為 0511:chmod 命令將使我們的 chroot 的 dev、etc、bin 和 lib 目錄可供超級使用者 root 讀取和執行,並可供使用者組和所有使用者執行
[root@deep ] /# chmod 0511 /home/ftp/dev/ [root@deep ] /# chmod 0511 /home/ftp/etc/ [root@deep ] /# chmod 0511 /home/ftp/bin [root@deep ] /# chmod 0511 /home/ftp/lib
將 /bin/ls 二進位制檔案複製到 /home/ftp/bin 目錄,並將 ls 程式的許可權更改為 0111。您不希望使用者能夠修改二進位制檔案
[root@deep ] /# cp /bin/ls /home/ftp/bin [root@deep ] /# chmod 0111 /bin/ls /home/ftp/bin/ls
查詢 ls Linux 二進位制程式的共享庫依賴項:
[root@deep ] /# ldd /bin/ls
libc.so.6 => /lib/libc.so.6 (0x00125000)
/lib/ld-linux.so.2 =7gt; /lib/ld-linux.so.2 (0x00110000)
將上面識別的共享庫複製到 /home/ftp 目錄下的新 lib 目錄
[root@deep ] /# cp /lib/libc.so.6 /home/ftp/lib/ [root@deep ] /# cp /lib/ld-linux.so.2 /home/ftp/lib/
建立 /home/ftp/dev/null 檔案
[root@deep ] /# mknod /home/ftp/dev/null c 1 3 [root@deep ] /# chmod 666 /home/ftp/dev/null
將 group 和 passwd 檔案複製到 /home/ftp/etc 目錄。這應該與您的真實檔案不同。因此,我們將在這兩個檔案(passwd 和 group)中刪除所有非 FTP 使用者,除了超級使用者 root。
編輯 passwd 檔案,vi /home/ftp/etc/passwd,並刪除除超級使用者 root 和您的允許 FTP 使用者之外的所有條目。chroot 環境中的 passwd 檔案必須包含以下條目
root:x:0:0:root:/:/dev/null ftpadmin:x:502:502::/ftpadmin/:/dev/null
(這裡要注意兩點:首先,這個修改後的 passwd 檔案中所有使用者的 home 目錄都已更改,以反映新的 chroot FTP 目錄,即 /home/ftp/./ftpadmin/ 以 /ftpadmin/ 開頭,其次,root 帳戶的使用者登入 shell 名稱已更改為 /dev/null)編輯 group 檔案,vi /home/ftp/etc/group,並刪除除超級使用者 root 和所有允許的 FTP 使用者之外的所有條目。group 檔案應該與您的常規 group 檔案相對應
root:x:0:root ftpadmin:x:502:
現在,我們必須將 chroot 監獄目錄中的 passwd 和 group 檔案設定為不可變,以提高安全性。
[root@deep ] /# cd /home/ftp/etc/ [root@deep ] /# chattr +i passwd
設定 group 檔案上的不可變位
[root@deep ] /# cd /home/ftp/etc/ [root@deep ] /# chattr +i group
透過建立 /etc/pam.d/ftp 檔案並新增以下行,將 /etc/pam.d/ftp 檔案配置為使用 pam 身份驗證
#%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny \ file=/etc/ftpusers onerr=succeed auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_shells.so account required /lib/security/pam_pwdb.so session required /lib/security/pam_pwdb.so
如果要允許匿名使用者上傳,建議您在 /var/ftp/pub/ 中建立一個只寫目錄。為此,請輸入以下命令
mkdir /var/ftp/pub/upload
接下來,更改許可權,以便匿名使用者無法看到目錄中的內容,方法是鍵入以下命令
chmod 744 /var/ftp/pub/upload
該目錄的長格式列表應該如下所示
drwxr--r-- 2 root ftp 4096 Aug 20 18:26 upload
=== 練習 ===。
說明:候選人應該能夠配置 sshd 以允許或拒絕 root 登入,啟用或停用 X 轉發。此目標包括生成伺服器金鑰、生成使用者的公鑰/私鑰對、將公鑰新增到使用者的 authorized_keys 檔案以及為所有使用者配置 ssh-agent。候選人還應該能夠配置埠轉發以透過 ssh 隧道傳輸應用程式協議,配置 ssh 以支援 ssh 協議版本 1 和 2,在系統維護期間停用非 root 登入,為 ssh 登入配置信任的客戶端,無需密碼,以及從多個主機進行多個連線,以防止在配置更改後連線到遠端主機的丟失。
關鍵檔案、術語,以及實用程式包括
ssh, sshd /etc/ssh/sshd_config ~/.ssh/identity.pub, ~/.ssh/identity ~/.ssh/authorized_keys .shosts, .rhosts
OpenSSH 是 SSH (Secure Shell) 協議的免費開源實現。它使用安全、加密的網路連線工具替換 telnet、ftp、rlogin、rsh 和 rcp。OpenSSH 支援 SSH 協議的 1.3、1.5 和 2.0 版本。
如果您使用 OpenSSH 工具,那麼您將增強計算機的安全性。所有使用 OpenSSH 工具的通訊(包括密碼)都已加密。Telnet 和 ftp 使用明文密碼,並以未加密的方式傳送所有資訊。資訊可能會被攔截,密碼可能會被檢索,然後您的系統可能會被未經授權的人員使用攔截的密碼之一登入到您的系統。只要有可能,都應該使用 OpenSSH 工具集,以避免這些安全問題。使用 OpenSSH 的另一個原因是,它會自動將 DISPLAY 變數轉發到客戶端機器。換句話說,如果您在本地機器上執行 X Window 系統,並且您使用 ssh 命令登入到遠端機器,那麼當您在遠端機器上執行需要 X 的程式時,它將在本地機器上顯示。如果您更喜歡圖形系統管理工具,但並非始終能夠訪問伺服器,那麼這將很方便。
ssh 命令是 rlogin、rsh 和 telnet 命令的安全替代方案。它允許您登入到遠端機器並執行遠端機器上的命令。
使用 ssh 登入到遠端機器類似於使用 telnet。要登入到名為 penguin.example.net 的遠端機器,請在 shell 提示符處鍵入以下命令:ssh penguin.example.net
第一次使用 ssh 連線到遠端機器時,您會看到類似於以下內容的訊息:無法驗證主機 'penguin.example.net' 的真實性。
DSA key fingerprint is 94:68:3a:3a:bc:f3:9a:9b:01:5d:b3:07:38:e2:11:0c. Are you sure you want to continue connecting (yes/no)? Type yes to continue. This will add the server to your list of known hosts as seen in the following message: Warning: Permanently added 'penguin.example.net' (DSA) to the list of known hosts.
接下來,您會看到一個提示,要求您輸入遠端機器的密碼。輸入密碼後,您將處於遠端機器的 shell 提示符處。如果您在沒有任何命令列選項的情況下使用 ssh,那麼您在本地客戶端機器上登入的使用者名稱將傳遞到遠端機器。如果要指定不同的使用者名稱,請使用以下命令
ssh -l username penguin.example.net
您也可以使用語法 ssh username@penguin.example.net。ssh 命令可用於在遠端機器上執行命令,而不必登入到 shell 提示符。語法是 ssh hostname command。例如,如果要執行遠端機器 penguin.example.net 上的命令 ls /usr/share/doc,請在 shell 提示符處鍵入以下命令
ssh penguin.example.net ls /usr/share/doc
輸入正確的密碼後,/usr/share/doc 的內容將顯示,您將返回到 shell 提示符。
scp 命令可用於透過安全、加密的連線在機器之間傳輸檔案。它類似於 rcp。
將本地檔案傳輸到遠端系統的通用語法是 scp localfile user@hostname:/newfilename。localfile 指定源,而 user@hostname:/newfilename 組指定目標。要將本地檔案 shadowman 傳輸到 penguin.example.net 上您的帳戶,請在 shell 提示符處鍵入以下內容(將 user 替換為您的使用者名稱)
scp shadowman user@penguin.example.net:/home/user
這將把本地檔案 shadowman 傳輸到 penguin.example.net 上的 /home/user/shadowman。將遠端檔案傳輸到本地系統的通用語法是 scp user@hostname:/remotefile /newlocalfile。remotefile 指定源,而 newlocalfile 指定目標。
可以指定多個檔案作為原始檔。例如,要將 /downloads 目錄的內容傳輸到遠端機器 penguin.example.net 上名為 uploads 的現有目錄,請在 shell 提示符處鍵入以下內容
scp /downloads/* username@penguin.example.net:/uploads/
sftp 實用程式可用於開啟安全、互動式的 FTP 會話。它類似於 ftp,但使用安全的加密連線。通用語法為 sftp 使用者名稱@主機名.com。身份驗證後,您可以使用一組類似於 FTP 的命令。有關這些命令的列表,請參閱 sftp 手冊頁。要閱讀手冊頁,請在 shell 提示符下執行命令 man sftp。sftp 實用程式僅在 OpenSSH 2.5.0p1 及更高版本中可用。
如果您不想在每次 ssh、scp 或 sftp 到遠端機器時輸入密碼,您可以生成授權金鑰對。
注意:單獨的授權金鑰對您必須為 SSH 協議 1(RSA)和 SSH 協議 2(DSA)擁有單獨的授權金鑰對。
警告:每個使用者都需要自己的金鑰對!
必須為每個使用者生成金鑰。要為使用者生成金鑰,請以要連線到遠端機器的使用者身份執行以下步驟。如果您以 root 身份完成以下步驟,則只有 root 才能使用這些金鑰。
使用以下步驟生成 DSA 金鑰對。DSA 由 SSH 協議 2 使用,並且是 Red Hat 的預設值。1. 要生成用於與協議版本 2.0 配合使用的 DSA 金鑰對,請在 shell 提示符下鍵入以下命令
ssh-keygen -t dsa
接受預設檔案位置 ~/.ssh/id_dsa。輸入與您的帳戶密碼不同的密碼短語,並透過再次輸入確認它。
(密碼短語是用於驗證使用者的一串單詞和字元。密碼短語與密碼的不同之處在於您可以在密碼短語中使用空格或製表符。密碼短語通常比密碼更長,因為它們通常是短語,而不僅僅是一個單詞。)
2. 使用命令 chmod 755 ~/.ssh 更改 .ssh 目錄的許可權。
3. 將 ~/.ssh/id_dsa.pub 的內容複製到要連線到的機器上的 ~/.ssh/authorized_keys2。如果檔案 ~/.ssh/authorized_keys2 不存在,您可以將檔案 ~/.ssh/id_dsa.pub 複製到另一臺機器上的檔案 ~/.ssh/authorized_keys2。
使用以下步驟為 SSH 協議的版本 2.0 生成 RSA 金鑰對。
1. 要生成用於與協議版本 2.0 配合使用的 RSA 金鑰對,請在 shell 提示符下鍵入以下命令
ssh-keygen -t rsa
接受預設檔案位置 ~/.ssh/id_rsa。輸入與您的帳戶密碼不同的密碼短語,並透過再次輸入確認它。[1]
2. 使用命令 chmod 755 ~/.ssh 更改 .ssh 目錄的許可權。
3. 將 ~/.ssh/id_rsa.pub 的內容複製到要連線到的機器上的 ~/.ssh/authorized_keys2。如果檔案 ~/.ssh/authorized_keys2 不存在,您可以將檔案 ~/.ssh/id_rsa.pub 複製到另一臺機器上的檔案 ~/.ssh/authorized_keys2。
使用以下步驟生成 RSA 金鑰對,該金鑰對由 SSH 協議的版本 1 使用。
1. 要生成 RSA(用於版本 1.3 和 1.5 協議)金鑰對,請在 shell 提示符下鍵入以下命令
ssh-keygen
接受預設檔案位置 (~/.ssh/identity)。輸入與您的帳戶密碼不同的密碼短語。透過再次輸入確認密碼短語。
2. 使用命令 chmod 755 ~/.ssh 和 chmod 644 ~/.ssh/identity.pub 更改 .ssh 目錄和金鑰的許可權。
3. 將 ~/.ssh/identity.pub 的內容複製到要連線到的機器上的檔案 ~/.ssh/authorized_keys。如果檔案 ~/.ssh/authorized_keys 不存在,您可以將檔案 ~/.ssh/identity.pub 複製到遠端機器上的檔案 ~/.ssh/authorized_keys。
=== 練習 ===。
描述:考生應該能夠配置 tcpwrappers 以僅允許從某些主機或子網連線到指定的伺服器。
關鍵檔案、術語,以及實用程式包括
inetd.conf, tcpd hosts.allow, hosts.deny xinetd
TCP wrapper 是一個用於控制對網路服務的訪問的系統。對於每個受 TCP wrapper 保護的服務,都會使用 tcpd 程式,它會查詢兩個檔案,以按順序定義訪問許可權。
/etc/hosts.deny: if a rule here is met, access is denied /etc/hosts.allow: if a rule here is met, access is allowed
規則被構建為匹配所有服務或特定服務。如果在兩個檔案中都沒有匹配項,則授予訪問許可權。
通常在 /etc/hosts.allow 中設定特定規則,並在 /etc/hosts.deny 中提供一個全域性拒絕(即拒絕所有內容,除非專門允許)。規則格式為
[list of services] : [list of hosts]
即:拒絕所有傳入請求,除了來自本地域的 FTP
/etc/hosts.allow : ftp : LOCAL
/etc/hosts.deny : ALL : ALL
=== 練習 ===。
描述:考生應該能夠安裝和配置 kerberos 並執行原始碼的基本安全審計。該目標包括安排從 Bugtraq、CERT、CIAC 或其他來源接收安全警報,能夠測試開放郵件中繼和匿名 FTP 伺服器,安裝和配置入侵檢測系統(如 snort 或 Tripwire)。考生還應該能夠在發現新的漏洞時更新 IDS 配置,並應用安全補丁和錯誤修復。
關鍵檔案、術語,以及實用程式包括
Tripwire nessus netsaint snort telnet nmap
任務:安裝和配置 Kerberos
安裝
配置檔案
Kerberos 參考
使用 atelnet 客戶端測試/除錯您的伺服器,這意味著您對使用的協議有一些瞭解:閱讀相應的 RFC。定期檢視 Bugtraq、CERT 等安全郵件列表。儘快修補您的系統!
定期在您的系統上執行安全掃描程式。網路安全掃描程式 Nessus 和 Netsaint 廣泛使用,非常受關注,並且是開源的。Bastille Linux 是一個很棒的基於主機的安全掃描程式。使用一些入侵檢測系統 (IDS),包括基於網路的和基於主機的。Tripwire Snort
不要忘記:安全是一個永無止境的程序,而不是一種狀態或產品!