1. 程式人生 > >iptables的詳細介紹及配置方法

iptables的詳細介紹及配置方法

Firewall(防火牆):元件,工作在網路邊緣(主機邊緣),對進出網路資料包基於一定的規則檢查,並在匹配某規則時由規則定義的處理進行處理的一組功能的元件。

防火牆型別:根據工作的層次的不同來劃分,常見的防火牆工作在OSI第三層,即網路層防火牆,工作在OSI第七層的稱為應用層防火牆,或者代理伺服器(代理閘道器)。

網路層防火牆又稱包過濾防火牆,在網路層對資料包進行選擇,選擇的依據是系統內設定的過濾邏輯,被稱為訪問控制列表(ACL),通過檢查資料流中每個資料的源地址,目的地址,所用埠號和協議狀態等因素,或他們的咋喝來確定是否允許該資料包通過。

優點:對使用者來說透明,處理速度快且易於維護。

缺點:一旦黑客突破防火牆,就可以輕易地偽造資料包的源地址,目的地址和IP的埠號,即“IP地址偽造”。

wps_clip_image-32645

包過濾防火牆圖示

代理服務型防火牆(Proxy Service)將所有跨越防火牆的網路通訊鏈路分為兩段。當代理伺服器接收到使用者對某個站點的訪問請求後會檢查該請求是否符合控制規則。如果規則允許,則代理伺服器會替使用者去那個站點取回所需要的資訊,轉發給使用者。內外網使用者的訪問都是通過代理伺服器上的“連結”來實現的,從而起到了隔離防火牆內外計算機系統的作用。特點:在應用層對資料進行檢查,比較安全。但是會增加防火牆的負載。

wps_clip_image-13449

代理服務型防火牆圖示

現實生產環境中所使用的防火牆一般都是二者結合體。即先檢查網路資料,通過之後再送到應用層去檢查。

netfilter元件稱為核心空間,它被整合在linux核心中。netfilter是一種核心中用於擴充套件各種網路服務的結構化底層框架。它是在核心中選取五個位置放了五個hook function,而這五個hook function向用戶開放,使用者可以通過一個工具(iptables)向其寫規則。

netfilter 主要由資訊過濾表(table)組成,包含了控制IP包處理的規則集(rules)。根據規則所處理的IP包的型別,規則被分組放在鏈(chain)中,從而使核心對來自某些源,前往某些目的地或具有某些協議型別的資訊包處置方法,如完成資訊包的處理、控制和過濾等工作。

iptables也稱為使用者空間,是一個工作在使用者層用來寫規則的工具,寫好的規則被送往netfilter。這些規則告訴核心中的netfilter元件如何去處理資訊包。

五個hook function(規則鏈):Input ,Output,Forward,prerouting,postrouting。

filter:Input,Output,Forward

四種處理機制(表):過濾(filter) 主要用於過濾資料包,該表根據管理員預定義的一組規則過濾符 

                    合條件的資料包。filter表是iptables預設的表。

l INPUT:主要與想要進入我們 Linux 本機的資料包有關;

l OUTPUT:主要與我們 Linux 本機所要送出的資料包有關;

l FORWARD:與 Linux 本機比較沒有關係, 他可以傳遞資料包到後臺的計算機中,與下列 nat table 相關性較高。

                    地址轉換(NAT) 主要用於網路地址轉換,該表可實現一對一。一對多,多對多               

                    等工作,iptables就是使用該表實現共享上網功能。

l PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)

l POSTROUTING:在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)

l OUTPUT:與傳送出去的資料包包有關

                    包重構(mangle)對指定的資料包進行修改,例如更改TTL和TOS等,實際中很

                    少使用。

                    RAW  很少使用

一條鏈可以包含一條或者數條規則。

nat:prerouting,postrouting,output

mangle:Input ,Output,Forward,prerouting,postrouting。

RAW:prerouting,output

wps_clip_image-28430

                       iptables傳輸資料包的過程

  1   當一個數據包進入網絡卡時,資料包首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去。

  2   如果資料包就是進入本機的,資料包就會沿著圖向下移動,到達INPUT鏈。資料包到達INPUT鏈後,任何程序都會收到它。本機上執行的程式可以傳送資料包,這些資料包經過OUTPUT鏈,然後到達POSTROTING鏈輸出。

  3  如果資料包是要轉發出去的,且核心允許轉發,資料包就會向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。

wps_clip_image-16702

                      iptables中各表與鏈的相互關係            《鳥哥的私房菜》

