1. 程式人生 > >Linux學習(第十二週)

Linux學習(第十二週)

第十二週學習內容:防火牆、日誌、時鐘和sudo許可權管理

第十二週作業:

1、詳述iptables五鏈。

      每臺主機可能同時要開啟多個埠供其他主機的程序或者服務訪問,但在現今的網路環境中隨意開放埠是非常危險的行為,可能會被另有企圖的人所利用進行各種***。而防火牆的最根本功能就是堵住所有埠,不讓網路上其他主機任意訪問,就叫包過濾功能。防火牆的工作原理就是在資料包必經之地設定關卡,也可理解為鉤子,在這些關卡上設定各種規則,對資料包進行過濾,只留下安全可靠的資料包進入使用者空間。資料包到達主機就遇到了第一個關卡叫PREROUTING,經過路由後,部分資料包是訪問本機使用者空間的則會經過INPUT,而不訪問本機只是進行轉發的將送往FORWARD,同樣的從本機發出去往其他主機的資料包先要經過OUTPUT,通過PREROUTING和OUTPUT檢查的資料包在經過路由後需再經由POSTOUTING檢查後方可發出,總結下來共有5個關卡:PREROUTING-INPUT-FORWARD-OUTPUT-POSTOUTING,他們所組成的架構叫做netfilter,也就是防火牆的核心。Linux的防火牆程式經過許多代的發展現在使用的是iptables,而在iptables中這5個關卡一般被稱為五鏈。iptables的功能非常強大,除了使用最多的包過濾功能fliter以外,還有nat(地址轉換)、mangle(QOS和策略路由)、raw(關閉nat時其記錄的表項中的連線追蹤資訊),這4個功能每個對應一張表,合起來就被稱為四表。所以可以把iptables的核心內容簡稱為四表五鏈,在寫具體規則時一定要寫清楚在哪張表的哪個鏈上具體部署哪項規則。


2、舉例實現iptables多埠匹配、連線追蹤、字串匹配、時間匹配、併發連線限制、速率匹配、報文狀態匹配等應用 。

      iptables上定義規則一般有兩個大方向,全部拒絕放行白名單或全部放行拒絕黑名單,前者更安全一些。規則由兩部分組成,匹配條件和處理動作,即根據匹配條件來嘗試匹配報文,一旦匹配成功則由處理動作做出相應的處理。匹配條件可分為基本和擴充套件,處理動作也有基本、擴充套件和自定義。iptables命令的基本用法:iptables [-t+表]+命令+鏈+規則,預設是加在fliter表上的。

      準備三臺主機:IP地址為10.0.0.8-10.0.0.10。在主機3上配置iptables規則,用主機1和2去做測試,

      多埠匹配:要利用擴充套件匹配條件,需要載入擴充套件模組multiport,表示以離散或連續的方式定義多埠匹配條件,最多15個。

      主機3上啟用了ftp和http服務,在沒有配置iptables的情況下,主機1和2都可以正常訪問

      image.png

      image.png

      image.png

      在主機3上做iptables安全配置,禁止主機2訪問http和ftp服務,主機1依然可以正常訪問

      image.png

      image.png

      image.png

      字串匹配:顧名思義用來匹配字串的,利用了string模組,之後還要跟上子選項--algo定義匹配演算法,有bm和kmp兩種,而--string則是定義具體匹配內容的。

      主機3上定義iptables,拒絕向主機2傳送帶有“xiaomao”字串的資源,而對主機1無影響

      image.png

      image.png

      image.png

      時間匹配:用來匹配訪問時間的,使用time擴充套件模組,之後跟上子選項--timestart HH:MM[:SS]表示起始時間,--timestop HH:MM[:SS]表示結束時間,--weekdats #表示每週幾,--monthdays #表示每月幾號。

      在主機3上定義規則,拒絕主機2週末兩天的12:00-23:00訪問,主機1無影響

      image.png

      image.png

      image.png

      併發連線限制:用來限制單個使用者最多併發請求數量,使用connlimit擴充套件模組,之後跟上子選項--connlimit-upto #表示小於等於允許,--connlimit-above #表示大於拒絕。

      主機3上定義規則,主機2的連線數最多為2,超過將拒絕

      image.png

      主機2上使用了ftp和ssh進行連線,此時再發起http請求就失敗

      image.png

      image.png

      image.png

      速率匹配:用來限速的,是以報文個數為單位做限制,運用了令牌桶演算法,使用limit模組,子選項有--limit #/second或/minute或/hour或/day表示每秒每分每小時每天發多少個數據包

      主機3上定義規則,只允許主機2在1分鐘之內ping5個包,超過5個將被丟棄

      image.png

      image.png

      報文狀態匹配:利用了state模組,功能非常強大,依賴於連線追蹤功能。預設情況下,使用者訪問主機後,主機是沒有能力記錄下訪問者的資訊的,不止是web服務,所有c/s架構的服務都是如此。而在核心中有一個連線追蹤模組modprobe nf_conntrack,則會在記憶體中建立一張連線追蹤表,其中記錄了使用者的資訊,其中就包括了state模組中所利用到的狀態資訊。狀態資訊有如下幾種:NEW:新連線;ESTABLISHED:已建立的連線;UNTRACKED:不可追蹤的連線;RELATED:相關聯的連線;INVALID:無法識別的狀態等。基於這些狀態資訊,就可以對iptables做出更優化的規則了。

      主機3組織狀態為ESTABLISHED狀態的主機使用ssh登入

      image.png

      使用以後本地PC也無法ssh登入主機3了,所以此命令還是要謹慎使用,此模組在被動模式的ftp就很好用,在定義web服務訪問規則時也可以為管理員節省許多配置煩惱。

