真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

從零開始認識iptables

寫在前面

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供原陽網(wǎng)站建設(shè)、原陽做網(wǎng)站、原陽網(wǎng)站設(shè)計、原陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、原陽企業(yè)網(wǎng)站模板建站服務(wù),10余年原陽做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。


   在Linux運維工作中,在涉及Linux安全時,我們第一時間想到的一般都是iptables這個工具。作為一個linux初學(xué)者來講,在剛學(xué)習(xí)linux的過程中,有些實驗總是總不成功。這時我們總會檢查防火墻是否關(guān)閉,selinux是否關(guān)閉。在深入學(xué)習(xí)iptbales之后,這些以前知其然,不知其所以然的操作在內(nèi)心就很敞亮了。想深入學(xué)習(xí)一個東西,總要問一下what is it?

本節(jié)學(xué)習(xí)目標

  • 防火墻分類

  • Netfilter防火墻工作原理

  • iptables四表五鏈

  • iptables規(guī)則設(shè)定要點

  • iptables工具使用方法(熟練使用,包括主機防火墻配置,網(wǎng)絡(luò)防火墻配置,以及nat配置)

什么是防火墻?


防火墻是一種隔離工具。工作于主機或者網(wǎng)絡(luò)的邊緣,對于進出本主機或者本地網(wǎng)絡(luò)的報文根據(jù)事先定義好的規(guī)則做匹配檢測,對于能夠被規(guī)則所匹配到的報文做出相應(yīng)處理(允許,拒絕,丟棄等)。根據(jù)其管理的范圍來分可以將其劃分為主機防火墻和網(wǎng)絡(luò)防火墻。根據(jù)其工作機制來區(qū)分又可分為包過濾型防火墻(netfilter)和代理服務(wù)器(Proxy)。有些人把tcp_warrpers也劃分為防火墻的一種。這種是根據(jù)服務(wù)程序軟件的名稱來控制數(shù)據(jù)包的方法。

防火墻工作原理


包過濾防火墻Netfilter是linux內(nèi)核所支持的一個功能模塊框架。Iptables是配置管理Netfilter的一個軟件工具。所以Netfilter是工作與內(nèi)核空間的。Netfilter是內(nèi)核中一系列的鉤子(hook),為內(nèi)核模塊在網(wǎng)絡(luò)協(xié)議棧中的不同位置注冊回調(diào)函數(shù)(callback)。在數(shù)據(jù)包經(jīng)過網(wǎng)絡(luò)協(xié)議棧中的不同位置時做相應(yīng)的處理。

Netfilter中的五個鉤子NF_IP_PRE_ROUTING,NF_IP_LOCAL_IN,NF_IP_FORWARD,NF_IP_POST_ROUTING,NF_IP_LOCAL_OUT。。其中網(wǎng)絡(luò)數(shù)據(jù)包的流向圖如下圖所示

從零開始認識iptables

1網(wǎng)絡(luò)數(shù)據(jù)包從網(wǎng)卡進來之后進入內(nèi)核空間的TCP/IP協(xié)議棧進行層層解封裝;

2 在數(shù)據(jù)包剛剛進入網(wǎng)絡(luò)層的數(shù)據(jù)包通過NF_IP_PRE_FORWARD,在此店之后要進行一次路由選擇,當目標地址為本機地址時,數(shù)據(jù)進入NF_IP_LOCAL_IN,非本地的目標地址進入NF_IP_FORWARD,所以目標地址轉(zhuǎn)換通常在此點進行;

3 NF_IP_LOCAL_IN:經(jīng)過路由之后送往本地的數(shù)據(jù)包經(jīng)過此點,所以過濾INPUT包在此點進行。

4 NF_IP_FORWARD:經(jīng)過路由選擇之后要轉(zhuǎn)發(fā)的數(shù)據(jù)包經(jīng)過此點,所以網(wǎng)絡(luò)防火墻通常在此點配置。