書寫規則:

iptables [-t table] command CHAIN [NUM ]   match criteria -j TARGET

CHAIN:  對鏈進行的操作

            -N:new     新建一條鏈

            -X          刪除一條使用者自定義鏈(空鏈)

            -F:flush   清空一條鏈,預設清空表中所有鏈

            -Z:zero    清空計數器,iptables中每條規則預設有兩個計數器,用於記錄本條規則所匹配到的資料包的個數和本條規則所匹配到的資料包的總大小

            -P:policy  定義鏈的預設處理策略

            -E  重新命名鏈

RULE:對規則進行的操作

      -A:append   追加,在鏈的最後加一條規則

       -I:insert  插入一條規則  一般使用-I CHAIN NUM 給規則加一個編號。

       -R:replace 替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號:-R CHAIN NUM。

       -D:delete  刪除一條規則,可以輸入完整規則,或者直接指定標號加以刪除:-D CHAIN NUM。

LIST:檢視

    -L:list 列出鏈中的所有規則

輔助性子命令:-n  numeric 以數字的形式來顯示地址,預設顯示主機名稱

-v  verbose 顯示詳細資訊 ,支援-vv  -vvv格式,v越多,資訊越詳細。

-x  顯示原有資訊,不要做單位換算

--line-numbers  顯示規則的行號

Match Creteria(匹配規則):

基本匹配

     -s,--src,--source  匹配資料包的源地址

     -d,--dst,--destination 匹配資料包的目標地址

     -i, 指定資料包的流入介面(邏輯介面)

     -o, 指定資料包的流出介面

     -p, 做協議匹配 protocol,(tcp|udp|icmp)

擴充套件匹配:對某一種功能的擴充套件

      隱含擴充套件 :對某一種協議的擴充套件

      -p tcp 面向連線協議

        --sport 指定源埠

        --dport 指定目的埠

        --tcp-flags(SYN,ACK,FIN,PSH,URG,RST,ALL,NONE)指定TCP的標誌位

         需要跟兩個標誌位列表,如:SYN,ACK,FIN,RST SYN 第一個列表表示要檢查的位,第二個    

         列表表示第一個列表中出現的位必須為1,未出現的必須為0

       --syn  只允許新連線

     -p  udp  無連線協議

         --sport   指定源埠

         --dport   指定目的埠

      -p  icmp

          --icmp-type  echo-request,8(ping出去,請求迴應,) echo-reply,0(給予迴應)

     顯式擴充套件 :額外附加的更多的匹配規則,功能性地擴充套件

      -m state   狀態檢測擴充套件

        NEW         使用者發起一個全新的請求

        ESTABLISHED 對一個全新的請求進行迴應

        RELATED   兩個完整連線之間的相互關係,一個完整的連線,需要依賴於另一個完整的連線

        INVALID   無法識別的狀態

     -m multiport   --sports  22,80,443 指定多個源埠

                    --dports  22,80,443 指定多個目標埠

                    --ports    非連續埠

     -m connlimit   限定併發連線速率

             !--connlimit-above 5  高於五個將拒絕

     -m string   字串匹配

             --algo bm|kmp 指定演算法 

             --string pattern

     -m time  基於時間的匹配

        --timestart

        --timestop

        --days

  -j  TARGET    處理動作

     ACCEPT    接受

     DROP      悄悄丟棄,請求端沒有任何迴應

     REJECT    明確拒絕

     SNAT      源地址轉換

     DNAT      目標地址轉換

     REDIRECT  埠重定向

     LOG       將訪問記錄下來

