首先理解防火牆是什麼?
html
防火牆只是一個框架,真正想實現就須要規則,只有在出入口處定義防範策略,也才能識別好人仍是壞人;web
iptabels怎麼來的?
(1) iptables它只是命令行工具程序,位於用戶空間且只是通用規則編輯管理工具;
(2) 最先實如今內核中提供防火牆機制的是BSD UNIX,而Linux設計開發者參考了在BSD中的實現並開始引入到Linux內核當中來,最先的一代咱們叫IPfirewall也是2.0以前的版本。
(3) 2.2版本後叫ipchains,爲了解決應對防火牆上的不一樣策略而浮生。
(4) 2.4版本後叫iptables,爲了解決防火牆上諸多功能與不一樣策略而浮生。
ipfirewall是什麼?
ipfirewall簡稱ipfw,是在FreeBSD上開發的IP封包過濾程式,具有防火牆功能,由FreeBSD開發團隊負責維護。它曾被移植到多個平臺上,Mac OS X曾經採用它做爲預設防火牆,直到Mac OS X 10.7 Lion 採用另外一個FreeBSD程式PF來取代它。在94年艾倫·考克斯曾經將它移植到Linux 1.1上,做爲Linux的預設防火牆,直到Linux 2.4被iptable來取代。(摘自wiki)
iptables又是什麼?
咱們在上面已經說過,它只是一個命令行工具,只是一個運行在用戶空間的應用軟件,經過控制Linux內核netfilter模塊,來管理網絡數據包的流動與轉送。在大部分的Linux系統上面,iptables是使用/usr/sbin/iptables來操做,文件則放置在手冊頁(Man page[2])底下,能夠經過 man iptables 指令獲取。一般iptables都須要內核層級的模塊來配合運做,Xtables是主要在內核層級裏面iptables API運做功能的模塊。因相關動做上的須要,iptables的操做須要用到超級用戶的權限。(摘自wiki)
什麼是Firewall?
它是一種隔離工具(Packets Filter Firewall,即包過濾防火牆,帶狀態追蹤機制的包過濾防火牆)
工做於主機或網絡的邊緣,對經由的報文根據預先定義的規則(匹配條件)進行檢測,對於可以被規則匹配到的報文實行某預約義的處理機制的一套組件;
組件能夠是硬件級別或者是軟件級別算法
硬件防火牆:在硬件級別實現部分過濾功能的防火牆;另外一部分功能基於軟件實現;
提供通用功能支撐;
軟件防火牆:應用軟件處理邏輯運行於通用硬件平臺之上的防火牆;
提供複雜邏輯;
主機防火牆:服務範圍爲當前主機;
只爲單臺主機提供訪問策略;
網絡防火牆:服務範圍爲防火牆被的局域網;
整個邏輯是在軟件層實現的;
Linux系統內核級防火牆有兩個層面的工具組成
shell
netfilter與iptables
(1) Netfilter是由Rusty Russell提出的Linux 2.4內核防火牆框架。該框架既簡潔又靈活,可實現安全策略應用中的許多功能,如數據包過濾、數據包處理、地址假裝、透明代理、動態網絡地址轉換(Network Address Translation,NAT),以及基於用戶及媒體訪問控制(Media Access Control,MAC)地址的過濾和基於狀態的過濾、包速率限制等。Iptables/Netfilter的這些規則能夠經過靈活組合,造成很是多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想;
(2) Netfilter是Linux操做系統核心層內部的一個數據包處理模塊,它具備以下功能:
網絡地址轉換(Network Address Translate);
數據包內容修改;
以及數據包過濾的防火牆功能;
(3) Netfilter 平臺中制定了數據包的五個掛載點(Hook Point,可理解爲鉤子函數,數據包到達這些位置的時候會主動調用咱們的函數,使咱們有機會能在數據包路由的時候改變它們的方向、內容);這5個掛載點分別是 PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING;
(4) iptables:Netfilter 所設置的規則是存放在內核內存中的,而 iptables 是一個應用層的應用程序,它經過 Netfilter 放出的接口來對存放在內核內存中的 XXtables(Netfilter的配置表)進行修改。這個XXtables由表tables、鏈chains、規則rules組成,iptables在應用層負責修改這個規則文件。相似的應用程序還有 firewalldcentos
iptables的四表與五鏈
安全
四表;tables
filter:過濾,防火牆;
nat:network address translation,網絡地址轉換;
mangle:拆解報文,作出修改,並從新封裝;
raw:關閉nat表上啓用的鏈接追蹤機制;
五鏈;CHAINS
prerouting 路由前
input 入站
forward 轉發
output 出站
postrouting 路由後
四個表的功能講解
bash
filter表:
主要用於對數據包進行過濾,根據具體的規則決定是否放行該數據包(如DROP,ACCEPT,REJECT);
filter 表對應的內核模塊爲iptable_filter,包含三個規則鏈:
INPUT鏈:針對哪些目的地是本地的包;
FORWARD鏈:過濾全部不是本地產生的而且目的地不是本地(即本機只是負責轉發)的包;
OUTPUT鏈:是用來過濾全部本地生成的包;
nat表:
主要用於修改數據包的IP端口等信息(網絡地址轉換,如SNAT,DNAT,MASQUERADE,REDIRECT);
屬於一個流的包(由於包的大小限制致使數據可能會被分紅多個數據包)只會通過這個表一次。若是第一個包被容許作NAT或Masqueraded,那麼餘下的包都會自動地被作相同的操做,也就是說餘下的包不會再經過這個表。表對應的內核模塊爲 iptable_nat,包含三個鏈:
PREROUTING鏈:做用是在包剛剛到達防火牆時改變它的目的地址;
OUTPUT鏈:改變本地產生的包的目的地址;
POSTROUTING鏈:在包就要離開防火牆以前改變其源地址;
mangle表:
主要用於修改數據包的TOS(Type Of Service,服務類型)、TTL(Time To Live,生存週期)指以及爲數據包設置Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,因爲須要相應的路由設備支持,所以應用並不普遍;
包含五條規則鏈:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD ;
raw表:
是自1.2.9之後版本的iptables新增的表,主要用於決定數據包是否被狀態跟蹤機制處理。在匹配數據包時,raw表的規則要優先於其餘表;
包含兩條規則鏈;OUTPUT與PREROUTING;網絡
五個鏈的功能講解
併發
在處理各類數據包時,根據防火牆規則的不一樣介入時機,iptables供涉及5種默認規則鏈;app
從應用時間點的角度理解這些鏈:
(1) INPUT鏈:當接收到防火牆本機地址的數據包(入站)時,應用此鏈中的規則;
(2) OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則;
(3) FORWARD鏈:當接收到須要經過防火牆發送給其餘地址的數據包(轉發)時應用此鏈中的規則;
(4) PREROUTING鏈:在對數據包做路由選擇以前,應用此鏈中的規則,如DNAT;
(5) POSTROUTING鏈:在對數據包做路由選擇以後,應用此鏈中的規則,如SNAT;
iptables中數據包和4種被跟蹤鏈接的4種不一樣狀態:
(1) NEW:該包想要開始一個鏈接(從新鏈接或將鏈接重定向) ;
(2) RELATED:該包是屬於某個已經創建的鏈接所創建的新鏈接;
例如:FTP的數據傳輸鏈接就是控制鏈接所 RELATED出來的鏈接。–icmp-type 0 ( ping 應答) 就是–icmp-type 8 (ping 請求)所RELATED出來的;
(3) ESTABLISHED :只要發送並接到應答,一個數據鏈接從NEW變爲ESTABLISHED,並且該狀態會繼續匹配這個鏈接的後續數據包;
(4) INVALID:數據包不能被識別屬於哪一個鏈接或沒有任何狀態好比內存溢出,收到不知屬於哪一個鏈接的ICMP錯誤信息,通常應該DROP這個狀態的任何數據;
報文的請求方式和報文的流向
報文的請求:
(1) 由本機流出的報文 請求別人;
響應別人;
(2) 流入本機的報文 別人直接請求進來的;
本身請求出去別人響應進來的;
報文的流向:
(1) 到本機某進程的報文:PREROUTING –> INPUT;
(2) 由本機轉發的報文:PREROUTING –> FORWARD –> POSTROUTING;
(3) 由本機的某進程發出報文:OUTPUT –> POSTROUTING;
注意:接口自己沒有方向,咱們在寫規則的時候要考慮報文的流經方向;
iptables規則的組成部分即數據包的處理方式
上面咱們已經說過了四表五鏈(功能與鉤子)的對應關係,而真正去管理實現防火牆的基本功能是須要iptables這個管理工具來實現;
注意:整個防火牆的規則是由iptables來編寫;
那iptables規則的組成到底有哪些呢?
一、匹配條件:
對一個報文的檢查部分有;
網絡層首部:Source IP, Destination IP ;
傳輸層首部:Source Port, Destination Port ;
應用層首部:需藉助於擴展檢查機制方可實現;
擴展檢查機制:須要iptables_netfilter擴充一些功能才能檢查(以模塊化呈現) ;
二、處理動做:target 叫處理目標
ACCEPT–接收容許,DROP–丟棄,REJECT–拒絕;
安裝使用iptables/netfilter
安裝信息摘要:
(1) 實驗的系統環境:CentOS 7.2
(2) netfilter是位於內核中的TCP/IP協議棧報文處理框架,可以使用模塊管理命令mod查看模塊信息;
(3) iptables定義的規則是在用戶空間定義的,而後送往內存中的內核上,重啓自動消失;
(4) iptables不是服務,即須要配置文件來保存規則也可寫入腳本使其開機自動運行;
(5) 針對CentOS平臺不一樣系統版本的iptables管理實現: CentOS 5/6:iptables命令編寫規則
~]# iptables -t filter -F
~]# service iptables save
服務腳本: /etc/init.d/iptables (可複製到CentOS7上同樣可運行)
CentOS 7:firewalld(守護進程),firewall-cmd(命令行工具), firewall-config(配置文件)
~]# systemctl disable firewalld (服務關閉,先disable後stop)
iptables安裝:
程序包:iptables(ipv4包過濾和NAT轉換管理工具)
iptstate(狀態追蹤工具)
保證明驗須要先安裝應用程序: ~]# yum install httpd samba telent vsftpd -y
用iptables命令去寫規則時須要注意的問題
規則匹配方法:
根據指定匹配條件來嘗試匹配每一個流經此處報文,一旦匹配成功則由規則後面指定處理動做進行處理
規則匹配的條件:主要匹配IP層首部特徵;
基本匹配條件:源地址,目標地址,傳輸層協議;
擴展匹配條件:須要藉助於擴展模塊進行指定的匹配條件(有兩種);
隱式擴展:已經在基本匹配條件中指明的協議相關的擴展;
顯式擴展:隱式擴展以外的其它擴展匹配條件;
處理動做:
基本動做:ACCEPT,DROP,…
擴展動做:須要藉助於擴展模塊進行,但無須顯式指定,僅需指明動做,大寫都是指明擴展 ;
添加規則時須要考量的問題(重點):
(1) 報文流經的位置:用於判斷將規則添加至哪一個鏈;
(2) 實現的功能:用於判斷將規則添加至哪一個表;
(3) 報文的方向:用於判斷哪一個爲「源」,哪一個爲「目標」;
(4) 匹配條件:用於編寫可以正確匹配目標報文的規則;
舉例:阻止來自於10.1.0.101訪問本機的web服務
iptables命令的多種使用格式
通用規則管理格式:
iptables [-t able] COMMAND chain cretieria [-m [per-match-options]] [-j targetname [per-target-options]]
注意:-t table 表示指明要管理的表,默認爲filter且優先級最低;
COMMANDS(子命令):
對鏈自己管理:
-P:iptables [-t table] -P chain target,定義鏈的默認策略;其target通常可以使用ACCEPT或DROP; 由於防火牆風格兩種:白名單,黑名單 一但設置爲DROP則外部訪問全拒絕 舉例:~]# iptables -t filter -P INPUT DROP (改默認策略爲DROP) -N:chain,自定義規則鏈;僅在默認鏈經過某規則進行調用方可生效;所以,每一個自定義鏈都有其引用記數; iptables [-t table] -N 舉例:~]# iptables -N in_web (0 references=零次引用) 注意:自定義鏈規則不會送入到鉤子上的,自定義鏈想要生效必須在內置鏈上去引用它; 每個自定義鏈都會有被引用計數,爲零表示沒有被引用; -X:iptables [-t table] -X [chain],刪除自定義的空的引用計數爲0的鏈; 舉例:~]# iptables -X (慎用...如未加X選項表示刪除全部鏈,且不可逆) -F:iptables [-t table] -F [chain [rulenum]] [options...],清空指定的鏈,或刪除指定鏈上的規則 ; -E:iptables [-t table] -E old-chain-name new-chain-name,重命名自定義的引用計數爲0的鏈; 舉例:~]# iptables -E in_web in_httpd -Z:iptables [-t table] -Z [chain [rulenum]] [options...] 置零計數器 每條規則以及鏈的默認策略分別有各自的兩個計數器: (1) 匹配到的報文的個數:pkts (2) 匹配到的全部報文的大小之和:bytes 舉例:~]# iptables -Z INPUT (屢次刷新)
鏈的規則管理:
-A:append, iptables [-t table] -A chain rule-specification 追加規則到指定的鏈尾部,增; -I:insert, iptables [-t table] -I chain [rulenum] rule-specification 插入規則到指定的鏈中的指定位置,默認爲鏈首; -D:delete,iptables [-t table] -D chain rule-specification或iptables [-t table] -D chain rulenum第幾號規則 刪除指定的鏈上的指定規則,刪; -R:replace,iptables [-t table] -R chain rulenum rule-specification 將指定的鏈上的指定規則替換爲新的規則,改;
規則顯示的字段表示的意思:
pkts:由此包所匹配到的報文個數; bytes:由此規則所匹配到的包的大小之和/字節數; target:表示匹配到的規則是target; prot:表示被這個規則所匹配到的協議protocol; opt選項: in:報文限制從哪一個接口流入; out:報文限制從哪一個接口流出; source:源地址; destination:目標地址; 注意:若是定義的鏈沒有被任何規則所匹配,則默認被策略所匹配(policy ACCEPT 806 packets,94361 bytes);
查看:
-L:list, iptables [-t table] -L [chain [rulenum]] [options...] -n:數字格式; -v:verbose,詳細格式信息; -vv, -vvv; --line-numbers:顯示鏈上的規則的編號; -x:exactly,顯示計數器的精確值; -t:查看不一樣的表 ~]# iptables -t nat -vnL ~]# iptables -vnL
iptables的匹配條件
匹配條件咱們在上面已經講過了,在這裏注意一點就能夠;
即多重條件之間的隱含邏輯爲「與」操做;
基本匹配條件:
[!] -s, –source address[/mask][,…] 檢查報文中的源IP地址是否符合此處指定的地址或地址範圍; [!] -d, –destination address[/mask][,…] 檢查報文中的目標IP地址是否符合此處指定的地址或地址範圍; [!] -p, –protocol protocol: 檢查報文中傳輸層的協議類型,支持tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh,或者 「all」; [!] -i, –in-interface name 檢查報文進入本機時的接口是否符合本處指定的接口; 支持INPUT, FORWARD and PREROUTING ; [!] -o, –out-interface name 檢查報文即將離開本機時經由的接口是否符合本處指定的接口; 支持FORWARD, OUTPUT and POSTROUTING; -m, –match match:顯式指明要使用的擴展模塊; -j, –jump target:跳轉目標; 舉例:針對本機入站凡事來自於10.1.0.0/16網絡請求都被容許,凡事來自於10.1.253.44訪問本機的請求都拒絕; ~]# iptables -I INPUT -s 10.1.253.44 -j REGECT ~]# iptables -t filter -A INPUT -s 10.1.0.0/16 -j ACCEPT 把以上所拒絕的源網絡地址匹配規則改成DROUP ~]# iptables -R INPUT 1 -s 10.1.253.44 -j DROP 再也不阻斷10.1.253.44報文請求,放行 ~]# iptables -vnL –line-numbers (先看規則處在哪一個條目上) ~]# iptables -D INPUT 1 不指明匹配條件,指明number數 ~]# iptables -D INPUT -s 10.1.253.44 -j DROP(指明匹配條件) 舉例:本機只容許本機上的tcp請求服務,請求放行 ~]# iptables -A INPUT -s 10.1.253.0.0/16 -d 10.1.253.43 -p tcp -j ACCEPT ~]# iptables -R INPUT 1 -j REGECT 注意:不一樣類別的規則,匹配機會更大,訪問比較頻繁的放在前面(注意前後順序)
擴展匹配條件:
隱式擴展:
不用-m選項明確給出要使用的擴展機制的擴展; 此處主要指使用-p {tcp|udp|icmp}給定協議後可直接對給定的協議所進行的擴展;(不指定-m擴展即爲隱式擴展) ; -p tcp:可直接使用tcp協議對應的擴展選項; [!] –source-port,–sport port[:port]:匹配報文中的傳輸層的源端口;可給出多個鏈接的端口; 21:22:23 [:20,20:] [!] –destination-port,–dport port[:port]:匹配報文中的傳輸層的目標端口;可給出多個鏈接的端口; 21:22:23 [:20,20:] [!] –tcp-flags mask comp 報文標誌位:SYN,ACK,FIN,RST,URG,PSH; mask:要檢查的標誌位列表,以逗號分隔,例如SYN,ACK,FIN,RST comp:mask給定的衆標誌位中,其值必須爲1的標誌位列表,餘下的必須爲0; –tcp-flags SYN,ACK,FIN,RST SYN [!] –syn:至關於–tcp-flags SYN,ACK,FIN,RST SYN -p udp:可直接使用udp協議對應的擴展選項; [!] –source-port,–sport port[:port]:匹配報文中的傳輸層的源端口;可給出多個鏈接的端口; 21:22:23 [:20,20:] [!] –destination-port,–dport port[:port]:匹配報文中的傳輸層的目標端口;可給出多個鏈接的端口; 21:22:23 [:20,20:] -p icmp:可直接使用icmp協議對應的擴展選項,主要指定icmp類型用來探測主機或網絡的可用性 [!] –icmp-type {type[/code]|typename} –icmp-type 0/0:匹配對ping請求的響應報文 –icmp-type 8/0:匹配ping請求報文 舉例:只開放本機的openssh服務的22端口給本地網絡(整個網絡只放行openssh 22端口) ~]# iptables -A INPUT -s 10.1.0.0/16 -d 10.1.253.43 -p tcp –dport 22 -j ACCEPT 入站 入站整個網絡我只放行22端口 ~]# iptables -A OUTPUT -d 10.1.0.0/16 -s 10.1.253.43 -p tcp –sport 22 -j ACCEPT 出站 出站整個網絡我只放行22端口 ~]# iptables -P INPUT DROP ~]# iptables -P OUTPUT DROP 舉例:開放本機的ping請求 ping請求報文:8/0 :請求報文是進入本機的 ~]# iptables -A INPUT -s 10.1.0.0/16 -d 10.1.253.43 -p icmp –icmp-type 8/0 -j ACCEPT 抓包看一看 tcpdump -i eno16777736 -nnn icmp ping響應報文:0/0 :響應報文是由本機發出去的 別人ping本身 ~]# iptables -A OUTPUT -d 10.1.0.0/16 -s 10.1.253.43 -p icmp –icmp-type 0/0 -j ACCEPT 本身ping他人,出站 ~]# iptables -A OUTPUT -s 10.1.253.43 -d 0.0.0.0/0 -p icmp –icmp-type 8/0 -j ACCEPT 先讓你請求出現,不讓你出去/狀態是 ~]# iptables -A INPUT -d 10.1.253.43 -s 0.0.0.0/0 -p icmp –icmp-type 0/0 -j ACCEPT
擴展匹配條件:
顯式擴展:
必須使用-m選項給出matchname的擴展,並且有些擴展都還存在專用選項; 一、multiport 以離散或連續的方式定義的多端口匹配條件; Up to 15 ports can be specified. [!] --source-ports,--sports port[,port|,port:port]...:指定多個源端口; [!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標端口; [!] --ports port[,port|,port:port]...:匹配此處指定的源或目標端口; 使用一條規則開放本機的21,22,23,80端口 ~]# useradd centos ~]# iptables -A INPUT -d 10.1.253.43 -p tcp -m multiport --dports 21,22,23,80 -j ACCEPT 入站 ~]# iptables -A OUTPUT -s 10.1.253.43 -p tcp -m multiport --sports 21,22,23,80 -j ACCEPT 出站 二、iprange 以連續的ip地址範圍指明多地址匹配條件; 端口支持連續,不支持離散 地址不支持連續,支持離散 [!] --src-range from[-to] [!] --dst-range from[-to] 三、string 對報文中的應用層數據作字符串匹配檢測; [!] --string pattern [!] --hex-string pattern --algo {bm|kmp}:字符串匹配檢查算法; --from offset --to offset 舉例:網站包含sex字段,響應時阻斷 ~]# iptables -I OUTPUT -s 10.1.253.43 -p tcp --sports 80 -m string --string "sex" --algo bm -j REGECT ~]# curl 10.1.253.43/index.html ~]# curl 10.1.253.43/index2.html 四、time 根據報文到達的時間與指定的時間範圍進行匹配度檢測; --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --monthdays day[,day...] [!] --weekdays day[,day...] 舉例:阻斷telnet在非工做時間訪問 ~]# iptables -I INPUT -d 10.1.253.43 -p tcp --dport 23 -m time --timestart 16:00:01 --timestop 09:59:00 --weekdays sat sun -j REJECT 指定這天 i~]# ptables -I INPUT -d 10.1.253.43 -p tcp --dport 23 -m time --weekdays Thursday -j REJECT 五、connlimit 根據每客戶端IP作併發鏈接數限制,即限制單IP可同時發起鏈接請求; --connlimit-upto n:鏈接數小於等於閾值;小於等於 --connlimit-above n:鏈接數超出閾值;大於 ~]# iptables -I INPUT -d 10.1.0.6 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT 舉例:ssh服務,每一個客戶端單IP最大發出鏈接請求不能夠超出2個 ~]# iptables -I INPUT -d 10.1.253.43 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REGECT 六、limit 基於收發報文的速率進行匹配; --limit rate[/second|/minute|/hour|/day] --limit-burst number 舉例:容許別人對本機發起ping請求,每3秒鐘接收一次ping請求, ~]# iptables -A INPUT -d 10.1.253.43 -p icmp --icmp-type 8 -m limit --limit-burst 3 --limit 20/minute -j ACCEPT 入站 ~]# iptables -A OUTPUT -d 10.1.253.43 -p icmp --icmp-type 0 -j ACCEPT 出站 七、state (包) 狀態檢測:鏈接追蹤機制(conntrack) NEW:新鏈接 ESTABLISHED:已創建的鏈接 (注意) RELATED:相關聯的鏈接 (注意) INVALID:沒法識別的鏈接 UNTRACKED:未被追蹤鏈接; [!] --state state 舉例:只放行已創建鏈接指定端口並放行 ~]# iptables -A INPUT -d 10.1.253.43 -p tcp -m multiport --dports 22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT 入站 ~]# iptables -R OUTPUT 1 -m state --state --state ESTABLISHED -j ACCEPT 出站 ~]# iptables -A INPUT -d 10.1.253.43 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT (只要是ESTABLISHED通通放行) ~]# iptables -R INPUT 2 -d 10.1.253.43 -p tcp -m multiport --dports 21:23,80 -m state --state NEW -j ACCEPT(21,22,23,80只放行NEW) 如何開放被動模式的ftp服務: (1) 裝載追蹤ftp協議的模塊; ~]# modprobe nf_conntrack_ftp (2) 放行入站命令鏈接 ~]# iptables -A INPUT -d SERVER_IP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT (3) 放行入站數據鏈接 ~]# iptables -A INPUT -d SERVER_IP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT (4) 放行出站的ESTABLISHED鏈接 ~]# iptabls -A OUTPUT -s SERVER_IP -m state --state ESTABLISHED -j ACCEPT done !
處理動做(跳轉目標):
-j tagetname [per-target-options] 簡單target: ACCEPT,DROP 用rpm -ql iptables看到有不少大寫小寫模塊,其大寫用於指明target,小寫用於指明條件對的 擴展target: REJECT: --reject-with type icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreach‐able, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited,默認爲icmp-port-unreachable; LOG: Turn on kernel logging of matching packets. --log-level level --log-prefix prefix:日誌信息的前導信息; 舉例:他人訪問我本機ssh服務時,都將記錄到日誌當中,怎麼作? ~]# iptables -I INPUT 2 -d 10.1.253.43 -p tcp --dport 22 -j LOG --log-prefix "openssh from kernel"
保存和載入規則:
保存:iptables-save > /PATH/TO/SOME_RULE_FILE; 重載:iptables-restore < /PATH/FROM/SOME_RULE_FILE; -n, --noflush:不清除原有規則; -t, --test:僅分析生成規則集,但不予提交; 注意:重載文件中的規則,會清除已有規則; 針對不一樣CentOS版本的保存規則方法: CentOS 6: 保存規則:service iptables save; 保存規則於/etc/sysconfig/iptables,保存操做會清除文件中原有的內容; 重載規則:server iptables restart; 默認重載/etc/sysconfig/iptables文件中的規則; 腳本配置文件:/etc/sysconfig/iptables-config用於指明要裝載的模塊; CentOS 7開機自動生效規則: (1) firewalld服務; (2) shell腳本,直接記錄iptables命令; (3) 自定義unit file或init script;
對規則優化的思路
(1) 優先放行雙方向狀態爲ESTABLISHED的報文;
(2) 服務於不一樣類別的功能的規則,匹配到報文可能性更大的放前面;
(3) 服務於同一類別的功能的規則,匹配條件較爲嚴格的放前面;
(4) 設置默認策略:白名單機制(默認都拒絕,只容許單行)
(a) 可以使用iptables -P設定默認策略;
(b) 建議在規則鏈的最後定義規則作爲默認策略;
(5)重點:
1.首先查本地arp cache信息,看是否有對方的mac地址和IP地址映射條目記錄
2.若是沒有,則發起一個arp請求廣播包,等待對方告知具體的mac地址
3.收到arp響應包以後,得到某個IP對應的具體mac地址,有了物理地址以後才能夠開始通訊了,
同時對ip-mac地址作一個本地cache
4.發出icmp echo request包,收到icmp echo reply包
注意:每每不少人都忽略了上面3步,只知道有最後一步。
若是設置了默認規則都爲DROP:則應該在進出口作相應放行策略,以避免被本身殺掉本身
~]# iptables -A INPUT -d 10.1.253.43 -j DROP ~]# iptables -P INPUT ACCEPT ~]# iptables -A OUTPUT -d 10.1.253.43 -j DROP ~]# iptables -P OUTPUT ACCEPT
這一篇的主機防火牆知識就到到這裏了。下一篇的文章會主要介紹網絡防火牆與nat表的簡要信息;So...春節到了小生在這裏祝福你們「新年快樂」,闔家安康。咱們來年繼續努力工做,努力學習...