3、舉例實現iptables之SNAT源地址修改及DNAT目標地址修改和PNAT埠修改等應用。

      iptables除了可以用於fliter功能,還可以提供NAT地址轉換功能,分為SNAT和DNAT,源地址轉換和目標地址轉換。前者是服務於客戶端的,其訪問公網時可能沒有公網IP地址,就可以通過iptables將源地址轉換為公網地址;後者是服務於伺服器的,主要功能在於隱藏私網伺服器地址,對外公佈公網地址,公網客戶訪問是以公網地址作為目標地址的,通過iptables再轉換為私網地址併發給真正提供服務的伺服器。SNAT是工作在POSTROUTING鏈上的,而DNAT是工作在PREROUTING鏈上的。

      SNAT:有一個子選項--to-destination表示轉換為哪個地址

      image.png

      DNAT:使用--to-destination表示轉換為哪個地址

      image.png

      PNAT:使用--to-ports用來做埠對映,這利用了擴充套件動作REDIRECT。

      image.png

4、簡述sudo安全切換工具,及詳細講解visudoer。

      生產環境中很少會用到管理員去直接登入系統,因為非常危險,一個誤操作後果將不堪設想。一般都會使用普通使用者登入系統,在要用到管理員許可權時,利用su命令可以臨時切換到管理員去執行相關操作,但依然存在風險,而sudo命令是一個比較合適的解決辦法。sudo:能夠讓獲得授權的使用者以另外一個身份執行指定命令,用法:sudo+想要執行管理員許可權命令,如,sudo useradd user1。sudo的授權可以通過修改配置檔案/etc/sudoers來設定,也可以通過visudo命令,既可以修改配置檔案又可以檢查語法錯誤。

      visudoer:此檔案定義了授權配置,格式為who where=(whom)+命令,表示哪個使用者在哪臺主機上以哪個身份可以執行哪些命令,如,user1 ALL=(ALL) /usr/sbin/useradd,表示user1可以在所有主機上以所有使用者身份執行useradd命令,此格式中還有些配置選項:“!”表示非,如,命令段配置為“ALL,!/bin/su”表示其他所有命令都行,但不允許使用su命令,否則sudo su -root就又可以切換到root使用者了,非常危險,同樣的/usr/bin/passwd命令也應該禁掉;“NOPASSWD”表示無需密碼也能sudo執行的命令,加在命令之前。visudoer配置檔案中還定義了一個預設組wheel,只要把使用者加入該組就可以獲得ALL許可權;User_Alias和Cmnd_Alias定義使用者和命令的別名,可以依靠別名類配置授權。

      使用visudo命令進入配置檔案設定,新增使用者許可權

      image.png

      切換到普通使用者登入系統

      image.png

      執行useradd命令

      image.png

      執行su命令

      image.png