5 NF_IP_LOCAL_OUT:由本地用戶空間應(yīng)用進程產(chǎn)生的數(shù)據(jù)包過此檢測點,所以O(shè)UTPUT包過濾在此點進行。

6 NF_IP_POST_ROUTING:剛剛通過NF_IP_FORWARD和NF_IP_LOCAL_OUT檢測點的數(shù)據(jù)包要通過一次路由選擇由哪個接口送往網(wǎng)絡(luò)中,經(jīng)過路由之后的數(shù)據(jù)包要通過NF_IP_POST_ROUTING此檢測點,所以,源地址轉(zhuǎn)換通常在此點進行。

 

iptables的四表五鏈

iptables是工作在用戶空間的一個管理netfilter的工具,該工具默認有五條鏈(chain), REROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING分別由netfilter的五個鉤子函數(shù)來觸發(fā)。Iptables設(shè)有四張表,用以實現(xiàn)Netfilter的不同功能。

filter表:iptables中使用最廣泛的表,作用是進行包過濾,由此表來決定該數(shù)據(jù)包是否繼續(xù)向它的目標地址前進。

Nat表:又此表的名稱可以看出,該表用于網(wǎng)絡(luò)地址轉(zhuǎn)換用的,這也就是防火墻的另外一個功能,對源地址或者目標地址的修改。

mangle表:mangle表用于對ip報文的首部信息進行修改。

raw表:raw表的功能是為防火墻提供一種禁用連接狀態(tài)追蹤的機制,在大流量對外業(yè)務(wù)的服務(wù)器上使用這個表可以有效的避免連接追蹤帶來的性能問題,比如游戲服務(wù)器通常通過此表或者重新編譯內(nèi)核的方式禁用防火墻的連接追蹤機制。

除此之外,在iptable的幫助文檔中提到還有一張security表,用于在數(shù)據(jù)包總加入selinux特×××,該表很少用到,這里不再詳述。

Iptables的四張表有著不同的處理優(yōu)先級,raw-->mangle-->nat -->filter,從左至右優(yōu)先級依次降低。由于數(shù)據(jù)包進入?yún)f(xié)議棧中的鉤子的位置不同以及表的優(yōu)先級順序不同,所以防火墻對于數(shù)據(jù)包的處理順序特別容易混淆,這里引用一張胥峰前輩的處理順序圖(由于該圖顯示不清晰,可到附件下載):

從零開始認識iptables

 

iptables規(guī)則

想要配置一個較為安全的防火墻策略就需要了解其規(guī)則的組成以及設(shè)置規(guī)則時所需要思考的要點。

規(guī)則組成:報文的匹配條件,匹配到之后的處理動作

匹配條件:根據(jù)協(xié)議報文特征指定匹配條件,基本匹配條件和擴展匹配條件

處理動作:內(nèi)建處理機制由iptables自身提供的一些處理動作

自定義處理機制:可自定義鏈來對匹配到的報文做處理。

注意:報文不會經(jīng)過自定義鏈,只能在內(nèi)置鏈上通過規(guī)則進行引用后生效,也就是所自定義鏈為規(guī)則的一個處理動作的集合。

 

設(shè)置iptables規(guī)則時需要考量的要點:

1、根據(jù)要實現(xiàn)哪種功能,判斷添加在那張表上;

2、根據(jù)報文流經(jīng)的路徑,判斷添加在那個鏈上

       流入:PREROUTING--->INPUT

       流出:OUTPUT--->POSTROUTING

       轉(zhuǎn)發(fā):PREROUTING---->FORWARD--->POSTROUTING

             

鏈上其規(guī)則的次序,即為檢查的次序,排列好檢查次序能有效的提高性能,因此隱含一定的法則

1、同類規(guī)則(訪問同一應(yīng)用),匹配范圍小的放上面

2、不同類規(guī)則(訪問不同應(yīng)用),匹配到報文頻率大的放上面:

3、將那些可由一條規(guī)則描述的多個規(guī)則合并為一個

4、設(shè)置默認策略

遠程連接主機配置防火墻時注意要點:

