1. 程式人生 > >Linux 第82天 iptables

Linux 第82天 iptables

Linux 第82天 iptables

時間: 20181024

個人小站: www.winthcloud.top



目錄

安全技術(IDS,IPS,Firewall)

防火牆的分類(根據不同的方式區分類別)

Linux的防火牆工具

iptables的基本認識

iptables的組成raw,mangle,net,filter

(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING)

核心中資料包的傳輸過程

iptables規則

iptables新增要點

iptables實驗準備環境

iptables命令

規則格式

匹配條件

處理動作

        顯式擴充套件:必須顯式地指明使用的擴充套件模組進行的擴充套件 (重點) 

                multiport, string, iprange, time, mac, state, collimit, limit

ipset介紹

iptables的連結跟蹤表

開放被動模式的ftp服務

Target

規則優化

規則有效期限

開機自動過載規則

網路防火牆SNAT,DNAT,轉發REDIRECT




安全技術


IDS

***檢測與管理系統(Intrusion Detection Systems):特點是不阻斷任何網路訪問

量化、定位來自內外網路的威脅情況,主要以提供報告和事後監督為主,提供有針對性的

指導措施和安全決策依據。一般採用旁路部署方式

IPS

***防禦系統(Intrusion Prevention System):以透明模式工作,分析資料包的內

容如:溢位***、拒絕服務***、***、蠕蟲、系統漏洞等進行準確的分析判斷,在判定為

***行為後立即予以阻斷,主動而有效的保護網路的安全,一般採用線上部署方式

Firewall

防火牆(FireWall):隔離功能,工作在網路或主機邊緣,對進出網路或主機的資料包

基於一定的規則檢查,並在匹配某規則時由規則定義的行為進行處理的一組功能的元件,

基本上的實現都是預設情況下關閉所有的通過型訪問,只開放允許訪問的策略



防火牆的分類(根據不同的方式區分類別)

主機防火牆:服務範圍為當前主機

網路防火牆:服務範圍為防火牆一側的區域網

硬體防火牆:在專用硬體級別實現部分功能的防火牆;另一個部分功能基於軟體實現

Checkpoint,NetScreen

軟體防火牆:運行於通用硬體平臺之上的防火牆的應用軟體

網路層防火牆:OSI模型下四層

應用層防火牆/代理伺服器:代理閘道器,OSI模型七層


Linux裡的防火牆工具

iptables

命令列工具,工作在使用者空間

用來編寫規則,寫好的規則被送往netfilter,告訴核心如何去處理資訊包

firewalld

CentOS7 引入了新的前端管理工具

管理工具:

firewall-cmd命令列

firewall-config圖形



iptables的基本認識

一個程式可以和核心空間所提供的系統呼叫進行交互向核心空間傳遞引數來控制訪問本機

或經過此臺機器的報文。

Netfilter元件

工作在核心空間,整合在linux核心中

擴充套件各種網路服務的結構化底層框架

核心中選取五個位置放了五個hook(勾子) 

function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),

而這五個hook function向用戶開放,使用者可以通過一個命令工具

(iptables)向其寫入規則

由資訊過濾表(table)組成,包含控制IP包處理的規則集(rules),

規則被分組放在鏈(chain)上


三種報文流向:

流入本機:PREROUTING --> INPUT-->使用者空間程序

流出本機:使用者空間程序-->OUTPUT--> POSTROUTING

轉發:PREROUTING --> FORWARD --> POSTROUTING


iptables的組成

iptables由五個表和五個鏈以及一些規則組成

五個表table:filter、nat、mangle、raw、security

filter表:過濾規則表,根據預定義的規則過濾符合條件的資料包

nat表:network address translation 地址轉換規則表

mangle:修改資料標記位規則表

raw:關閉NAT表上啟用的連線跟蹤機制,加快封包穿越防火牆速度

security:用於強制訪問控制(MAC)網路規則,由Linux安全模組(如SELinux)實現

優先順序由高到低的順序為:security -->raw-->mangle-->nat-->filter


五個內建鏈chain

INPUT

OUTPUT

FORWARD

PREROUTING

POSTROUTING


