iptables實驗3 關于內網外網的地址轉換及端口轉換

地址屬于內核,而不屬于網卡!?。?!

 

 

網絡防火墻的實現(主要是forward鏈)

172.16.100.68(A)172.16.100.67B

192.168.12.10B)和192.168.12.77C)(VNET2

B作為C的網關

 

配置B主機的網卡一個為192.168.1.72,另一個為172.16.25.72

配置C主機的網卡一個

 

[root@B ~]# sysctl -w net.ipv4.ip_forward=1 打開轉發

[root@B ~]# tcpdump -i eno16777736 -nn icmp

此時可以轉發,但是A主機的網關不是192.168.1.72.故它的回應報文此時回不去。

  

 blob.png

 

————————————————————————————————————————————————-

源地址(端口)轉換和目標地址(端口)轉換都不考慮回應報文;而僅考慮第一次接到(DNAT)或發出(SNAT)的報文

 

 

端口映射

 

 blob.png

 

 

NetFilter

NAT NetWork Address Translation

 

SNAT源地址轉換,一般發生在POSTROUTING(路由決策才可以決定是否更改地址,PREROUTINGFORWARDPOSTROUTING都有路由決策)和OUTPUT(本機多塊網卡的地址轉換)

使用場景:本地網絡中的主機通過某一特定地址訪問外部網絡時使用;

 DNAT目標地址轉換,一般發生在PREROUTING,(在路由決策之前,否則會轉入本機)

讓本地網絡中的某些主機的某些服務開放給外部網絡中的用戶訪問時;

PNAT:端口 轉換,比如web服務的服務端口為80,可將真正的web服務器主機的web服務監聽端口設置為8080,而后當客戶端訪問時是80端口,在經過網關時轉換為8080來訪問真正的web服務。

 

NAT表的target

SNAT

 –to-source [ipaddr[-ipaddr]][:port[-port]]

random

DNAT

–to-destination [ipaddr[-ipaddr]][:port[-port]]

random

MASQUERADE

–to-ports port[-port]

–random

 

SNAT示例:

~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT –to-source 172.16.100.67        

 

MASQUERADE示例:

源地址轉換:當外網源地址為動態獲取的地址時,MASQUERADE可自行判斷要轉換為的外網地址;

 

~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE

 

DNAT示例:

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77

 

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77:8080

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 22012 -j DNAT –to-destination 192.168.12.78:22

 

 

REDIRECT:

本機的端口重定向

web: 8080

80 –> 8080

 

 

補充:利用iptablesrecent模塊來抵御DOS攻擊: 22,建立一個列表,保存有所有訪問過指定的服務的客戶端IP

 

 

ssh: 遠程連接,

 

iptables -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP

 

 

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j LOG –log-prefix "SSH Attach: "

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j DROP

 

1.利用connlimit模塊將單IP的并發設置為3;會誤殺使用NAT上網的用戶,可以根據實際情況增大該值;

 

2.利用recentstate模塊限制單IP300s內只能與本機建立2個新連接。被限制五分鐘后即可恢復訪問。

 

下面對最后兩句做一個說明:

 

1.第二句是記錄訪問tcp 22端口的新連接,記錄名稱為SSH

–set 記錄數據包的來源IP,如果IP已經存在將更新已經存在的條目

 

2.第三句是指SSH記錄中的IP,300s內發起超過3次連接則拒絕此IP的連接。

–update 是指每次建立連接都更新列表;

–seconds必須與–rcheck或者–update同時使用

–hitcount必須與–rcheck或者–update同時使用

 

3.iptables的記錄:/proc/net/xt_recent/SSH

 

————————————————————————————————————————————————

CentOS 6

 

http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/

 

layer7:第三方擴展;

 

iptables實現七層訪問過濾:

 

模塊:layer7

識別應用層協議

 

iptables/netfilter

iptables -m state,

netfilter state

 

對內核中的netfilter,打補丁layer7,重新編譯內核

iptables打補丁,補上layer7模塊,重新iptables

 

 

diff/patch:文本操作工具

 

 

diffUnix系統的一個很重要的工具程序。它用來比較兩個文本文件的差異,是代碼版本管理的核心工具之一。其用法非常簡單:

  # diff <變動前的文件> <變動后的文件>

 

由于歷史原因,diff有三種格式:

  * 正常格式(normal diff

  * 上下文格式(context diff

  * 合并格式(unified diff

 

1、正常格式的diff

例如,對file1(變動前的文件)和file2(變動后的文件)進行比較可使用如下命令:

           # diff file1 file2

顯示結果中,第一行是一個提示,用來說明變動位置。它分成三個部分:前面的數字,表示file1的第n行有變化;中間的"c"表示變動的模式是內容改變(change),其他模式還有"增加"a,代表addition)和"刪除"d,代表deletion);

 

2、上下文格式的diff

上個世紀80年代初,加州大學伯克利分校推出BSD版本的Unix時,覺得diff的顯示結果太簡單,最好加入上下文,便于了解發生的變動。因此,推出了上下文格式的diff。它的使用方法是加入-c選項(即context)。

           # diff -c f1 f2

結果分成四個部分。第一部分的兩行,顯示兩個文件的基本情況:文件名和時間信息,"***"表示變動前的文件,"—"表示變動后的文件。第二部分是15個星號,將文件的基本情況與變動內容分割開。第三部分顯示變動前的文件,即file1。

另外,文件內容的每一行最前面,還有一個標記位。如果為空,表示該行無變化;如果是感嘆號(!),表示該行有改動;如果是減號(),表示該行被刪除;如果是加號(+),表示該行為新增。

第四部分顯示變動后的文件,即file2。

 

3、合并格式的diff

如果兩個文件相似度很高,那么上下文格式的diff,將顯示大量重復的內容,很浪費空間。1990年,GNU diff率先推出了"合并格式"diff,將f1f2的上下文合并在一起顯示。

它的使用方法是加入u參數(代表unified)。

  # diff -u f1 f2

其結果的第一部分,也是文件的基本信息。"—"表示變動前的文件,"+++"表示變動后的文件。第二部分,變動的位置用兩個@作為起首和結束。第三部分是變動的具體內容。

除了有變動的那些行以外,也是上下文各顯示3行。它將兩個文件的上下文,合并顯示在一起,所以叫做"合并格式"。每一行最前面的標志位,空表示無變動,減號表示第一個文件刪除的行,加號表示第二個文件新增的行。

 

diff

-u

 

patch

 

盡管并沒有指定patchdiff的關系,但通常patch都使用diff的結果來完成打補丁的工作,這和patch本身支持多種diff輸出文件格式有很大關系。patch通過讀入patch命令文件(可以從標準輸入),對目標文件進行修改。通常先用diff命令比較新老版本,patch命令文件則采用diff的輸出文件,從而保持原版本與新版本一致。

 

patch的標準格式為

patch [options] [originalfile] [patchfile]

 

如果patchfile為空則從標準輸入讀取patchfile內容;如果originalfile也為空,則從patchfile(肯定來自標準輸入)中讀取需要打補丁的文件名。因此,如果需要修改的是目錄,一般都必須在patchfile中記錄目錄下的各個文件名。絕大多數情況下,patch都用以下這種簡單的方式使用:

 

 

patch命令可以忽略文件中的冗余信息,從中取出diff的格式以及所需要patch的文件名,文件名按照diff參數中的"源文件"、"目標文件"以及冗余信息中的"Index"行中所指定的文件的順序來決定。

 

-p參數決定了是否使用讀出的源文件名的前綴目錄信息,不提供-p參數,則忽略所有目錄信息,-p0(或者-p 0)表示使用全部的路徑信息,-p1將忽略第一個"/"以前的目錄,依此類推。如/usr/src/linux-2.4.15/Makefile這樣的文件名,在提供-p3參數時將使用linux-2.4.15/Makefile作為所要patch的文件。

 

patch

-p

-R

 

mockbuild

 

總結:操作步驟

 

1、獲取并編譯內核

 

# useradd mockbuild

# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm

# cd rpmbuild/SOURCES

# tar linux-2.6.32-*.tar.gz -C /usr/src

# cd /usr/src

# ln -sv

 

2、給內核打補丁

# tar xf netfilter-layer7-v2.23.tar.bz2

# cd /usr/src/linux

# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch

# cp /boot/config-*  .config

# make menuconfig

 

按如下步驟啟用layer7模塊                

Networking support Networking Options Network packet filtering framework Core Netfilter Configuration

<M>  “layer7” match support

 

3、編譯并安裝內核

# make

# make modules_install

# make install

 

4、重啟系統,啟用新內核

 

5、編譯iptables

 

# tar xf iptables-1.4.20.tar.gz

# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/

# cp /etc/rc.d/init.d/iptales /root

# cp /etc/sysconfig/iptables-config /root

# rpm -e iptables iptables-ipv6 –nodeps

# ./configure  –prefix=/usr  –with-ksource=/usr/src/linux

# make && make install

 

# cp /root/iptables /etc/rc.d/init.d

# cp /root/iptables-config /etc/sysconfig

 

6、為layer7模塊提供其所識別的協議的特征碼

 

# tar zxvf l7-protocols-2009-05-28.tar.gz

# cd l7-protocols-2009-05-28

# make install                

 

7、如何使用layer7模塊

 

ACCT的功能已經可以在內核參數中按需啟用或禁用。此參數需要裝載nf_conntrack模塊后方能生效。

net.netfilter.nf_conntrack_acct = 1

 

 

 

l7-filter uses the standard iptables extension syntax

# iptables [specify table & chain] -m layer7 –l7proto [protocol name] -j [action]

 

 

# iptables -A FORWARD -m layer7 –l7proto qq -j REJECT

 

 

 

編譯內核:

make menuconfig

make -j #

make modules_install

make install

 

清理內核源碼樹:

 

提示:xt_layer7.ko依賴于nf_conntrack.ko模塊

原創文章,作者:sjfbjs,如若轉載,請注明出處:http://www.www58058.com/54321

(0)
sjfbjssjfbjs
上一篇 2016-10-30 21:02
下一篇 2016-10-30 21:03

相關推薦

  • DNS and BIND 介紹及安裝

    DNS DNS是什么 為什么要用DNS 域名 BIND DNS是什么 DNS:Domain Name System,域名系統DNS作為域名和IP地址相互映射的一個分布式數據庫,能夠讓用戶更方便的訪問互聯網。它的正向映射是吧一個主機和IP地址關聯起來,它的反向映射則是IP地址到主機名。DNS協議運行在UDP協議上,使用53端口。 為什么要用DNS 連接到互聯網…

    Linux干貨 2016-05-28
  • zabbix快速創建篩選(sql操作)

        公司由于大量業務調整,尤其是服務器功能和性能的轉變,監控也跟隨這變化,其中操作最為繁瑣的當數zabbix篩選(相信各位從頁面添加的都深感痛苦)于是有了本文。     本文采用的方法是sql操作(由于本人不會php等,無法寫程序直接調用官方api,所以,嘿嘿,不解釋,同時也希望各路大…

    Linux干貨 2015-12-17
  • Linux計劃任務

    計劃任務 Linux任務計劃、周期性任務執行 ? 未來的某時間點執行一次任務:     at     batch:系統自行選擇空閑時間去執行此處指定的任務 ? 周期性運行某任務:      cron at任務 …

    Linux干貨 2016-09-10
  • N23-第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# last -1 | head -1 3、取出當前系統上被用戶當…

    Linux干貨 2016-12-05
  • openssh及基于ssl的https的配置

    openssh的簡介             OpenSSH 是 SSH 協議的免費開源實現。SSH協議族可以用來進行遠程控制, 或在計算機之間傳送文件。 而實現此功能的傳統方式,如telnet(終端仿真協議)、 rcp ftp、 rlogin、rs…

    Linux干貨 2017-05-30
  • 排名三劍客的VIM _正確的打開姿勢!

    vim程序編輯器        vi:是老式的文字處理器。     vi的使用:【vi分為3種模式一般模式、編輯模式、命令模式】         一般模式:   vi打開文件就直接進入到了一…

    Linux干貨 2017-04-10
欧美性久久久久