1,不要把鏈的默認策略修改為拒絕。因為有可能配置失敗或者清除所有策略后無法遠程到服務(wù)器。盡量使用規(guī)則條目配置默認策略

2,為防止配置失誤策略把自己也拒掉,可在配置策略時設(shè)置計劃任務(wù)定時清除策略。當確定無誤后,關(guān)閉該計劃任務(wù)。

磨刀不誤砍柴工,當以上的東西在腦海中已經(jīng)有一個框架之后,再學(xué)習(xí)iptables規(guī)則管理工具才會得心應(yīng)手。

iptables工具使用方法

Man文檔是學(xué)習(xí)工具的最好方法。這里不再詳述,下面把我的學(xué)習(xí)筆記粘貼出來,以供讀者參考如有錯誤敬請指正。

    iptables命令:

        iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain  rule-specification

       iptables [-t table] -I chain [rulenum]  rule-specification

       iptables [-t table] -R chain rulenum  rule-specification

       iptables [-t table] -D chain rulenum

       iptables [-t table] -S [chain  [rulenum]]

       iptables [-t table] {-F|-L|-Z} [chain  [rulenum]] [options...]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target

       iptables [-t table] -E old-chain-name  new-chain-name

      

       iptables [-t table] SUBCOMMAND CHAIN  CRETERIA -j TARGET

      

      

      

       -t table:

           filter ,nat,mangle,raw  默認為filter

          

      鏈管理:

           -F:flush,清空規(guī)則鏈:省略鏈表示清空指定表上的所有的鏈

           -N:new,創(chuàng)建新的自定義規(guī)則鏈:

           -X:drop,刪除用戶自定義的空的規(guī)則鏈:

           -Z:zero,清零,置零規(guī)則計數(shù)器

           -P:policy,為指定鏈設(shè)置默認策略,對filter表中的鏈而言,默認策略通常有ACCEPT,DROP,REJECT;

           -E:rEname,重命名自定義鏈,引用計數(shù)不為0的自定義鏈,無法改名,也無法刪除

      規(guī)則管理:

           -A:append,將新的規(guī)則追加與指定鏈的尾部

           -I:insert,將新規(guī)則插入至指定鏈的指定位置(需指定序號,默認為第一條):

           -D:delete,刪除指定鏈上的指定規(guī)則:

             兩種指定方式:

                  1、指定匹配條件

                  2、指定規(guī)則編號

           -R:replace,替換指定鏈上的指定規(guī)則。

          

      查看:

           -L:list,列出指定鏈上的所有規(guī)則。

              -n:numberic ,以數(shù)字格式顯示地址和端口號

              -v:verbose,顯示詳細信息

                  -vv,-vvv

              --line-numbers:顯示規(guī)則編號

              -x:exectly,顯示計數(shù)器計數(shù)結(jié)果的精確值。

      

      匹配條件:

          基本匹配:

              [!] -s, --src,--source  IP|Netaddr:檢查報文中的源ip地址是否符合此處指定的地址范圍

              [!] -d,--dst,--destination  IP|Netaddr:檢查報文中的目標ip地址是否符合此處指定的地址范圍

              -p  ,--protocal{tcp|udp|icmp}:檢查報文中的協(xié)議,即ip首部中的protocol所標識的協(xié)議,8bit,6標識tcp.17表示udp

              -i,--in-inteface IFACE :數(shù)據(jù)報文的流入接口。僅能用于PREROUTING,INPUT,F(xiàn)ORWARD鏈

              -o,--out-inteface :數(shù)據(jù)報文的流出接口。僅能用于FORWARD,OUTPUT,POSTROUTING鏈上

             

          擴展匹配:-m macth_name  --spec_options

                  eq: -m tcp --dport 22 表示使用tcp擴展的目標端口為22

             隱式擴展:對-p protocal指明的協(xié)議進行擴展,可省略-m選項:

                  -p tcp 

                     --dport PORT[-PORT]:目標端口,可以是單個端口或者連續(xù)多個端口

                     --sport PORT[-PORT]

                     --tcp-flags list1  list2  :檢查list1所指明的所有標志位,且這其中,list2所表示出的所有標記必須為1,而余下的必須為0,沒有l(wèi)ist1中指明的,不做檢查。

                         SYN,ACK,F(xiàn)IN,RST,PSH,URG,

                         eq:--tcp-flags SYN,ACK,F(xiàn)IN,RST  SYN

                            =====   --syn:檢查三次握手的第一次握手                

                  -p udp

                     --dport

                     --sport

                  -p icmp

                     --icmp-type

                    可用數(shù)字表示其類型:

                         0 echo-reply

                         8 echo-request

                        

                 

             顯示擴展:

          

      目標:

           -j target:jump至指定的target

           ACCEPT:接收

           DROP:丟棄

           REJECT;拒絕

           RETURN:返回調(diào)用鏈

           REDIRECT:端口重定向

           LOG:記錄日志

           MARK:做防火墻標記

           DNAT:目標地址轉(zhuǎn)換

           SNAT:源地址轉(zhuǎn)換

           MASQUERADE:地址偽裝

           ...

          自定義鏈:由自定義鏈上的規(guī)則進行匹配檢查。

          

             

      

      

      

   顯示擴展:必須顯示指明使用的擴展模塊(rpm -ql  iptables|grep "\.so")   

       centos6 man iptables

       centos7   man iptbales-extensions

      

      

    1、multiport擴展

      以離散方式定義多端口匹配:最多匹配15個端口

       [!] --source-ports,--sports  port[,port|,port:port]... 指明多個源端口

       [!] --destination-ports,--dports  port[,port|,port:port]...指明多個離散的目標端口

       [!] --ports port[,port|,port:port]...

      

      例子:  # iptables -A INPUT -p tcp -m multiport  --dports 22,80 -j ACCEPT

              # iptables -A OUTPUT -p tcp -m  multiport --sports 22,80 -j ACCEPT

      

    2、iprange擴展

      指明連續(xù)的(但一般不能擴展為整個網(wǎng)絡(luò))ip地址范圍

      

       [!] --src-range from[-to] 匹配指明連續(xù)的源IP地址范圍

       [!] --dst-range from[-to] 指明連續(xù)的目標IP地址范圍

      

       # iptables -A INPUT -m iprange  --src-range 172.18.11.0-172.18.11.100 -j DROP

       # iptables -A INPUT -p tcp -m multiport  --dports 22,80 -m iprange --src-range 172.18.11.0-172.18.11.100 -j DROP

      

    3、string擴展

      檢查報文中出現(xiàn)的字符串:

      

       --algo {bm|kmp}:

      

       [!] --string pattern

       [!] --hex-string pattern 16進制

      

       iptables -I OUTPUT -m string --algo bm  --string "movle" -j DROP

      

    4、time擴展

      根據(jù)報文到達的時間與指定的時間范圍進行匹配

       --datestart

       --datestop

      

       --timestart

       --timestop

      

       --monthdays

       --weekdays   

       # iptables -I INPUT -d 172.18.11.7 -p  tcp --dport 80 -m time --timestart 8:00 --timestop 10:00 -j DROP

      

       #注意 centos7使用的是UTC時間

      

      

    5、connlimit擴展

      根據(jù)每客戶端ip(也可以是地址塊)做并發(fā)連接數(shù)數(shù)量匹配:

      

       --connlimit-above n連接數(shù)量大于n

       --connlimit-upto n 連接數(shù)量小于等于n

       # iptables -I INPUT -p tcp --dport 22  -m connlimit --connlimit-above 3 -j REJECT

       # ssh連接大于3后鏈接被拒絕

    6、limit擴展

      基于收發(fā)報文速率做檢查:      

      令牌桶過濾器:

      

       --limit  rate[/second|/minute|/hour|/day]

       --limit-burst number

       # iptables -A INPUT -p icmp --icmp-type  8 -m limit --limit-burst 5 --limit 6/minute -j ACCEPT

       # iptables -A INPUT -p icmp -j REJECT

      

       ##跳過5個包,然后沒10秒鐘一個回應(yīng)一個ping包

      

    7、state擴展

      檢查連接追蹤機制檢查連接的狀態(tài):

      

      調(diào)整連接追蹤功能所能容納的最大連接數(shù)量:

          /proc/sys/net/nf_conntrack_max

      已經(jīng)追蹤到并記錄下的連接:

          /proc/net/nf_conntrack

          

      不同協(xié)議或者連接類型追蹤的時長

           /proc/sys/net/netfilter/

          

          

      可追蹤的連接狀態(tài):

           NEW:新發(fā)出的請求:連接追蹤模板中不存在此連接相關(guān)的信息條目,因此,將其識別為第一次發(fā)出的請求

           ESTABLISHED:NEW狀態(tài)之后,連接追蹤模板中為其建立的條目失效之前期間內(nèi)所進行的通信的狀態(tài)。

           RELATED:相關(guān)的連接:如ftp協(xié)議中的命令連接與數(shù)據(jù)連接之間的關(guān)系

           INVALIED:無法識別的連接

          

       --state   state1 state2...  

      例子: 

           # iptables -I INPUT -d 172.18.11.7  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

           # iptables -I OUTPUT -s 172.18.11.7  -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

          

       #對新發(fā)起的http和ssh訪問請求做控制,

           # iptables -A INPUT -d 172.16.100.10  -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT

           # iptables -A OUTPUT -s  172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED  -j ACCEPT 

          

      如何開放被動模式的FTP服務(wù)?  

      

           (1)裝載ftp追蹤時專用的模塊

              #modprobe nf_conntrack_ftp

             

             路徑    /lib/modules/3.10.0-514.el7.x86_64/kernel/net/netfilternf_conntrack_ftp.ko

                模塊信息  modinfo nf_conntrack_ftp.ko

           (2)放行請求報文:

             命令連接:NEW,ESTABLISHED

             數(shù)據(jù)連接:RELATED,ESTABLISHED

             

              #iptables -A INPUT -d localIP -p  tcp -dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

              # iptables -A INPUT -d localIP  -p tcp  -m state --state  RELATED,ESTABLISHED -j ACCEPT

           (3)放行響應(yīng)報文

              ESTABLISHED

              #iptables -A OUTPUT -d localIP  -p tcp -m state --state ESTABLISHED -j ACCEPT

             

      

      

      

      

   如何保存及重載規(guī)則:

      保存規(guī)則至指定文件:

           iptables-save >  /path/to/somefile

      

      從指定文件重載規(guī)則:

           iptables-restore <  /path/from/somefile

          

       centos6:

           service iptables save

              iptable-save  >/etc/sysconfig/iptables

           service iptables restart

              iptables-restore <  /etc/sysconfig/iptables

網(wǎng)絡(luò)防火墻:

      核心轉(zhuǎn)發(fā)配置:/proc/sys/net/ipv4/ip_forward  

                  /etc/sysctl.conf

                  net.ipv4.ip_forward=1

nat:

    SNAT:只修改請求報文的源地址

    DNAT:只修改請求報文的目標地址

   

    nat表:

       PREROUTING: DNAT

       OUTPUT

       POSTROUTING: SNAT

      

   源地址轉(zhuǎn)換

    iptables -t nat -A POSTROUTING -s  local_net ! -d local_net -j SNAT --to-source public_ip  公網(wǎng)ip固定

    iptables -t nat -A POSTROUTING -s  local_net ! -d local_net -j MASQUERADE公網(wǎng)ip不固定

   

   目標地址轉(zhuǎn)換 iptables -t nat -A  POSTROUTING -d public_ip -p tcp|udp --dport PORT -j DNAT  --to-destination local_ip:port

 

附件:http://down.51cto.com/data/2368698

文章名稱:從零開始認識iptables
網(wǎng)頁URL:http://weahome.cn/article/jpocoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部