iptables基本配置詳解

什么是防火墻

       隔離本地網(wǎng)絡(luò)與外界網(wǎng)絡(luò)之間的一道防御系統(tǒng),通俗的說,防火墻就是防火的墻,主要目的就是隔離火并建立安全區(qū)域,所以防火墻對于互聯(lián)網(wǎng)或計算機而言可能是工作在主機或網(wǎng)絡(luò)的邊緣(計算機的邊緣可能是一塊網(wǎng)卡,而網(wǎng)絡(luò)邊緣可能是路由),對于進出數(shù)據(jù)的報文事先定義好的規(guī)則中的標準進行檢查、監(jiān)控,一旦符合標準的話,我們就采取由這個規(guī)則定義的處理動作,我們稱為主機防火墻或網(wǎng)絡(luò)防火墻。

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

成都創(chuàng)新互聯(lián)公司于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元西市做網(wǎng)站,已為上家服務(wù),為西市各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108


     有兩組框架,實現(xiàn)防火功能的主要是netfilter,

       Netfilter:是內(nèi)核中的過濾框架,是網(wǎng)絡(luò)過濾器

       Iptables:是一個生產(chǎn)防火規(guī)則的并且能夠?qū)⑵涓郊釉趎etfilter上,真正實現(xiàn)數(shù)據(jù)報文過濾的工具,當然這只是其中的一種功能,NAT、mangle等規(guī)則生成的工具。而它本身并不能防火,真正起到防火墻功能的是規(guī)則,規(guī)則只有放到netfilter上才能生效。規(guī)則包括處理標準和處理辦法防火墻可以是硬件也可以是軟件,無論硬件還是軟件需要定義規(guī)則之后,讓其生效,才能真正工作起來工作域  
netfilter工作在內(nèi)核空間(可以放規(guī)則的位置),iptables工作在用戶空間,可以寫規(guī)則,通過系統(tǒng)調(diào)用將規(guī)則放置在與它對應(yīng)的位置上,只有生效以后這個應(yīng)用程序就沒有用處了
1.   鏈到表的演化

ipfw-->ipchains-->iptables

       每一個鏈看做每一列的演化

iptables/netfilter:網(wǎng)絡(luò)過濾器

       netfiler:kernel中啟用的時才具有作用

              hookfunction(鉤子函數(shù)):或稱為鏈

              以理解為把某一個目標端口進程勾選出來,進行過濾規(guī)則的匹配

wKioL1ce-3qysfRNAACDSFO5xZw518.jpg

wKiom1ce-uOjVVwnAAcgYH62j1I503.png

[擴展]:使用參考,使用man,對于iptables來講,是一個多模塊的命令,可以使用maniptables;man iptables-extensions
iptables

防火墻功能的實現(xiàn)主要根據(jù)其中的一些規(guī)則,而這些規(guī)則的實現(xiàn)就是由iptables這個工具來寫入的
報文流向

(1)  從外部到主機內(nèi)部—>流入

(2)  本機內(nèi)部的報文到外面的—>流出

(3)  報文的轉(zhuǎn)發(fā)

只要有報文經(jīng)過,它必須要從其中的一個位置經(jīng)過,而路由表中的目標IP可以判定它應(yīng)該走哪條路這叫路由決策,路由決策發(fā)生在一個報文被本機的網(wǎng)卡接收進來以后,送到TCP/IP協(xié)議棧上的那一刻就要做出路由決策。上面三種流向是工作在TCP/IP協(xié)議棧上的三個鉤子函數(shù),任何一個報文經(jīng)過其中的任何一個流向時都會被檢查一遍如果被其中的某條規(guī)則匹配到,就會執(zhí)行其中的處理方法

hook:鉤子函數(shù),自上而下逐個檢查。五個規(guī)則:
   prerouting:路由之前
   input:本地進來
   output:本地出去
   forward:轉(zhuǎn)發(fā)
   postrouting:路由之后
而這每個規(guī)則組合起來就是一個鏈,叫規(guī)則鏈,每一個鉤子對應(yīng)的函數(shù)都應(yīng)該有一個鏈
五個規(guī)則鏈:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

wKiom1ce-3CydLNNAAFPBoC38FU548.jpg
iptables結(jié)構(gòu):

wKiom1ce-7iicyKiAABrr3KcSVA460.jpg
Iptables內(nèi)置鏈與自定義鏈

