天天看點

iptables

table height=2188 style="border-collapse:collapse;width:803.25pt;">

防火牆就是透過訂定一些有順序的規則,并管制進入到我們網域内的主機 (或者可以說是網域) 資料封包的一種機制!防火牆又可以分為硬體防火牆與本機的軟體防火牆。硬體防火牆是由廠商設計好的主機硬體, 這部硬體防火牆内的作業系統主要以提供封包資料的過濾機制為主,并将其他不必要的功能拿掉。因為單純作為防火牆功能而已, 軟體防火牆本身就是在保護系統網絡安全的一套軟體(或稱為機制)所謂的封包過濾,亦即是分析進入主機的網絡封包,将封包的表頭資料捉出來進行分析,以決定該聯機為放行或抵擋的機制。 由于這種方式可以直接分析封包表頭資料,是以包括硬體位址(MAC), 軟體位址 (IP), TCP, UDP, ICMP 等封包的資訊都可以進行過濾分析的功能。

規則的功能分為以下4種:

    filter: 過濾功能,定義是否允許通過防火牆,INPUT,OUTPUT,FORWARD都需要用到過濾的功能

    nat: 位址轉換,啟用connection_track子產品;PREROUTING,POSTROUTINIG,FORWARD都需要用到轉換的功能

    mangle: 用于對資料包相關字段的修改;PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING都可以用到

    raw: 目标是關閉nat表上啟用的連接配接追蹤功能;PREROUTING, OUTPUT都需要用到此功能

iptables

比對條件

通用比對

iptables

-s位址

指定封包源IP位址比對的範圍;可以是IP,也可以是網絡位址;可使用!取反;--src, --source

-d位址

指定封包目标IP位址比對的範圍;  --dst, --destination

-p協定

指定比對封包的協定類型,一般有三種tcp, udp和icmp以及all

-iINTERFACE

資料封包流入的接口;PREROUTING, INPUT, FORWARD 例如:eth0 ,lo 等需要與INPUT鍊配合

-oINTERFACE

據封包流出的接口;OUTPUT, FORWARD, POSTROUITING  需要于OUTPUT配合

-n

不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!

-j

目标,後邊接操作,主要操作有:接受(ACCEPT),丢棄(DROP),拒絕(REJECT),記錄(LOG)。。。

ACCEPT

接受

DROP

丢棄

REJECT

拒絕

LOG

如果要記錄日志,需要寫在其他政策前面

SNAT

修改資料包報頭來源,接受傳回的資料在路由前就需要轉換報頭,否則會送往轉換主機的内部去

DNAT

修改資料包報頭的目标項目:主要是架設伺服器使用,當通路給出的外部公網位址時,可以轉換為内部的伺服器位址。相當于SNAT的反傳送。

PANT

MASQERADE

主要用于ADSL撥号上網,可以自動尋找公網IP。代理。

RETURN

目标,在自定義鍊中無法比對封包時,将其傳回

擴充比對

調用nstfilter額外子產品實作特殊檢查機制,必須使用-m選項來指定調用那個子產品

顯式比對

顯式擴充:必須明确說明使用哪個子產品進行擴充,需要-m指定那個子產品,而後才能使用其擴充專用選項;

-m

multiport

多端口比對

專用選項

--source-ports, --sports port[,port,port:port]

--destination-ports, --dports

--ports

示例

# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

iprange

比對指定範圍内的位址,比對一段連續的位址而非整個網絡時有用

[!] --src-ragne IP[-IP]

[!] --dst-range

# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

string

字元串比對,能夠檢測封包應用層中的字元串 算法:kmp  bm

  --algo {kmp|bm}

  --string "STRING"

--hex-string  "HEX_STRING" :HEX_STRING為編碼成16進制格式的字串

# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

time

基于時間做通路控制

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

--datestop

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

--weekdays day[,day]

# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT

connlimit

連接配接數限制,對每IP所能夠發起并發連接配接數做限制

[!]--connlimit-above N        小于N的連接配接數允許,大于拒絕

   #iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

limit

速率限制

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

--limit-burst n   一次多放幾個

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

state

狀态檢查

--state

狀态類型

NEW:建立立一個會話