哪個表上有哪裡鏈

raw (PREROUTING, POSTROUTING)

mangle (PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING)

nat (PREROUTING, INPUT, OUTPUT, POSTROUTING)

filter (INPUT, FORWARD, OUTPUT)


哪個鏈上有哪些表(注意先後順序代表優先匹配順序)

PREROUTING (raw, mangle, nat)

INPUT (mangle, nat, filter)

OUTPUT (mangle, nat, filter)

FORWARD (mangle, filter)

POSTROUTING (raw, mangle, nat)


核心中資料包的傳輸過程

1. 當一個數據包進入網絡卡時,資料包首先進入PREROUTING鏈,核心根據資料包目的IP判斷

是否需要轉送出去

2. 如果資料包就是進入本機的,資料包就會到達INPUT鏈。資料包到達INPUT鏈後,核心將其

拆包檢查4層埠然後由核心將資料轉送至指定的埠,交給上層使用者空間程序

3. 本機上執行的程式傳送資料包,資料包經過OUTPUT鏈,到達POSTROUTING鏈輸出至網絡卡


4. 如果資料包是要轉發出去的,且核心允許轉發,資料包就經過FORWARD鏈,然後到達

POSTROUTING鏈輸出


iptables規則


規則rule:根據規則的匹配條件嘗試匹配報文,

對匹配成功的報文根據規則定義的處理動作作出處理

匹配條件:預設為與條件,同時滿足

基本匹配:IP,埠,TCP的Flags(SYN,ACK等)

擴充套件匹配:通過複雜高階功能匹配

處理動作:稱為target,跳轉目標

內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...

自定義處理動作:自定義chain,利用分類管理複雜情形


注意: 規則要新增在鏈上,才生效;新增在自定義上不會自動生效


鏈Chain:

內建鏈:每個內建鏈對應於一個鉤子函式

自定義鏈:用於對內建鏈進行擴充套件或補充,可實現更靈活的規則組織管

理機制;只有在Hook鉤子上呼叫自定義鏈時,才生效


iptables新增要點

iptables規則新增時考量點

要實現哪種功能:判斷新增在哪張表上

報文流經的路徑:判斷新增在哪個鏈上

報文的流向:判斷源和目的

匹配規則:業務需要


實驗環境準備

Centos7:systemctl stop firewalld.service

systemctl disable firewalld.service

Centos6:service iptables stop

chkconfig iptables off


iptables命令


man 8 iptables

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

-A attend -C check -D delete

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

-I insert 

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

-R replace

iptables [-t table] -D chain rulenum

-D delete

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

-S --list-rules

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

-F flush -L --list -Z zero

iptables [-t table] -N chain

-N new 新建chain

iptables [-t table] -X [chain]

-X --delete-chain

iptables [-t table] -P chain target

-P policy 設定預設規則

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

-E edit 更改自定義的鏈名

rule-specification = [matches...] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]


table

filter

nat

mangle

raw

security


Chain(預設的鏈)

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING


-t 省略表示filter

-A attend 新增規則

-C check

-D delete 刪除規則

-i insert 插入規則(不加數值表示插入至第一條)

-R replace 替換所指定的規則

-N new-chain 新建chain

-X delete-chain 不加只能刪除空鏈和未被呼叫的鏈


-Z zero 清空所匹配到的計數器,不加則清除預設規則計數器

-L list 列出規則

-F flush 重新整理,即清空規則

-P policy 更改預設規則

-E edit 重新命名鏈


-j

ACCEPT 接受

DROP 丟棄 丟棄後連線還是會持續的(建議使用)

REJECT 拒絕

custom_chain


規則格式:iptables[-t table] SUBCOMMAND chain 

[-m matchname[per-match-options]] 

-j targetname[per-target-options]

-t table:

raw, mangle, nat, [filter]預設

SUBCOMMAND:

1、鏈管理:

-N:new, 自定義一條新的規則鏈

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

-P:Policy,設定預設策略;對filter表中的鏈而言,其預設策略有:

ACCEPT:接受

DROP:丟棄