內(nèi)置鏈:(大寫):對應(yīng)于一個鉤子函數(shù)

       PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT, POSTROUTING

自定義鏈:

       可以使用自定義的鏈,但只能在被調(diào)用時才能發(fā)揮作用,而且如果沒有被自定義鏈中的任何規(guī)則匹配,還應(yīng)該有返回機制;用戶可以刪除自定義的空鏈,默認鏈無法刪除。每一條規(guī)則 都有兩個內(nèi)置的計數(shù)器,一個記錄被匹配的報文個數(shù),另一個記錄被匹配的報文大小之和 ;
Iptables規(guī)則的運作模式

wKiom1ce--KgC8JxAADDIH1CWGQ393.jpg
路由功能發(fā)生的時刻

報文進入本機后:

              判斷目標主機是否為本機?

                     是:input

                     否:forward

wKioL1ce_NmQOQ1cAABvjZOtC4E327.jpg

報文離開本機之前:

       判斷經(jīng)由哪一個接口送往下一跳?
Iptables的規(guī)則:

組成部分:根據(jù)規(guī)則的匹配條件嘗試匹配報文,對匹配成功的報文根據(jù)規(guī)則定義的處理動作做出處理

       匹配條件:

              基本匹配:

                     擴展匹配:

              處理動作:

                     基本處理動作

                     擴展處理動作

                     自定義處理動作
iptables添加規(guī)則時的考量點:

1、       要實現(xiàn)何種功能:判斷添加規(guī)則至哪個表上

2、       報文流經(jīng)的位置:判斷添加規(guī)則至那個鏈上
IP首部

wKiom1ce_D3SetbRAADxM52lB10026.jpg
Iptables規(guī)則實現(xiàn)命令
防火墻開機處理模式

不同版本系統(tǒng)上的開機自啟方式

       Centos7

       ~]# Systemctl stop firewalld.service

       ~]# Systemctl disabled fireealld.service

       Centos6

       ~]# Service iptables stop

       ~]# Chkconfig iptables off
Iptables規(guī)則命令語法

命令格式:iptables [-ttable] SUBCOMMAND chain(鏈) [matches…] [-j target]

參數(shù):                    

–t table:表示要操作的表

四個:Raw,mangle,nat,filter

SUBCOMMAND:操作的命令

Chain:要操作的鏈

Match:匹配的條件,可以是多個

-j:指定匹配到以后的執(zhí)行動作

       鏈管理:

              -N:new 新增一條自定義鏈

                     Iptables –N testchain(添加一個空鏈(引用計數(shù)為0))

                     Iptables –nL查看

[root@bogon ~]# iptables -Ntestchain

[root@bogon ~]# iptables -nL

ChainINPUT (policy ACCEPT)

target     prot opt source               destination        

ChainFORWARD (policy ACCEPT)

target     prot opt source               destination        

ChainOUTPUT (policy ACCEPT)

target     prot opt source               destination        

Chaintestchain (0 references)

target     prot opt source               destination   

-X:delete,刪除自定義的空鏈

[root@bogon ~]# iptables -Xtestchain

[root@bogon ~]# iptables -nL

ChainINPUT (policy ACCEPT)

target     prot opt source               destination        

ChainFORWARD (policy ACCEPT)

target     prot opt source               destination        

ChainOUTPUT (policy ACCEPT)

target     prot opt source               destination    

-P:policy,<鏈名><動作>設(shè)置某個鏈的默認規(guī)則

       默認的策略有以下幾種:

              ACCEPT:接受

              Drop:丟棄

              Reject:拒絕

[root@localhost ~]# iptables-t filter -P FORWARD DROP

設(shè)置filter表的默認規(guī)則是DROP

       注意:當數(shù)據(jù)包沒有被規(guī)則列表里的任何規(guī)則匹配到時,按此默認規(guī)則的處理,動作前面不能加-j,這也是唯一一種匹配動作前面不加-j的情況

[擴展]如果把Input為drop的話遠程連接不上,解決方案:寫一個@定時(周期)計劃,清除規(guī)則

現(xiàn)象:全部改為drop遠程以及ping都連接不上但是22號ssh端口仍然在監(jiān)聽

-E:rename 重命名自定義的未被引用(引用計數(shù)為0)的鏈

[root@bogon ~]# iptables -Ntestchain

[root@bogon ~]# iptables -Etestchain mychain

[root@bogon ~]# iptables -nL