ESTABLISHED:已建立的連接配接

RELATED:有關聯關系的連接配接  (ftb)

INVALID:無法識别的連接配接

/proc/sys/net/nf_conntrack_max:調整連接配接追蹤功能所能容納的連接配接的最大數目

/proc/net/nf_conntrack:目前追蹤的所有連接配接

/proc/sys/net/netfilter/*:不同協定或連接配接類型追蹤時的屬性

#iptables -A INPUT -d 172.16.100.7 -p tcp -m state RELATED -j ACCEPT

#iptables -R OUTPUT 1 -s 172.16.100.7  -m state ESRABLISHED,RELATED -j ACCEPT

mac

網卡硬體位址

--mac-source 來源諸暨的MAC

   #iptables -A INPUT -m mac

隐式比對

隐式擴充:當使用-p {tcp|udp|icmp}中的一種時,需要-m指定那個子產品,也可以直接使用擴充專用選項;

-p

-p [-m] tcp:

-p tcp == [-m tcp]

選項

--sport PORT[-PORT]: 指定源端口,端口可以是連續的範圍port-port

--dport PORT[-PORT]: 指定目标端口,端口可以是連續的範圍port-p

--tcp-flags 要檢查的标志位清單(逗号分隔),必須為1的标志位清單(逗号分隔)

例如:--tcp-flags syn,ack,rst,syn

-p [-m] udp:

-p udp == [-m udp]

--dport PORT[-PORT]: 指定目标端口,端口可以是連續的範圍port-port

-p [-m] icmp:

--icmp-type:後邊必須要接ICMP的資料包類型,也可以使用代号。

0: echo-reply, ping響應

8: echo-request, ping請求

-p all

三種協定

TABLE

預設是filter

filter

過濾功能,定義是否允許通過防火牆

nat

位址轉換,需要啟用connection_track子產品

mangle

用于對資料包相關字段的修改

raw

目标是關閉nat表上啟用的連接配接追蹤功能

INPUT

進入本機路由後

OUTPUT

本機出來路由前

PREROUTING

進入本機路由前

POSTROUTING

出去

FORWARD

轉發

鍊規則

-A

新增一條規則,該規則增加在原規則後邊,

-I

:插入一條新規則,如果沒有指定規則順序,則此規則變成第一條規則,其他規則依次為2-N

-D

删除規則

-R

替換規則

-L

查詢,list

-n:以數字格式顯示主機位址和端口

-v:詳細格式,vv,vvv

--line-numbers:顯示規則編号

-x:exactly,不要對計數器的計數結果做機關換算,而顯示其精确值。

注意:千萬不要iptables -t net  -L -n  檢視net 會啟動連結追蹤功能,

-N

new 自定義一個鍊,隻可被調用 iptables [-t table] -N chain

-X

delete,删除自定義空鍊 iptables [-t table] -N chain

-E

重命名自定義鍊。iptables [-t table] -E old_name  new_name

-Z

zero,計數器歸零。

-P

policy,設定預設政策,對filter表來講,預設規則為ACCEPT或DROP;

-s 位址

-d 位址

-p 協定

-i  INTERFACE

-o INTERFACE

資料封包流出的接口;OUTPUT, FORWARD, POSTROUITING  需要于OUTPUT配合

如果要記錄日志,需要寫在其他政策前邊

修改資料包報頭來源,接受傳回的資料在路由前就需要轉換報頭,否則會送往轉換主機的内部去。

PNAT

指定封包目标IP位址比對的範圍; --dst, --destination

據封包流出的接口;OUTPUT, FORWARD, POSTROUITING 需要于OUTPUT配合

字元串比對,能夠檢測封包應用層中的字元串 算法:kmp bm

--algo {kmp|bm}

--string "STRING"

--hex-string "HEX_STRING" :HEX_STRING為編碼成16進制格式的字串

[!]--connlimit-above N 小于N的連接配接數允許,大于拒絕

#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

--limit-burst n 一次多放幾個

RELATED:有關聯關系的連接配接 (ftb)

#iptables -R OUTPUT 1 -s 172.16.100.7 -m state ESRABLISHED,RELATED -j ACCEPT

#iptables -A INPUT -m mac

繼續閱讀