-E:重新命名自定義鏈;引用計數不為0的自定義鏈不能夠被重新命名,也不能被刪除


2、檢視:

-L:list, 列出指定鏈上的所有規則,本選項須置後

-n:numberic,以數字格式顯示地址和埠號

-v:verbose,詳細資訊

-vv更詳細

-x:exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值

--line-numbers:顯示規則的序號

常用組合:

-vnL

-vvnxL--line-numbers

-S selected,以iptables-save 命令格式顯示鏈上規則

3、規則管理:

-A:append,追加

-I:insert, 插入,要指明插入至的規則編號,預設為第一條

-D:delete,刪除

(1) 指明規則序號

(2) 指明規則本身

-R:replace,替換指定鏈上的指定規則編號

-F:flush,清空指定的規則鏈

-Z:zero,置零

iptables的每條規則都有兩個計數器

(1) 匹配到的報文的個數

(2) 匹配到的所有報文的大小之和

chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING


匹配條件

基本:通用的,PARAMETERS

擴充套件:需載入模組,MATCH EXTENTIONS

1、基本匹配條件:無需載入模組,由iptables/netfilter自行提供 !表示可以取反

[!] -s, --source address[/mask][,...]:源IP地址或範圍

[!] -d, --destination address[/mask][,...]:目標IP地址或範圍

[!] -p, --protocol protocol:指定協議,可使用數字如0(all)

protocol: tcp, udp, icmp, icmpv6, udplite, esp, ah, sctp, mh or all 

參看:/etc/protocols

[!] -i, --in-interface name:報文流入的介面;只能應用於資料報文流入環節,

只應用於INPUT、FORWARD、PREROUTING鏈

[!] -o, --out-interface name:報文流出的介面;只能應用於資料報文流出的環節,

只應用於FORWARD、OUTPUT、POSTROUTING鏈