ChainINPUT (policy ACCEPT)

target     prot opt source               destination        

ChainFORWARD (policy ACCEPT)

target     prot opt source               destination        

ChainOUTPUT (policy ACCEPT)

target     prot opt source               destination        

Chainmychain (0 references)

target     prot opt source               destination        

[root@bogon ~]#

規(guī)則管理:

-A :append 追加一條規(guī)則,(默認是放在最后)

[root@localhost ~]# iptables–t filter –A INPUT –j DROP

在filter表的input鏈里追加一條規(guī)則,(作為最后一條規(guī)則,匹配所有訪問本機ip的數(shù)據(jù)包,匹配到的丟棄)比如ssh登錄的偽終端也被終止

-I :insert <鏈名> [規(guī)則號碼] 插入一條規(guī)則

[root@localhost ~]# iptables -IINPUT -j DROP

在filter表的INPUT鏈里插入一條規(guī)則(插入成第一條)

[root@localhost ~]# iptables -IINPUT 3 -j DROP

在 filter 表的 INPUT 鏈里插入一條規(guī)則(插入成第 3 條)

注意: 1、-t filter 可不寫,不寫則自動默認是 filter 表

2、-I 鏈名 [規(guī)則號碼],如果不寫規(guī)則號碼,則默認是 1

3、確保規(guī)則號碼 ≤(已有規(guī)則數(shù) + 1),否則報錯

-D <鏈名> <規(guī)則號碼|具體的規(guī)則內(nèi)容>

       Delete 刪除一條規(guī)則

[root@localhost ~]# iptables–D INPUT 3

(按照號碼匹配)刪除filter表INPUT鏈中第三條規(guī)則

              注意:刪除3號后,原來的四號此時變成3號

[root@localhost~]#iptables–D INPUT –s 192.168.1.1 –jDROP

 (按照內(nèi)容匹配)刪除filter表INPUT鏈中內(nèi)容為“–s 192.168.1.1 –j DROP”的規(guī)則(不管其位置在哪里)

       注意:.

              1、若規(guī)則列表中有多條相同的規(guī)則時,按內(nèi)容匹配只刪除序號最小的一條

2、按號碼匹配刪除時,確保規(guī)則號碼≤已有規(guī)則數(shù),否則報錯

3、按內(nèi)容匹配刪除時,確保規(guī)則存在,否則報錯

-R :<鏈名><規(guī)則號碼><具體規(guī)則內(nèi)容>

       Replace 替換一條規(guī)則

[root@localhost ~]# iptables –RINPUT 3 –j ACCEPT

將原來編號為3的規(guī)則內(nèi)容替換為“–j ACCEPT”

       注意:確保規(guī)則號碼<=已有規(guī)則數(shù),否則報錯

-F :[鏈名]

       Flush 清空規(guī)則

[root@localhost ~]# iptables –FINPUT

清空filter 表INPUT 鏈中的所有規(guī)則

[root@localhost ~]# iptables –tNET –F FORWARD

清空nat 表PREROUTING 鏈中的所有規(guī)則

-Z :zero 置零

       Iptables的每條規(guī)則都有兩個計數(shù)器:

              有本規(guī)則匹配到的所有的packets

              由本規(guī)則匹配到的所有的bytes

-S顯示指定鏈上的所有的規(guī)則

[root@localhost ~]# iptables-t filter -S INPUT

-P INPUT ACCEPT

顯示的是命令的格式

查看:(不能改變順序)

-L:[鏈名]

       List 列出規(guī)則

-n:numeric表示只顯示IP地址和端口號碼,不顯示域名和服務(wù)名[不反解]

[root@localhost ~]# iptables-L INPUT

Chain INPUT (policyACCEPT)

target     prot opt source               destination    

-v:verbose,詳細信息(v越多,顯示的越詳細)

[root@localhost ~]# iptables -vLINPUT

Chain INPUT (policyACCEPT 454 packets, 44317 bytes)

 pkts bytes target     prot opt in     out    source              destination

[root@localhost ~]# iptables -vvvLINPUT

Chain INPUT (policyACCEPT 478 packets, 46257 bytes)

 pkts bytes target     prot opt in     out    source              destination        

libiptcvlibxtables.so.10. 632 bytes.