[[email protected] ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

下面我們寫兩條規則:

只允許192.168.0.0網段的主機通過SSH訪問該主機

允許本機通過SSH連線192.168.0.0網段的其他主機

[[email protected] ~]# iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 22 -j ACCEPT

[[email protected] ~]# iptables -A OUTPUT -s 192.168.0.127 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT

[[email protected] ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp  --  192.168.0.0/24       192.168.0.127       tcp dpt:22

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

ACCEPT     tcp  --  192.168.0.127        192.168.0.0/24      tcp spt:22

定義預設策略

[[email protected] ~]# iptables -t filter -P INPUT DROP

[[email protected] ~]# iptables -t filter -P OUTPUT DROP

PS:上面規則一定不要寫錯了,否則你將會把自己拒之門外。

允許本機PING本網段任何主機

[[email protected] ~]# iptables -t filter -A OUTPUT -s 192.168.0.127 -d 0.0.0.0/0.0.0.0 -p icmp --icmp-type 8 -j ACCEPT   //**出去的資料包

[[email protected] ~]# iptables -t filter -A INPUT -s 0.0.0.0/0.0.0.0 -d 192.168.0.127 -p icmp --icmp-type 0 -j ACCEPT   //** 回來的資料包

[[email protected] ~]# ping 192.168.0.236 -c 4

PING 192.168.0.236 (192.168.0.236) 56(84) bytes of data.

64 bytes from 192.168.0.236: icmp_seq=1 ttl=64 time=0.242 ms

64 bytes from 192.168.0.236: icmp_seq=2 ttl=64 time=0.249 ms

64 bytes from 192.168.0.236: icmp_seq=3 ttl=64 time=0.437 ms

64 bytes from 192.168.0.236: icmp_seq=4 ttl=64 time=0.204 ms

允許本網段任何主機PING本機

[[email protected] ~]# iptables -t filter -A OUTPUT -s 192.168.0.127 -d 0.0.0.0/0.0.0.0 -p icmp --icmp-type 0 -j ACCEPT 

[[email protected] ~]# iptables -t filter -A INPUT -d 192.168.0.127 -s 0.0.0.0/0.0.0.0 -p icmp --icmp-type 8 -j ACCEPT

wps_clip_image-23079

PS:當目標網路指定為任意主機時,應該為0.0.0.0/0.0.0.0

凡是來自192.168.0.0/24網段的主機均使用一個自定義的新鏈

先開啟http服務

自定義一條鏈,拒絕192.168.0.0/24網段的主機對http服務的訪問

[[email protected] ~]# iptables -N attach-input

[[email protected] ~]# iptables -A attach-input -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 80 -j DROP

[[email protected] ~]# iptables -L -n

wps_clip_image-25333

此時,自定義鏈依舊無法使用,我們只能在固定鏈上做轉發請求資料包到自定義鏈上,才能實現自定義鏈的功能。

[[email protected] ~]# iptables -A INPUT -s 192.168.0.0/24 -j attach-input

[[email protected] ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

attach-input  all  --  192.168.0.0/24       0.0.0.0/0 

此時已經無法訪問到網頁。

將INPUT鏈刪除之後,馬上又可以訪問了。

[[email protected] ~]# iptables -F INPUT

刪除自定義鏈,先清空鏈,再清空規則

[[email protected] ~]# iptables -F attach-input

[[email protected] ~]# iptables -X attach-input

PS:每條規則都可以使用“!”取反。如: -s '!' 192.168.0.0/24,加單引號防止被識別成其他字元。

下面我們來實現顯式擴充套件狀態檢測的功能:

先將預設策略置為DROP

[[email protected] ~]# iptables -P INPUT DROP

[[email protected] ~]# iptables -P OUTPUT DROP

[[email protected] ~]# iptables -P FORWARD DROP

[[email protected] ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 80 -j ACCEPT   //*進來的資料包

[[email protected] ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 80 -j ACCEPT  //*出去的資料包

但是這兩條規則對於反彈式木馬是無效的。

我們可以基於顯式擴充套件寫這樣兩條規則:

[[email protected] ~]# iptables -I INPUT 1 -d 192.168.0.127 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT   //**進來的資料包

[[email protected] ~]# iptables -I OUTPUT  -s 192.168.0.127 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT     //**出去的資料包

刪除我們之前建立的那兩條規則:

[[email protected] ~]# iptables -D INPUT 2

[[email protected] ~]# iptables -D OUTPUT 2

wps_clip_image-2080

此時,已經可以正常訪問http服務。

我們試一下ftp服務:

先開啟ftp服務

先建立這樣四條規則,看看能不能達到效果,

[[email protected] ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 21 -j ACCEPT

[[email protected] ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 20 -j ACCEPT

[[email protected] ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 21 -j ACCEPT

[[email protected] ~]# iptables -A OUTPUT -s 192.168.0.127 -p tcp --sport 20 -j ACCEPT

客戶端請求是被動模式,實驗證明,我們僅僅開始21 20埠無法達到效果。這樣我們就得用到狀態檢測的RELATED機制。

PS:要想實現FTP的訪問需先手動載入額外的模組:ip_conntrack_ftp,ip_conntrack_tftp,ip_nat_ftp,,ip_nat_tftp(and others)

[[email protected] ~]# modprobe ip_conntrack_ftp

[[email protected] ~]# modprobe ip_nat_ftp

[[email protected] ~]# modprobe ip_nat_tftp

[[email protected] ~]# modprobe ip_conntrack_tftp

實現自動載入的功能:編輯/etc/sysconfig/iptables-config檔案,在“IPTABLES_MODULES=”後面寫上要新增的模組就可以了。

wps_clip_image-27471

[[email protected] ~]# iptables -A INPUT -d 192.168.0.127 -p tcp --dport 21 -j ACCEPT

[[email protected] ~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

[[email protected] ~]# iptables -A INPUT -d 192.168.0.127 -p tcp -m state --state RELATED -j ACCEPT

[[email protected] ~]# iptables -R OUTPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT  //**修改上一條規則,增加RELATED狀態

[[email protected] ~]# iptables -R INPUT 3 -d 192.168.0.127 -p tcp  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT    //**修改INPUT第三條規則,增加NEW,ESTABLISHED狀態

wps_clip_image-21860

此時ftp已經可以訪問了,要保證所有的規則能夠永久有效需要使用:service iptables save來儲存。

基於字串匹配的顯式擴充套件功能:

[[email protected] ~]# iptables -A  INTPUT  -d 192.168.0.127  -p  tcp  --dport 80 -m string  --algo  kmp  --string  'qq.com'   -j  REJECT 

PS:iptables工作在OSI第三層,第四層。預設情況下,iptables無法限定第七層的應用程式,要想實現限制七層某些應用程式的功能,需要重編譯核心,在核心上打上補丁 layer7。.

源地址換換和目標地址轉換:

PS:源地址轉換必須在POSTROUTING鏈上做。

    目標地址轉換必須在PREROUTING鏈上做。

下面我們來實現源地址的功能:

我們假設這樣一種場景:

wps_clip_image-31021

192.168.0.254是工作在外網的一臺WEB伺服器,中間的那臺是企業裡的NAT伺服器,我們在上面新增iptables的規則,使其實現地址轉換的功能,PC機是工作在企業內部。我們的最終目的是192.168.80.30這臺計算機通過NAT伺服器可以訪問到192.168.0.254的WEB服務。

實驗環境搭建:192.168.0.254  192.168.0.127使用虛擬機器網絡卡的橋接功能;

              192.168.80.129  192.168.080.130使用虛擬機器網絡卡的僅主機功能;

為PC機設定閘道器:

[[email protected] ~]# route add default gw 192.168.80.129

下面開始來配置NAT伺服器:

首先要開啟NAT伺服器的核心路由功能:

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward

1

相關推薦

iptables詳細介紹配置方法

Firewall(防火牆):元件,工作在網路邊緣(主機邊緣),對進出網路資料包基於一定的規則檢查,並在匹配某規則時由規則定義的處理進行處理的一組功能的元件。 防火牆型別:根據工作的層次的不同來劃分,常見的防火牆工作在OSI第三層,即網路層防火牆,工作在OSI第七層的稱

react-native熱更新之CodePush詳細介紹使用方法

react-native熱更新之CodePush詳細介紹及使用方法 2018年03月04日 17:03:21 clf_programing 閱讀數:7979 標籤: react native熱更新code pus

CentOS 6.9配置網卡IP/網關/DNS命令詳細介紹一些常用網絡配置命令(轉)

linux. centos fly fig details oba routing href 修改dns 一、IP 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 r

Java日誌框架-logback的介紹配置使用方法(純Java工程)

說明:內容估計有些舊,2011年的,但是大體意思應該沒多大變化,最新的配置可以參考官方文件。 一、logback的介紹 Logback是由log4j創始人設計的又一個開源日誌元件。logback當前分成三個模組:logback-core,logback- classic和

MySql索引詳細介紹正確使用方法

1.前言: 索引對查詢的速度有著至關重要的影響,理解索引也是進行資料庫效能調優的起點。 索引是儲存引擎用於快速查詢記錄的一種資料結構,通過合理的使用資料庫索引可以大大提高系統的訪問效能,接下來主要介紹在MySql資料庫中索引型別,以及如何創建出更加合理且高效的索引技巧。

日誌元件logback的介紹配置使用方法

<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" v

Fragment的詳細介紹和使用方法案例

由於TabActivity在Android4.0以後已經被完全棄用,那麼我就不再浪費口水繼續講解它了,取而代之的是Fragment。Fragment是Android3.0新增的概念,Fragment翻譯成中文是碎片的意思,不過卻和Activity十分的相似,這一篇我花

Tomcat實現Session物件的持久化原理配置方法介紹

    當一個Session開始時,Servlet容器會為Session建立一個HttpSession物件。Servlet容器在某些情況下把這些 HttpSession物件從記憶體中轉移到檔案系統或資料庫中,在需要訪問 HttpSession資訊時再把它們載入到記憶體中。 實現: 要完成session持久化

linux配置網絡卡IP地址命令詳細介紹一些常用網路配置命令

Linux命令列下配置IP地址不像圖形介面下那麼方 便,完全需要我們手動配置,下面就給大家介紹幾種配置的方法: 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0  //新增IP地址 rout

j2ee監聽器的實現配置方法

tin sta j2ee bsp 對象 配置方法 clas http ont j2ee中存在的監聽器有八種,其中四種有關於session 可以分為以下幾類: 生命周期類:監聽對象的創建和銷毀 Interface  ServletRequestListener Interfa

Charles界面介紹使用方法

ade 當前 lin rewrite ip地址 鼠標滑過 列表 exp 自動 本隨筆主要內容: 一、Charles界面介紹 二、Charles使用 1.會話(Repeat、Focus、Compare、黑白名單等) 2.模擬請求做mock,使用斷點、Map或Rewrite

Linux上redis詳細安裝配置過程

修改 server 9.png 結束 pin 附件 service 文件 col 本次介紹下redis的安裝及詳細配置,需要註意的是本地介紹的不是通過yum方式安裝,也不推薦大家使用yum安裝,安裝完了其實啥也不知道. 1,通過rz命令將本地的tar.gz包上傳到linux

Druid 介紹配置

href tdi int class 們的 repo wall 內存 5% Druid是什麽? Druid是Java語言中最好的數據庫連接池。Druid能夠提供強大的監控和擴展功能。 2. 在哪裏下載druid 正式版本下載:maven中央倉庫: http://

Scribe安裝配置方法

scribeScribe簡介Scribe是Facebook開源的分布式日誌收集系統,目前在各大互聯網公司內部已經得到大量的應用。它能夠從各種日誌源上收集日誌,存儲到一個中央存儲系統(可以是NFS,分布式文件系統等)上,以便於進行集中統計分析處理。它為日誌的“分布式收集,統一處理”提供了一個可擴展的,高容錯的方

演示PostgreSQL的詳細安裝配置圖解

運行 對話 elf 中國 com 完成 .html 找到 tex 右擊文件選擇以管理員身份運行 2 開始執行程序的安裝 3 設置安裝目錄 4 設置數據的保存目錄 5 設置數據庫管理員密碼,請牢記此密碼。

AngularCLI介紹配置文件主要參數含義解析

prefix 域名 最佳實踐 netem cin 存儲 ng- idt 還需 使用Angular CLI可以快速,簡單的搭建一個angular2或angular4項目,是只要掌握幾行命令就能構建出前端架構的最佳實踐,它本質也是使用了webpack來編譯,打包,壓縮等構建的事

轉---CentOS安裝Oracle數據庫詳細介紹常見問題匯總

cati res export 硬件 image centos 6 bin pre 數據庫安裝 一、安裝前準備 1.軟件硬件要求 操作系統:CentOS 6.4(32bit)Oracle數據庫版本:Oracle 10g(10201_database_linux32.zi

Spring介紹配置(XML文件配置和註解配置)

處理 tis 配置文件 3.0 span 特點 inverse logging 結構 本節內容: Spring介紹 Spring搭建 Spring概念 Spring配置講解 使用註解配置Spring 一、Spring介紹 1. 什麽是Spring

linux安裝系統分區詳細介紹常用ls命令

自動分區 fff 英語基礎 沒有 擁有 inux 文件夾 swap user linux對於沒有基礎的初學者來說,最難的就是第一步,不為什麽因為萬事開頭難,第一步就是裝系統分區,而這裏面最難的我認為就是分區部分,如果是讓系統自動分區那就很簡單,但對於初學者一般都是要手動分區

日誌組件slf4j介紹配置詳解

utf 字段 als itl -- owa 輸出結果 apt 查找 1 基本介紹 每一個Java程序員都知道日誌對於任何一個Java應用程序尤其是服務端程序是至關重要的,而很多程序員也已經熟悉各種不同的日誌庫,如java.util.logging、Apache log4j、