2 擴充套件匹配條件:需要載入擴充套件模組(/usr/lib64/xtables/*.so),方可生效

檢視幫助man iptables-extensions

(1)隱式擴充套件:在使用-p選項指明瞭特定的協議時,無需再用-m選項指明擴充套件模組的

擴充套件機制,不需要手動載入擴充套件模組

tcp協議的擴充套件選項

[!] --source-port, --sport port[:port]:匹配報文源埠,可為埠範圍

[!] --destination-port,--dportport[:port]:匹配報文目標埠,可為範圍

[!] --tcp-flags mask comp

mask 需檢查的標誌位列表,用,分隔 例如SYN,ACK,FIN,RST

comp 在mask列表中必須為1的標誌位列表,無指定則必須為0,用,分隔

示例:

--tcp-flags SYN,ACK,FIN,RST SYN 

表示要檢查的標誌位為SYN,ACK,FIN,RST四個,

其中SYN必須為1,餘下的必須為0 (即tcp握手第一次)

--tcp-flags SYN,ACK,FIN,RST SYN,ACK (即tcp握手第二次)

--tcp-flags ALL ALL 所有標誌為1

--tcp_flags ALL NONE 所有標誌為0


[!] --syn:用於匹配第一次握手

相當於:--tcp-flags SYN,ACK,FIN,RST SYN

udp協議擴充套件

[!] --source-port, --sport port[:port]:匹配報文的源埠或埠範圍

[!] --destination-port,--dportport[:port]:匹配報文的目標埠或埠範圍


icmp

[!] --icmp-type {type[/code]|typename}

type/code

0/0 echo-reply icmp 應答

8/0 echo-request icmp 請求



(2)顯式擴充套件:必須使用-m選項指明要呼叫的擴充套件模組的擴充套件機制,要手動載入擴充套件模組

[-m matchname[per-match-options]]


處理動作

-j targetname[per-target-options]

簡單:ACCEPT,DROP

擴充套件:REJECT:--reject-with:icmp-port-unreachable預設

RETURN:返回呼叫鏈

REDIRECT:埠重定向

LOG:記錄日誌,dmesg

MARK:做防火牆標記

DNAT:目標地址轉換

SNAT:源地址轉換

MASQUERADE:地址偽裝

...

自定義鏈:



顯式擴充套件:必須顯式地指明使用的擴充套件模組進行的擴充套件 (重點)

使用幫助:

CentOS 6: man iptables

CentOS 7: man iptables-extensions

1、multiport擴充套件(最多15個 port:port算一個)

以離散方式定義多埠匹配,最多指定15個埠

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

指定多個源埠

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

指定多個目標埠

[!] --ports port[,port|,port:port]...多個源或目標埠

示例:

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp 

-m multiport --dports 20:22,80 -j ACCEPT

2、iprange擴充套件

指明連續的(但一般不是整個網路)ip地址範圍

[!] --src-range from[-to]源IP地址範圍

[!] --dst-range from[-to]目標IP地址範圍

示例:

iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 

-m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP



3、mac擴充套件

指明源MAC地址

適用於:PREROUTING, FORWARD,INPUT chains

[!] --mac-source XX:XX:XX:XX:XX:XX

示例:

iptables -A INPUT -s 172.16.0.100 -m mac 

--mac-source 00:50:56:12:34:56 -j ACCEPT

iptables-A INPUT -s 172.16.0.100 -j REJECT


4、string擴充套件

對報文中的應用層資料做字串模式匹配檢測

--algo{bm|kmp}字串匹配檢測演算法

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

--from offset 開始偏移

--to offset 結束偏移

[!] --string pattern要檢測的字串模式

[!] --hex-string pattern要檢測字串模式,16進位制格式

示例:

iptables-A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp--sport 80 

-m string --algobm --string "google" -j REJECT


5、time擴充套件(注意時區問題)

根據將報文到達的時間與指定的時間範圍進行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss] 時間

--timestop hh:mm[:ss]

[!] --monthdaysday[,day...] 每個月的幾號

[!] --weekdays day[,day...] 星期幾,1 –7 分別表示星期一到星期日

--kerneltz:核心時區,不建議使用,CentOS7系統預設為UTC

注意:centos6 不支援kerneltz,--localtz指定本地時區(預設)

示例:

iptables-A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport80 

-m time --timestart 14:30 --timestop 18:30 --weekdays 

Sat,Sun --kerneltz -j DROP


6、connlimit擴充套件

根據每客戶端IP做併發連線數數量匹配

可防止 CC(Challenge Collapsar挑戰黑洞)***


--connlimit-upto #:連線的數量小於等於#時匹配

--connlimit-above #:連線的數量大於#時匹配

通常分別與預設的拒絕或允許策略配合使用

示例:

iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit 

--connlimit-above 2 -j REJECT


7、limit擴充套件

基於收發報文的速率做匹配

令牌桶過濾器 長時間沒有訪問時會收集但是有最大限制,瞬時捅來可放行比limi限制多

一些的請求,但是當burst令牌用光時則不會再有瞬間速度

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

--limit-burst number

示例:

iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit 

--limit 10/minute --limit-burst 5 -j ACCEPT


8、state擴充套件

根據”連線追蹤機制“去檢查連線的狀態,較耗資源

conntrack機制:追蹤本機上的請求和響應之間的關係

狀態有如下幾種:

NEW:新發出請求;連線追蹤資訊庫中不存在此連線的相關資訊條目,

因此,將其識別為第一次發出的請求

ESTABLISHED:NEW狀態之後,連線追蹤資訊庫中為其建立的條目失效之前期間

內所進行的通訊狀態

RELATED:新發起的但與已有連線相關聯的連線,如:ftp協議中的資料連線與命

令連線之間的關係

INVALID:無效的連線,如flag標記不正確

UNTRACKED:未進行追蹤的連線,如raw表中關閉追蹤

[!] --state state

示例:

iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 21,22,80 

-m state --state NEW,ESTABLISHED -j ACCEPT

iptables-A OUTPUT -s 172.16.1.10 -p tcp-m multiport --sports 21,22,80 

-m state --state ESTABLISHED -j ACCEPT

已經追蹤到的並記錄下來的連線資訊庫

/proc/net/nf_conntrack

調整連線追蹤功能所能夠容納的最大連線數量

/proc/sys/net/nf_conntrack_max

不同的協議的連線追蹤時長

/proc/sys/net/netfilter/

注意:CentOS7 需要載入模組:modprobe nf_conntrack_ftp



ipset介紹 

ipset是iptables的擴充套件,它可以建立匹配整個地址集合的規則。而不像普通的iptables鏈

只能單IP匹配, ip集合儲存在帶索引的資料結構中,這種結構即使集合比較大也可以進行高效

的查詢,除了一些常用的情況,比如阻止一些危險主機訪問本機,從而減少系統資源佔用或網

絡擁塞,IPsets也具備一些新防火牆設計方法,並簡化了配置.

官網:http://ipset.netfilter.org/


1.ipset安裝

yum安裝: yum install ipset 


2.建立一個ipset

ipset create xxx hash:net 

(也可以是hash:ip ,這指的是單個ip,xxx是ipset名稱) 

ipset預設可以儲存65536個元素,使用maxelem指定數量


ipset create blacklist hash:net maxelem 1000000 #黑名單 

ipset create whitelist hash:net maxelem 1000000 #白名單 

檢視已建立的ipset

ipset list 


3.加入一個名單ip

ipset add blacklist 10.60.10.xx 

4.去除名單ip

ipset del blacklist 10.60.10.xx 


5.建立防火牆規則,與此同時,allset這個IP集裡的ip都無法訪問80埠(如:CC***可用)


iptables -I INPUT -m set –match-set blacklist src -p tcp -j DROP 

iptables -I INPUT -m set –match-set whitelist src -p tcp -j DROP 

service iptables save 


iptables -I INPUT -m set –match-set setname src -p tcp

–destination-port 80 -j DROP 


6.將ipset規則儲存到檔案

ipset save blacklist -f blacklist.txt 

ipset save whitelist -f whitelist.txt 

7.刪除ipset

ipset destroy blacklist 

ipset destroy whitelist 

8.匯入ipset規則


ipset restore -f blacklist.txt 

ipset restore -f whitelist.txt 

ipset的一個優勢是集合可以動態的修改,即使ipset的iptables規則目前已經啟動

新加的入ipset的ip也生效



iptables的連結跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,

各種狀態的超時連結會從表中刪除;當模板滿載時,後續連線可能會超時

解決方法兩個:

(1) 加大nf_conntrack_max值

vi /etc/sysctl.conf

net.nf_conntrack_max= 393216

net.netfilter.nf_conntrack_max= 393216

(2) 降低nf_conntracktimeout時間

vi /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_established= 300

net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120

iptables-t nat-L -n


開放被動模式的ftp服務

(1) 裝載ftp連線追蹤的專用模組:

跟蹤模組路徑:/lib/modules/kernelversion/kernel/net/netfilter

vim /etc/sysconfig/iptables-config配置檔案

IPTABLES_MODULES=“nf_conntrack_ftp"

modproble nf_conntrack_ftp

(2) 放行請求報文:

命令連線:NEW, ESTABLISHED

資料連線:RELATED, ESTABLISHED

iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED 

-j ACCEPT

iptables -A INPUT -d LocalIP -p tcp--dport 21 -m state --state NEW 

-j ACCEPT

(3) 放行響應報文:

iptables -I OUTPUT -s LocalIP -p tcp-m state --state ESTABLISHED

-j ACCEPT


Target

ACCEPT,DROP,REJECT,RETURN, LOG,SNAT,DNAT,REDIRECT,MASQUERADE,..

LOG:非中斷target,本身不拒絕和允許,放在拒絕和允許規則前

並將日誌記錄在/var/log/messages系統日誌中

--log-level level 級別:debug,info,notice, warning, error, crit, 

alert,emerg

--log-prefix prefix 日誌字首,用於區別不同的日誌,最多29個字元

示例:

iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 

-m state --state NEW -j LOG --log-prefix "new connections: "


規則優化

任何不允許的訪問,應該在請求到達時給予拒絕

規則在連結上的次序即為其檢查時的生效次序

基於上述,規則優化

1 安全放行所有入站和出站的狀態為ESTABLISHED狀態連線

2 謹慎放行入站的新請求

3 有特殊目的限制訪問功能,要在放行規則之前加以拒絕

4 同類規則(訪問同一應用),匹配範圍小的放在前面,用於特殊處理

5 不同類的規則(訪問不同應用),匹配範圍大的放在前面

6 應該將那些可由一條規則能夠描述的多個規則合併為一條

7 設定預設策略,建議白名單(只放行特定連線)

1)iptables -P,不建議

2)建議在規則的最後定義規則做為預設策略



規則有效期限:

使用iptables命令定義的規則,手動刪除之前,其生效期限為kernel存活期限

儲存規則:

儲存規則至指定的檔案

CentOS 6

service iptables save

將規則覆蓋儲存至/etc/sysconfig/iptables檔案中

CentOS7

iptables-save > /PATH/TO/SOME_RULES_FILE


CentOS 6:

service iptablesrestart

會自動從/etc/sysconfig/iptables重新載入規則

CentOS 7重新載入預存規則檔案中規則:

iptables-restore < /PATH/FROM/SOME_RULES_FILE

-n, --noflush:不清除原有規則

-t, --test:僅分析生成規則集,但不提交


開機自動過載規則

開機自動過載規則檔案中的規則:

(1) 安裝iptables-services程式包

並將規則匯入至/etc/sysconfig/iptables檔案 

systemctl restart iptables

此安裝包便會讀取其配置檔案裡的規則


(2) 用指令碼儲存各iptables命令;讓此指令碼開機後自動執行

/etc/rc.d/rc.local檔案中新增指令碼路徑

/PATH/TO/SOME_SCRIPT_FILE

(3) 用規則檔案儲存各規則,開機時自動載入此規則檔案中的規則

/etc/rc.d/rc.local檔案新增

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

(4)自定義Unit File,進行iptables-restore



網路防火牆


iptables/netfilter網路防火牆:

(1) 充當閘道器

(2) 使用filter表的FORWARD鏈

注意的問題:

(1) 請求-響應報文均會經由FORWARD鏈,要注意規則的方向性

(2) 如果要啟用conntrack機制,建議將雙方向的狀態為ESTABLISHED的報文直接放行


NAT

要做NAT必須開啟包轉發功能 echo 1 > 


NAT: network address translation

PREROUTING,INPUT,OUTPUT,POSTROUTING

請求報文:修改源/目標IP,由定義如何修改

響應報文:修改源/目標IP,根據跟蹤機制自動實現

SNAT:source NAT POSTROUTING, INPUT

讓本地網路中的主機通過某一特定地址訪問外部網路,實現地址偽裝

請求報文:修改源IP

DNAT:destination NAT PREROUTING, OUTPUT

把本地網路中的主機上的某服務開放給外部網路訪問(釋出服務和埠對映),

但隱藏真實IP

請求報文:修改目標IP

PNAT: port nat,埠和IP都進行修改


SNAT

nat表的target:

SNAT:固定IP

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

--random

iptables -t nat-A POSTROUTING -s LocalNET! -d LocalNet-j SNAT 

--to-source ExtIP

示例:

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24

-j SNAT --to-source 172.18.1.6-172.18.1.9


MASQUERADE:動態IP,如撥號網路

--to-ports port[-port]

--random

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

示例:

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 

-j MASQUERADE



DNAT

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

iptables -t nat-A PREROUTING -d ExtIP-p tcp|udp--dportPORT 

-j DNAT --to-destination InterSeverIP[:PORT]

示例:

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22

-j DNAT --to-destination 10.0.1.22

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80

-j DNAT --to-destination 10.0.1.22:8080


轉發


REDIRECT:

NAT表

可用於:PREROUTING OUTPUT 自定義鏈

通過改變目標IP和埠,將接受的包轉發至不同埠

--to-ports port[-port]

示例:

iptables -t nat-A PREROUTING -d 172.16.100.10 -p tcp --dport 80 

-j REDIRECT --to-ports 8080


總結

1. 定義遠端服務可先加定時任務刪除策略可以防自己被擋在外邊或先在其它機器測試

2. iptables set離散的IP設定,如果想要限制一組IP阻止或允許,就需要使用ipset