哪家公司建設網(wǎng)站嘉興關鍵詞優(yōu)化報價
實驗目的
通過該實驗了解Linux防火墻iptables實現(xiàn)原理,掌握iptables基本使用方法,能夠利用iptables對操作系統(tǒng)進行加固。
預備知識
基本原理
netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,具有完成封包過濾、封包重定向和網(wǎng)絡地址轉(zhuǎn)換(NAT)等功能。netfilter是Linux 核心中一個通用架構,它提供了一系列的"表"(tables),每個表由若干"鏈"(chains)組成,而每條鏈中可以有一條或數(shù)條規(guī)則(rule)組成??梢赃@樣來理解,netfilter是表的容器,表是鏈的容器,而鏈又是規(guī)則的容器。
規(guī)則(rules)其實就是網(wǎng)絡管理員預定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。規(guī)則存儲在內(nèi)核空間的信息包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數(shù)據(jù)包與規(guī)則匹配時,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則。
iptables內(nèi)置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現(xiàn)包過濾,網(wǎng)絡地址轉(zhuǎn)換、包重構(修改)和數(shù)據(jù)跟蹤處理。
鏈(chains)是數(shù)據(jù)包傳播的路徑,每一條鏈其實就是眾多規(guī)則中的一個檢查清單,每一條鏈中可以有一條或數(shù)條規(guī)則。當一個數(shù)據(jù)包到達一個鏈時,iptables就會從鏈中第一條規(guī)則開始檢查,看該數(shù)據(jù)包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會根據(jù)該鏈預先定義的默認策略來處理數(shù)據(jù)包。
iptables采用“表”和“鏈”的分層結(jié)構。在REHL4中是三張表五個鏈?,F(xiàn)在REHL5成了四張表五個鏈了如下:
系統(tǒng)缺省的表為"filter",該表中包含了INPUT、FORWARD和OUTPUT 3個鏈。每一條鏈中可以有一條或數(shù)條規(guī)則,每一條規(guī)則都是這樣定義的“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。當一個數(shù)據(jù)包到達一個鏈時,系統(tǒng)就會從第一條規(guī)則開始檢查,看是否符合該規(guī)則所定義的條件: 如果滿足,系統(tǒng)將根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;如果不滿足則繼續(xù)檢查下一條規(guī)則。最后,如果該數(shù)據(jù)包不符合該鏈中任一條規(guī)則的話,系統(tǒng)就會根據(jù)該鏈預先定義的策略(policy)來處理該數(shù)據(jù)包。
數(shù)據(jù)包在filter表中的流程為:有數(shù)據(jù)包進入系統(tǒng)時,系統(tǒng)首先根據(jù)路由表決定將數(shù)據(jù)包發(fā)給哪一條鏈,則可能有三種情況:
1.如果數(shù)據(jù)包的目的地址是本機,則系統(tǒng)將數(shù)據(jù)包送往INPUT鏈,如果通過規(guī)則檢查,則該包被發(fā)給相應的本地進程處理;如果沒通過規(guī)則檢查,系統(tǒng)就會將這個包丟掉;
2.如果數(shù)據(jù)包的目的地址不是本機,也就是說,這個包將被轉(zhuǎn)發(fā),則系統(tǒng)將數(shù)據(jù)包送往FORWARD鏈,如果通過規(guī)則檢查,則該包被發(fā)給相應的本地進程處理;如果沒通過規(guī)則檢查,系統(tǒng)就會將這個包丟掉;
3.如果數(shù)據(jù)包是由本地系統(tǒng)進程產(chǎn)生的,則系統(tǒng)將其送往OUTPUT鏈,如果通過規(guī)則檢查,則該包被發(fā)給相應的本地進程處理;如果沒通過規(guī)則檢查,系統(tǒng)就會將這個包丟掉。
iptables執(zhí)行流程圖
如下圖所示,iptables在處理數(shù)據(jù)包時,將按照下面流程執(zhí)行:
①當一個數(shù)據(jù)包進入網(wǎng)卡時,它首先進入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
②如果數(shù)據(jù)包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數(shù)據(jù)包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包會經(jīng)過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
③如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會如圖所示向右移動,經(jīng)過FORWARD鏈,然后到達POSTROUTING鏈輸出。
iptables表、鏈說明
規(guī)則表
1.filter表——三個鏈:INPUT、FORWARD、OUTPUT。
作用:過濾數(shù)據(jù)包
內(nèi)核模塊:iptables_filter
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡地址轉(zhuǎn)換(IP、端口)
內(nèi)核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務類型、TTL、并且可以配置路由實現(xiàn)QOS
內(nèi)核模塊:iptable_mangle
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數(shù)據(jù)包是否被狀態(tài)跟蹤機制處理
內(nèi)核模塊:iptable_raw
規(guī)則鏈
1.INPUT——進來的數(shù)據(jù)包應用此規(guī)則鏈中的策略;
2.OUTPUT——外出的數(shù)據(jù)包應用此規(guī)則鏈中的策略;
3.FORWARD——轉(zhuǎn)發(fā)數(shù)據(jù)包時應用此規(guī)則鏈中的策略;
4.PREROUTING——對數(shù)據(jù)包作路由選擇前應用此鏈中的規(guī)則;
5.POSTROUTING——對數(shù)據(jù)包作路由選擇后應用此鏈中的規(guī)則。
規(guī)則表之間的優(yōu)先順序:
規(guī)則表之間按照Raw、mangle、nat、filter的順序進行過濾,具體分三種情況:
第一種情況:入站數(shù)據(jù)流向
從外界到達防火墻的數(shù)據(jù)包,先被PREROUTING規(guī)則鏈處理(是否修改數(shù)據(jù)包地址等),之后會進行路由選擇(判斷該數(shù)據(jù)包應該發(fā)往何處),如果數(shù)據(jù)包的目標主機是防火墻本機(比如說Internet用戶訪問防火墻主機中的web服務器的數(shù)據(jù)包),內(nèi)核將其傳給INPUT鏈進行處理(決定是否允許通過等),通過以后再交給系統(tǒng)上層的應用程序(比如Apache服務器)進行響應。
第二種情況:轉(zhuǎn)發(fā)數(shù)據(jù)流向
來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING規(guī)則鏈處理,之后會進行路由選擇,如果數(shù)據(jù)包的目標地址是其它外部地址(比如局域網(wǎng)用戶通過網(wǎng)關訪問QQ站點的數(shù)據(jù)包),則內(nèi)核將其傳遞給FORWARD鏈進行處理(是否轉(zhuǎn)發(fā)或攔截),然后再交給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進行處理。
第三種情況:出站數(shù)據(jù)流向
防火墻本機向外部地址發(fā)送的數(shù)據(jù)包(比如在防火墻主機中測試公網(wǎng)DNS服務器時),首先被OUTPUT規(guī)則鏈處理,之后進行路由選擇,然后傳遞給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進行處理。
iptables語法
語法:iptables [-t table] command [match] [-j target/jump]
1)[-t table] 指定規(guī)則表
-t 參數(shù)用來,內(nèi)建的規(guī)則表有三個,分別是:nat、mangle 和 filter,當未指定規(guī)則表時,則一律視為是 filter。個規(guī)則表的功能如下:
nat:此規(guī)則表擁有 PREROUTING 和 POSTROUTING 兩個規(guī)則鏈,主要功能為進行一對一、一對多、多對多等網(wǎng)址轉(zhuǎn)換工作(SNAT、DNAT),這個規(guī)則表除了作網(wǎng)址轉(zhuǎn)換外,請不要做其它用途。
mangle:此規(guī)則表擁有 PREROUTING、FORWARD 和 POSTROUTING 三個規(guī)則鏈。除了進行網(wǎng)址轉(zhuǎn)換工作會改寫封包外,在某些特殊應用可能也必須去改寫封包(TTL、TOS)或者是設定markMARK(將封包作記號,以進行后續(xù)的過濾),這時就必須將這些工作定義在 mangle 規(guī)則表中,由于使用率不高,這里不討論 mangle 的用法。
filter:這個規(guī)則表是默認規(guī)則表,擁有 INPUT、FORWARD 和 OUTPUT 三個規(guī)則鏈,這個規(guī)則表顧名思義是用來進行封包過濾的處理動作(例如:DROP、 LOG、 ACCEPT 或 REJECT),需要將基本規(guī)則都建立在此規(guī)則表中。
2)command 常用命令列表:
命令:-A, --append;范例:iptables -A INPUT ...;說明:新增規(guī)則到某個規(guī)則鏈中,該規(guī)則將會成為規(guī)則鏈中的最后一條規(guī)則。
命令:-D, --delete;范例:iptables -D INPUT --dport 80 -j DROP,iptables -D INPUT 1;說明:從某個規(guī)則鏈中刪除一條規(guī)則,可以輸入完整規(guī)則,或直接指定規(guī)則編號加以刪除。
命令:-R, --replace;范例:iptables -R INPUT 1 -s 192.168.0.1 -j DROP;說明:取代現(xiàn)行規(guī)則,規(guī)則被取代后并不會改變順序。
命令:-I, --insert;范例:iptables -I INPUT 1 --dport 80 -j ACCEPT;說明:插入一條規(guī)則,原本該位置上的規(guī)則將會往后移動一個順位。
命令:-L, --list;范例1 :iptables -L INPUT,說明: 列出某規(guī)則鏈中的所有規(guī)則;范例2:iptables -t nat -L ,說明:列出nat表所有鏈中的所有規(guī)則。
命令:-F, --flush;范例:iptables -F INPUT;說明:刪除filter表中INPUT鏈的所有規(guī)則。
命令:-Z, --zero;范例:iptables -Z INPUT;說明:將封包計數(shù)器歸零。封包計數(shù)器是用來計算同一封包出現(xiàn)次數(shù),是過濾阻斷式攻擊不可或缺的工具。
命令:-N, --new-chain;范例:iptables -N allowed;說明:定義新的規(guī)則鏈。
命令:-X, --delete-chain;范例:iptables -X allowed;說明:刪除某個規(guī)則鏈。
命令: -P, --policy;范例:iptables -P INPUT DROP;說明:定義過濾政策。 也就是未符合過濾條件之封包, 默認的處理方式。
命令:-E, --rename-chain;范例:iptables -E allowed disallowed;說明:修改某自定義規(guī)則鏈的名稱。
3)[match] 常用封包匹配參數(shù)
參數(shù):-p, --protocol;范例:iptables -A INPUT -p tcp;說明:匹配通訊協(xié)議類型是否相符,可以使用 ! 運算符進行反向匹配,例如:-p !tcp,意思是指除 tcp 以外的其它類型,如udp、icmp等;如果要匹配所有類型,則可以使用 all 關鍵詞,例如:-p all。
參數(shù):-s, --src, --source;范例:iptables -A INPUT -s 192.168.1.1;說明:用來匹配封包的來源 IP,可以匹配單機或網(wǎng)絡,匹配網(wǎng)絡時請用數(shù)字來表示 子網(wǎng)掩碼,例如:-s 192.168.0.0/24,匹配 IP 時可以使用 ! 運算符進行反向匹配,例如:-s !192.168.0.0/24。
參數(shù):-d, --dst, --destination;范例:iptables -A INPUT -d 192.168.1.1;說明:用來匹配封包的目的地 IP,設定方式同上。
參數(shù):-i, --in-interface;范例:iptables -A INPUT -i eth0;說明:用來匹配封包是從哪塊網(wǎng)卡進入,可以使用通配字符 + 來做大范圍匹配,例如:-i eth+ 表示所有的 ethernet 網(wǎng)卡,也可以使用 ! 運算符進行反向匹配,例如:-i !eth0。
參數(shù):-o, --out-interface;范例:iptables -A FORWARD -o eth0;說明:用來匹配封包要從哪 塊網(wǎng)卡送出,設定方式同上。
參數(shù):--sport, --source-port;范例:iptables -A INPUT -p tcp --sport 22;說明:用來匹配封包的源端口,可以匹配單一端口,或是一個范圍,例如:--sport 22:80表示從 22 到 80 端口之間都算是符合條件,如果要匹配不連續(xù)的多個端口,則必須使用 --multiport 參數(shù),詳見后文。匹配端口號時,可以使用 ! 運算符進行反向匹配。
參數(shù):--dport, --destination-port;范例:iptables -A INPUT -p tcp --dport 22;說明:用來匹配封包的目的地端口號,設定方式同上
參數(shù):--tcp-flags;范例:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN;說明:匹配 TCP 封包的狀態(tài)標志,參數(shù)分為兩個部分,第一個部分列舉出想 匹配的標志,第二部分則列舉前述標志中哪些有被設置,未被列舉的標志必須是空的。TCP 狀態(tài)標志包括:SYN(同步)、ACK(應答)、FIN(結(jié)束)、RST(重設)、URG(緊急) 、PSH(強迫推送) 等均可使用于參數(shù)中,除此之外還可以使用關鍵詞 ALL 和 NONE 進行匹配。匹配標志時,可以使用 ! 運算符行反向匹配。
參數(shù):--syn;范例:iptables -p tcp --syn;說明:用來表示TCP通信協(xié)議中,SYN位被打開,而ACK與FIN位關閉的分組,即TCP的初始連接,與 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 !運算符,可用來 匹配非要求連接封包。
參數(shù):-m multiport --source-port;范例:iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110;說明:用來匹配不連續(xù)的多個源端口,一次最多可以匹配 15 個端口,可以使用 ! 運算符進行反向匹配。
參數(shù):-m multiport --destination-port;范例:iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110;說明:用來匹配不連續(xù)的多個目的地端口號,設定方式同上。
參數(shù):-m multiport --port;范例:iptables -A INPUT -p tcp -m multiport --port 22,53,80,110;說明:這個參數(shù)比較特殊,用來匹配源端口和目的端口號相同的封包,設定方式同上。注意:在本范例中,如果來源端口號為 80目的地端口號為 110,這種封包并不算符合條件。
參數(shù):--icmp-type;范例:iptables -A INPUT -p icmp --icmp-type 8;說明:用來匹配 ICMP 的類型編號,可以使用代碼或數(shù)字編號來進行 匹配。請打 iptables -p icmp --help 來查看有哪些代碼可用。
參數(shù):-m limit --limit;范例:iptables -A INPUT -m limit --limit 3/hour;說明:用來匹配某段時間內(nèi)封包的平均流量,上面的例子是用來 匹配:每小時平均流量是否超過一次 3 個封包。 除了每小時平均次外,也可以每秒鐘、每分鐘或每天平均一次,默認值為每小時平均一次,參數(shù)如后: /second、 /minute、/day。 除了進行封 包數(shù)量的匹配外,設定這個參數(shù)也會在條件達成時,暫停封包的匹配動作,以避免因駭客使用洪水攻擊法,導致服務被阻斷。
參數(shù):--limit-burst;范例:iptables -A INPUT -m limit --limit-burst 5;說明:用來匹配瞬間大量封包的數(shù)量,上面的例子是用來匹配一次同時涌入的封包是否超過 5 個(這是默認值),超過此上限的封包將被直接丟棄。使用效果同上。
參數(shù):-m mac --mac-source;范例:iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01;說明:用來匹配封包來源網(wǎng)絡接口的硬件地址,這個參數(shù)不能用在 OUTPUT 和 POSTROUTING 規(guī)則鏈上,這是因為封包要送到網(wǎng) 卡后,才能由網(wǎng)卡驅(qū)動程序透過 ARP 通訊協(xié)議查出目的地的 MAC 地址,所以 iptables 在進行封包匹配時,并不知道封包會送到哪個網(wǎng)絡接口去。
參數(shù):--mark;范例:iptables -t mangle -A INPUT -m mark --mark 1;說明:用來匹配封包是否被表示某個號碼,當封包被匹配成功時,可以透過 MARK 處理動作,將該封包標示一個號碼,號碼最大不可以超過 4294967296。
參數(shù):-m owner --uid-owner;范例:iptables -A OUTPUT -m owner --uid-owner 500;說明:用來匹配來自本機的封包,是否為某特定使用者所產(chǎn)生的,這樣可以避免服務器使用 root 或其它身分將敏感數(shù)據(jù)傳送出,可以降低系統(tǒng)被駭?shù)膿p失。可惜這個功能無法 匹配出來自其它主機的封包。
參數(shù):-m owner --gid-owner;范例:iptables -A OUTPUT -m owner --gid-owner 0;說明:用來匹配來自本機的封包,是否為某特定使用者群組所產(chǎn)生的,使用時機同上。
參數(shù):-m owner --pid-owner;范例:iptables -A OUTPUT -m owner --pid-owner 78;說明:用來匹配來自本機的封包,是否為某特定進程所產(chǎn)生的,使用時機同上。
參數(shù):m owner --sid-owner;范例:iptables -A OUTPUT -m owner --sid-owner 100;說明:用來匹配來自本機的封包,是否為某特定 連接(Session ID)的響應封包,使用時機同上。
參數(shù):-m state --state;范例:iptables -A INPUT -m state --state RELATED,ESTABLISHED;說明:用來匹配連接狀態(tài), 連接狀態(tài)共有四種:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示該封包的連接編號(Session ID)無法辨識或編號不正確。
ESTABLISHED 表示該封包屬于某個已經(jīng)建立的連接。
NEW 表示該封包想要起始一個連接(重設連接或?qū)⑦B接重導向)。
RELATED 表示該封包是屬于某個已經(jīng)建立的連接,所建立的新連接。例如:FTP-DATA 連接必定是源自某個 FTP 連接。
4)[-j target/jump] 常用的處理動作:
-j 參數(shù)用來指定要進行的處理動作,常用的處理動作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,分別說明如下:
ACCEPT: 將封包放行,進行完此處理動作后,將不再匹配其它規(guī)則,直接跳往下一個規(guī)則鏈(natostrouting)。
REJECT: 攔阻該封包,并傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個封包會要求對方關閉 連接),進行完此處理動作后,將不再匹配其它規(guī)則,直接中斷過濾程序。 范例如下:iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP: 丟棄封包不予處理,進行完此處理動作后,將不再匹配其它規(guī)則,直接中斷過濾程序。
REDIRECT: 將封包重新導向到另一個端口(PNAT),進行完此處理動作后,將會繼續(xù)匹配其它規(guī)則。 這個功能可以用來實現(xiàn)透明代理或用來保護 web 服務器。例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE: 改寫封包來源 IP 為防火墻 NIC IP,可以指定 port 對應的范圍,進行完此處理動作后,直接跳往下一個規(guī)則 鏈(manglepostrouting)。這個功能與SNAT 略有不同,當進行 IP 偽裝時,不需指定要偽裝成哪個 IP,IP會從網(wǎng)卡直接讀取,當使用撥 號接連時,IP通常是由ISP公司的DHCP 服務器指派的,這個時候 MASQUERADE 特別有用。范例如下:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG: 將封包相關訊息紀錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 配置文件,進行完此處理動作后,將會繼續(xù)匹配其規(guī)則。例如:iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT: 改寫封包來源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將直接跳往下一個規(guī)則(mangleostrouting)。范例如下:iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT: 改寫封包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將會直接跳往下一個規(guī)則鏈(filter:input 或 filter:forward)。范例如下:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR: 鏡射封包,也就是將來源 IP 與目的地 IP 對調(diào)后,將封包送回,進行完此處理動作后,將會中斷過濾程序。
QUEUE: 中斷過濾程序,將封包放入隊列,交給其它程序處理。通過自行開發(fā)的處理程序,可以進行其它應用,例如:計算連接費用等。
RETURN: 結(jié)束在目前規(guī)則鏈中的過濾程序,返回主規(guī)則鏈繼續(xù)過濾,如果把自定義規(guī)則鏈看成是一個子程序,這個動作則就相當于提前結(jié)束子程序并返回到主程序中。
MARK: 將封包標上某個代號,以便提供作為后續(xù)過濾的條件判斷依據(jù),進行完此處理動作后,將會繼續(xù)匹配其它規(guī)則。范例如下:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
netstat語法
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
Netstat命令用于顯示各種網(wǎng)絡相關信息,如網(wǎng)絡連接,路由表,接口狀態(tài) (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。
-a?? (all)顯示所有選項,默認不顯示LISTEN相關
-t?? (tcp)僅顯示tcp相關選項
-u?? (udp)僅顯示udp相關選項
-n?? 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字
-l?? 僅列出有在 Listen (監(jiān)聽) 的服務狀態(tài)
-p?? 顯示建立相關鏈接的程序名
-r?? 顯示路由信息,路由表
-e?? 顯示擴展信息,例如uid等
-s?? 按各個協(xié)議進行統(tǒng)計
-c?? 每隔一個固定時間,執(zhí)行該netstat命令
提示:LISTEN和LISTENING的狀態(tài)只有用-a或者-l才能看到
1)列出所有端口(包括監(jiān)聽和未監(jiān)聽的)
列出所有端口 netstat -a
列出所有 tcp 端口 netstat -at
列出所有 udp 端口 netstat -au
2)列出所有處于監(jiān)聽狀態(tài)的 Sockets
只顯示監(jiān)聽端口 netstat -l
只列出所有監(jiān)聽 tcp 端口 netstat -lt
只列出所有監(jiān)聽 udp 端口 netstat -lu
只列出所有監(jiān)聽 UNIX 端口 netstat -lx
3)顯示每個協(xié)議的統(tǒng)計信息
顯示所有端口的統(tǒng)計信息 netstat -s
顯示TCP端口的統(tǒng)計信息 netstat -st
顯示UDP端口的統(tǒng)計信息 netstat - su
4)在 netstat 輸出中顯示 PID 和進程名稱 netstat -p
netstat -p 可以與其它開關一起使用,就可以添加 “PID/進程名稱” 到 netstat 輸出中,這樣 debugging 的時候可以很方便的發(fā)現(xiàn)特定端口運行的程序。
5)在 netstat 輸出中不顯示主機,端口和用戶名(host, port or user)
當不想讓主機,端口和用戶名顯示,使用 netstat -n。將會使用數(shù)字代替那些名稱。
同樣可以加速輸出,因為不用進行比對查詢。
實驗環(huán)境
服務器:centos6.3,IP地址:10.1.1.112
測試者:win2003,IP地址隨機,可自己查看,在本例中為10.1.1.16
實驗步驟一
2013年王小虎同學經(jīng)過四年的學習,終于從北京某高校畢業(yè)了,歷經(jīng)千辛萬苦,終于應聘到了北京某大型信息公司,擔任網(wǎng)絡管理員,負責管理公司的機房與網(wǎng)絡,可是網(wǎng)管搞怎么搞,小虎同學有點迷茫了,下班后聯(lián)系了之前的學長一塊吃燒烤,請學長指點迷津……學長喝了一口牛欄山,說:沉住氣,Rome was not built in a day,想當好網(wǎng)管,首先學會用iptables這個神器!明天你先學會這幾個事情:
1、學會查看系統(tǒng)中iptables中已經(jīng)有的規(guī)則,知道如何關閉和啟用這些規(guī)則;
2、學會用iptables保護自己的主機,從最簡單開始,不讓別人用ping到主機或者用ssh訪問到主機;
3、學會如何利用iptables防御網(wǎng)絡DDos攻擊;
4、如果服務器不能關閉ssh,但是又要防止黑客的字典攻擊和暴力破解,管理員怎么樣用iptables來實現(xiàn)?
你先學會上面四個事情,iptables就算入門了,剩下的下次喝酒告訴你如何用iptables做nat吧。
任務一:學會查看系統(tǒng)中iptables中已經(jīng)有的規(guī)則,掌握如何關閉和啟用這些規(guī)則
1. 利用本機putty程序登錄到centos服務器中;
2. 利用windows操作機中桌面上的“putty.exe”程序,登錄centos服務器(IP地址:10.1.1.112,用戶名:root,密碼:123456)
如果出現(xiàn)證書信任的提示,選擇“是”,可以看到能夠登錄到centos主機,輸入給定的用戶名與密碼,登錄進,如下所示
3. 輸入命令,查看iptables狀態(tài);
#service iptables status????? 查看iptables狀態(tài)
由圖中可以看到在表filter中有三個chain,分別為INPUT、FORWARD和OUTPUT。
4. 關閉10.1.1.112上centos服務器的iptables防火墻,如下:
#service iptables stop
5. 保存并查看10.1.1.112服務器上iptables規(guī)則
在iptables中添加的規(guī)則即時生效,但重啟后規(guī)則將會丟失,因此需要保存規(guī)則,以便重啟時重新加載。
#/etc/init.d/iptables? save
實驗步驟二
學會用iptables保護自己的主機,不讓別人用ping
1、清空centos主機中iptables規(guī)則:
#iptables -F
2、登錄到windows操作機中,利用ping命令訪問10.1.1.112;
3、在主機centos中,加入對應的規(guī)則對centos服務器進行加固,使windows操作機中的無法ping通centos主機。在主機centos中,加入下列規(guī)則,并查看。
#iptables -A INPUT -p icmp -j DROP
發(fā)現(xiàn)規(guī)則已經(jīng)生效,無法ping通centos:
命令說明如下:
-A INPUT?? #表示在鏈INPUT中增加一條規(guī)則;
-p icmp?? #p指protocol(協(xié)議),指對icmp協(xié)議進行操作;
-j DROP?? #指動作為DROP(丟棄)。
?
學會REJECT參數(shù),并理解其與DROP兩者的區(qū)別
在上個任務中,已經(jīng)使用iptables的DROP處理使windows不能夠ping通centos主機;接下來,在centos主機中增加什么樣的iptables規(guī)則對centos服務器進行加固,能使windows操作機中的ping命令達到下面效果?
現(xiàn)在再試試用REJECT處理。首先,刪除剛才所加的規(guī)則。
1. 在centos主機中,輸入下列命令刪除iptables中的規(guī)則
# iptables? -F
2. 在centos主機中,加入下列新的iptables規(guī)則。
#iptables -A INPUT -p icmp -j REJECT
再次用Windows來ping,結(jié)果如下所示:
與之前DROP處理不一樣,ping操作返回Destination port unreachable。
實驗步驟三
如何利用iptables防御網(wǎng)絡DDos攻擊
1、在centos主機中,輸入命令# iptables? -F,刪除iptables中的規(guī)則
2、在windows操作機下下載attack攻擊程序
下載地址:http://tools.hetianlab.com/tools/attack/attack.zip
3、雙擊運行windows操作機運行攻擊工具attack.exe對centos發(fā)起洪水攻擊;
4、利用putty工具登錄centos主機,輸入命令:netstat -an,觀察centos服務器資源與網(wǎng)絡相關情況,發(fā)現(xiàn)大量對centos服務器10.1.1.112的111端口(rpc端口)的訪問。
5、繼續(xù)輸入命令:netstat -st,觀察centos服務器TCP統(tǒng)計信息,發(fā)現(xiàn)centos服務器短時間收到大量數(shù)據(jù)包。
6、由此判斷,有攻擊者進行對端口111(sunrpc)的tcp洪水攻擊,并且攻擊者偽裝了攻擊源IP地址,因此對111端口的tcp協(xié)議進行iptables規(guī)則設置:iptables -A INPUT -p tcp --dport 111 -j DROP,并查看
7、在centos服務器的iptables中輸入規(guī)則之后,等待2分鐘左右(centos回收資源需要一定時間),運行相關查看系統(tǒng)網(wǎng)絡信息,觀察洪水攻擊造成的影響;
8、請一定記住完成上一步之后,關閉windows操作機中的attack命令窗口,停止洪水攻擊。
實驗步驟四
如何利用iptables的recent模塊防御ssh字典攻擊
在某服務器應用中,為了遠程管理,SSH不能停掉,但是又要防止攻擊者的字典攻擊,試通過iptables配置,保證SSH的安全。
iptables的recent模塊可以根據(jù)源地址、目的地址對最近一段時間內(nèi)經(jīng)過本機的數(shù)據(jù)包的情況進行統(tǒng)計,并根據(jù)相應的規(guī)則執(zhí)行,命令如下:
--name?? #設定列表名稱,默認DEFAULT
--rsource?? #源地址,此為默認
--rdest ? #目的地址
--seconds?? #指定時間內(nèi)
--hitcount?? #命中次數(shù)
--set?? #將地址添加進列表,并更新信息,包含地址加入的時間戳
--rcheck ? #檢查地址是否在列表,以第一個匹配開始計算時間
--update?? #和rcheck類似,以最后一個匹配計算時間
--remove?? #在列表里刪除相應地址,后跟列表名稱及地址
1. 在centos主機中,輸入下列命令刪除iptables中的規(guī)則:
# iptables? -F
2. 依次點擊“開始”>>“所有程序”>>“Metasploit”>>“Metasploit Console;打開metasploit界面,等待幾分鐘出現(xiàn)msf提示符;
3. 在msf提示符下,輸入:use auxiliary/scanner/ssh/ssh_login對metasploit 進行配置
在msf auxiliary(ssh_login)提示符下:
a)輸入命令:set RHOSTS 10.1.1.112,設置SSH主機地址;
b)輸入命令:set PASS_FILE c:/pass.txt,設置字典文件;
c)輸入命令:set USERNAME root,設置破解的帳號名;
d)設置完成后輸入run命令運行字典攻擊
4. 利用putty登錄centos服務器,查看系統(tǒng)安全日志信息(/var/log/secure),輸入命令:cat /var/log/secure,發(fā)現(xiàn)大量相同IP地址登錄失敗信息,分析可能有人進行ssh暴力破解。
5. 繼續(xù)輸入命令:cat /var/log/secure | grep 10.1.1.16 | wc -l,對該IP地址進行統(tǒng)計,發(fā)現(xiàn)來自該IP地址的登錄失敗次數(shù)不停增長。
6. 在centos服務器上利用iptables的recent模塊進行主機加固。輸入如下命令:
a)iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --update --seconds 60 --hitcount 3 -j DROP
b)iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
規(guī)則過程分析:模擬一下某個電腦連接本機SSH服務的數(shù)據(jù)包流程,假設以下數(shù)據(jù)包是在一小時內(nèi)到達本機的:
?當這個電腦的第1個SSH包到達本機,規(guī)則a檢查SSHPOOL列表中這個源IP是否有hitcount,因為是第一個包,顯而易見,列表是0,規(guī)則a判定這個數(shù)據(jù)包不必執(zhí)行DROP,并且也不處理這個數(shù)據(jù)包,將數(shù)據(jù)包轉(zhuǎn)給下條規(guī)則;
?規(guī)則b將這個數(shù)據(jù)包計入SSHPOOL列表,就是做+1,因為規(guī)則中有-j ACCEPT,規(guī)則b放行這個包;
?當?shù)?個SSH包到達本機,規(guī)則a檢查SSHPOOL列表的hitcount,發(fā)現(xiàn)沒有超過3,于是判定不執(zhí)行DROP并轉(zhuǎn)給下條規(guī)則處理;
?規(guī)則b在SSHPOOL中+1,并放行,第2個數(shù)據(jù)包進入本機;
?第3個數(shù)據(jù)包過程如上;
?第4個包到達本機,規(guī)則a檢查SSHPOOL列表中的hitcount,發(fā)現(xiàn)是3了已經(jīng)連接3次了,于是執(zhí)行DROP,不必再轉(zhuǎn)給下條規(guī)則了丟棄該包。
從上面的流程可以看出,--set的功能在于計錄數(shù)據(jù)包,將源IP加入列表。--update的功能在于判定數(shù)據(jù)包在seconds和hitcount條件下是否要DROP。
7. 返回Windows操作機中,查看metasploit,發(fā)現(xiàn)SSH暴力破解由于連接錯誤終止。
?
部分實驗截圖:
centos服務器:
?
?window截圖:
?attack.exe 泛洪攻擊模塊截圖
?msf工具截圖:
?
?
?