Table `filter'

Hooks:pre/in/fwd/out/post = ffffffff/0/98/130/ffffffff

Underflows:pre/in/fwd/out/post = ffffffff/0/98/130/ffffffff

Entry0 (0):

SRCIP: 0.0.0.0/0.0.0.0

DSTIP: 0.0.0.0/0.0.0.0

Interface:`'/................to `'/................

Protocol: 0

Flags: 00

Invflags: 00

Counters: 478packets, 46257 bytes

Cache: 00000000

Target name: `' [40]

verdict=NF_ACCEPT

 

Entry 1 (152):

SRC IP: 0.0.0.0/0.0.0.0

DST IP: 0.0.0.0/0.0.0.0

Interface: `'/................to`'/................

Protocol:0

Flags:00

Invflags:00

Counters:0 packets, 0 bytes

Cache:00000000

Targetname: `' [40]

verdict=NF_DROP

-x:exactly,在v的基礎(chǔ)上,禁止自動的單位換算

[root@localhost~]# iptables -vxL INPUT

ChainINPUT (policy ACCEPT 559 packets, 53847 bytes)

    pkts     bytes target     prot opt in     out    source               destination

--line-numbers:顯示鏈上的規(guī)則的編號;

              Iptables –nL(n:表示以數(shù)字格式顯示地址和端口)

              組合:-nvL

[root@localhost~]# iptables -L INPUT --line-numbers

ChainINPUT (policy ACCEPT)

num  target    prot opt source              destination  

列出filter表中所有的鏈及所有的規(guī)則

Iptables –t NAT–vnL:

用詳細方式列出nat 表所有鏈的所有規(guī)則,只顯示IP 地址和端口號

       Iptables –t NAT –vnL PREROUTING:用詳細方式列出nat 表PREROUTING 鏈的所有規(guī)則以及詳細數(shù)字,不反解

匹配條件: [!]表示可以取反

       基本匹配:netfilter自帶的匹配機制

 [!] -s, <匹配源地址>

       可以是ip,NET,DOMAIN,也可以是空(空表示任何地址)

[root@localhost~]# iptables -t filter -A INPUT -s 192.168.0.0/16 -j ACCEPT

[root@localhost~]# iptables -t filter -vnL

ChainINPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out    source              destination        

    6  428 ACCEPT     all  --  *      *      192.168.0.0/16      0.0.0.0/0          

ChainFORWARD (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out    source              destination        

ChainOUTPUT (policy ACCEPT 4 packets, 528 bytes)

 pkts bytes target     prot opt in     out    source               destination

在filter表的INPUT鏈最后追加一條接受匹配來自172.18.0.0/16網(wǎng)絡(luò)的數(shù)據(jù)包

[!] –d <匹配目的地址>

       可以是ip,NET,DOMAIN,也可以是空(空表示任何地址)

[root@localhost~]# iptables -A OUTPUT -d 192.168.1.1/16 -j ACCEPT

[root@localhost~]# iptables -t filter -vnL

ChainINPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out    source              destination        

  133 10048 ACCEPT     all --  *      *      192.168.0.0/16      0.0.0.0/0          

 

ChainFORWARD (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out    source              destination        

 

ChainOUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out    source              destination        

    4  576 ACCEPT     all  --  *      *      0.0.0.0/0            192.168.0.0/16

在filter表的OUPUT鏈最后追加一條匹配接受去往172.18.0.0/16網(wǎng)絡(luò)的數(shù)據(jù)包

Iptables –A OUTPUT –d www.linuxedu.top匹配去往www.linuxedu.top的數(shù)據(jù)包

[!] -i, --in-interface name 限制報文流入的接口,只能用于prorouting,input及forward

 [!] -o, --out-interface name限制報文流出的接口,只能用于output,forward,及postrouting

              擴展匹配:經(jīng)由擴展模塊引入的匹配機制,-m matchname

隱式擴展:可以不用使用-m選項專門加載相應(yīng)的模塊,前提是要使用-P選項可匹配何種協(xié)議

[!]-p <匹配協(xié)議類型>

可以指明只開放某一種協(xié)議

協(xié)議:tcp,udp,icmp,icmpv6,esp,sh,sctp,mh or <空>

自己ping別人:出去的是8,回來的是0

別人ping自己:進來的是8,出去的是0

       0:echo-replay回顯應(yīng)答

              8:echo-request回顯請求

[!] –sport<匹配源端口>

       可以是個別端口,也可以是端口范圍

       --sport 1000  匹配源端口是1000的數(shù)據(jù)包

       --sport 1000-3000匹配源端口是1000-3000的端口

       --sport :3000  匹配源端口是小于3000的端口

       --sport 1000:  匹配源端口是大于1000的端口

[!]--dport <匹配目的端口>

可以是個別端口,可以是端口范圍

例如:

--dport 80 匹配目的端口是80 的數(shù)據(jù)包

--dport 6000:8000 匹配目的端口是6000-8000 的數(shù)據(jù)包(含6000、8000)

--dport :3000 匹配目的端口是3000 以下的數(shù)據(jù)包(含3000)

--dport 1000: 匹配目的端口是1000 以上的數(shù)據(jù)包(含1000)

注意:--sport 和--dport 必須配合-p 參數(shù)使用

匹配組合:

       1、端口匹配

-p udp --dport 53

匹配網(wǎng)絡(luò)中目的端口是53 的UDP協(xié)議數(shù)據(jù)包

2、地址匹配

-s 10.1.0.0/24 -d 172.17.0.0/16

匹配來自10.1.0.0/24 去往172.17.0.0/16 的所有數(shù)據(jù)包

3、端口和地址聯(lián)合匹配

-s 192.168.0.1 -d www.abc.com -p tcp --dport80

匹配來自192.168.0.1,去往www.abc.com 的80 端口的TCP協(xié)議數(shù)據(jù)包

注意:

1、--sport、--dport 必須聯(lián)合-p 使用,必須指明協(xié)議類型是什么

2、條件寫的越多,匹配越細致,匹配范圍越小

處理動作”

       -j targetanme [per-target-iptions]

       ACCEPT:通過,允許數(shù)據(jù)包通過本鏈而不攔截它,類似Cisco 中ACL 里面的permit

              Iptables –A INPUT –j ACCEPT:允許所有訪問本機IP 的數(shù)據(jù)包通過

DROP:丟棄,阻止數(shù)據(jù)包通過本鏈而丟棄它,類似Cisco 中ACL 里的deny

Iptables –A FORWARD –s 172.18.0.1/16 –j DROP阻止來源地址為192.168.80.39 的數(shù)據(jù)包通過本機

REJECT

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

       REDIRECT:端口重定向

       LOG:日志

       MARK:防火墻標記

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

              -j DNAT --to IP[-IP][:端口-端口](nat 表的PREROUTING 鏈)

目的地址轉(zhuǎn)換,DNAT 支持轉(zhuǎn)換為單IP,也支持轉(zhuǎn)換到IP 地址池(一組連續(xù)的IP 地址)

例如:

iptables -t nat -A PREROUTING -i ppp0 -p tcp--dport 80 -j DNAT --to 192.168.0.1

解釋:把從ppp0 進來的要訪問TCP/80 的數(shù)據(jù)包目的地址改為192.168.0.1

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -jDNAT --to 192.168.0.2:80

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -jDNAT --to 192.168.0.1-192.168.0.10

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

-j SNAT --to IP[-IP][:端口-端口](nat表的POSTROUTING 鏈)源地址轉(zhuǎn)換,SNAT 支持轉(zhuǎn)換為單IP,也支持轉(zhuǎn)換到IP 地址池(一組連續(xù)的IP 地址)

例如:

iptables -t nat -A POSTROUTING -s192.168.0.0/24 -j SNAT --to 1.1.1.1

將內(nèi)網(wǎng)192.168.0.0/24 的原地址修改為1.1.1.1,用于NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24-j SNAT --to 1.1.1.1-1.1.1.10

同上,只不過修改成一個地址池里的IP

       MASQERADE:地址偽裝

              -j MASQUERADE

動態(tài)源地址轉(zhuǎn)換(動態(tài)IP 的情況下使用)

例如:

iptables -t nat -A POSTROUTING -s192.168.0.0/24 -j MASQUERADE

將源地址是192.168.0.0/24 的數(shù)據(jù)包進行地址偽裝

匹配條件:

       顯示擴展

       Multiport:多端口匹配

              以離散方式死你故意多端口匹配,最多可以指定15個端口,但是必須與-p參數(shù)一起使用

       Iptables –A INPUT –p tcp –m multiport–dports 21,22,25,80,110 –j ACCEPT

文章名稱:iptables基本配置詳解
轉(zhuǎn)載來源:http://bm7419.com/article38/jcigsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、企業(yè)網(wǎng)站制作、用戶體驗、小程序開發(fā)、標簽優(yōu)化、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)