1. 程式人生 > >Linux運維學習筆記之三十二: 防火牆實戰

Linux運維學習筆記之三十二: 防火牆實戰

第四十三章 防火牆實戰

一、Iptables基礎概念

1、一般使用情況
(1)seLinux關閉(生產系統也是關閉的)
(2)使用硬體ids(入侵檢測)
(3)iptables在生產環境中一般是內閘道器閉,外網開啟。在大併發的情況下,不能開iptables,影響效能,這時可以使用硬體防火牆。
2、安全優化
(1)儘可能不給伺服器配置外網ip。可以通過代理轉發。
(2)併發不是特別大的情況下,在外網環境中,開啟防火牆。
3、iptables防火牆簡介

netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

iptables只是Linux防火牆的管理工具而已,位於/sbin/iptables。真正實現防火牆功能的是 netfilter,它是Linux核心中實現包過濾的內部結構。

(1)名詞和術語

a、容器

包含或者說屬於的關係

b、Netfilter/iptables是表的容器

iptables包含的4張表:filter(預設,常用),NAT(常用),MANGLE(不常用),RAW(不用管),分別用於實現包過濾,網路地址轉換、包重構(修改)和資料跟蹤處理。

c、iptables的表tables又是鏈(chains)的容器

鏈(chains)是資料包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該資料包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該資料包;否則iptables將繼續檢查下一條規則,如果該資料包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的預設策略來處理資料包。

鏈(chains)有5種:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING。

注意:鏈名要大寫

表跟鏈的關係

d、鏈chains是規則容器

INPUT——進來的資料包應用此規則鏈中的策略

OUTPUT——外出的資料包應用此規則鏈中的策略

FORWARD——轉發資料包時應用此規則鏈中的策略

PREROUTING——對資料包作路由選擇前應用此鏈中的規則(記住!所有的資料包進來的時侯都先由這個鏈處理)

POSTROUTING——對資料包作路由選擇後應用此鏈中的規則(所有的資料包出來的時侯都先由這個鏈處理)

e、規則Policy:一條條過濾的語句。

規則(rules)其實就是網路管理員預定義的條件,規則一般的定義為“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。規則儲存在核心空間的資訊 包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務型別(如HTTP、FTP和SMTP)等。當資料包與規則匹配時,iptables就根據規則所定義的方法來處理這些資料包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是新增、修改和刪除這些規則。

(2)filter表

a、filter表的作用

filter表,主要是和主機自身有關的配置,是真正負責主機防火牆功能的表(過濾流入和流出主機的資料包)。filter表是iptables預設使用的表(沒有用-t引數指定表名的情況下,預設為filter表,如iptable -L -n).

filter表的控制是實現本機防火牆功能的重要手段,特別是對INPUT鏈的控制。

b、filter表包含的鏈

filter表定義瞭如下3個鏈:

INPUT:負責過濾所有目標地址是本機地址的資料包(也就是過濾進入主機的資料包)。

FORWARD:負責轉發流經主機的資料包。起轉發的作用,和NAT關係很大。LVS NAT模式設定:net.ipv4.ip_forward=0

OUTPUT:負責過濾所有源地址是本機地址的資料包(也就是過濾從主機發出去的資料包)。

(3)nat表

a、nat表的作用

nat表主要是負責網路地址轉換,將來源與目的ip地址和port進行轉換。和主機本身無關。一般用於區域網共享上網或者特殊埠轉換服務相關。相當於網路的acl控制。和網路交換機acl類似。

b、一般企業工作場景

(i)用於做企業路由(zebra)或閘道器(iptables),共享上網(POSTROUTING)

(ii)做內部外部IP地址一對一對映(DMZ),硬體防火牆對映IP到內部伺服器,FTP服務。(PREROUTING)

(iii)Web,單個埠的對映,如直接對映到80埠(PREROUTING)

c、nat表包含的鏈

OUTPUT:和主機發出去的資料包有關。改變主機發出資料包的目標地址。

PREROUTING:在資料包到達防火牆時,進行路由判斷之前執行的規則。作用是改變資料包的目的地址、目的埠等。

POSTROUTING:在資料包離開防火牆進,進行路由判斷之後執行的規則。作用是改變資料包的源地址、源埠等。

(4)mangle表

主要是負責修改資料包中特殊的路由標記,如TTL、TOS、MARK等。共定義了5個鏈:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING。

4、規則表之間的優先順序:

Raw——mangle——nat——filter。規則鏈之間的優先順序(分三種情況):

(1)第一種情況:入站資料流向

從外界到達防火牆的資料包,先被PREROUTING規則鏈處理(是否修改資料包地址等),之後會進行路由選擇(判斷該資料包應該發往何處),如果資料包的目標主機是防火牆本機(比如說Internet使用者訪問防火牆主機中的web伺服器的資料包),那麼核心將其傳給INPUT鏈進行處理(決定是否允許通 過等),通過以後再交給系統上層的應用程式(比如Apache伺服器)進行響應。

(2)第二衝情況:轉發資料流向

來自外界的資料包到達防火牆後,首先被PREROUTING規則鏈處理,之後會進行路由選擇,如果資料包的目標地址是其它外部地址(比如區域網使用者通過閘道器訪問QQ站點的資料包),則核心將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),然後再交給POSTROUTING規則鏈(是否修改資料包的地 址等)進行處理。

(3)第三種情況:出站資料流向

防火牆本機向外部地址傳送的資料包(比如在防火牆主機中測試公網DNS伺服器時),首先被OUTPUT規則鏈處理,之後進行路由選擇,然後傳遞給POSTROUTING規則鏈(是否修改資料包的地址等)進行處理。

5、iptables的工作流程

iptables防火牆規則的執行順序預設從前到後(從上到下)依次執行,遇到匹配的規則就不在繼續向下檢查,只有遇到不匹配的規則才會繼續向下進行匹配。

(1)防火牆是層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。

(2)如果匹配規則成功,即明確表明是阻止還是通過,資料包就不在向下匹配新規則了。

(3)如查所有規則中沒有明確表明是阻止還是通過,也就是沒有匹配成功,向下進行匹配,直到匹配預設規則得到明確的阻止或通過。

(4)防火牆預設規則應放在最後,是所有規則執行完後才會執行的。

5)匹配上了拒絕規則也是匹配。

6、iptables表和鏈的工作流程
7、iptables的基本語法格式

基本格式:iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]

完全格式:iptables -t 表名 -A/I/D/R 規則鏈名 [規則號] -i/o 網絡卡名-p 協議名 -s 源IP/源子網 --sport 源埠-d 目標IP/目標子網 --dport 目標埠 -j 動作

說明:表名、鏈名用於指定 iptables命令所操作的表和鏈,命令選項用於指定管理iptables規則的方式(比如:插入、增加、刪除、檢視等;條件匹配用於指定對符合什麼樣條件的資料包進行處理;目標動作或跳轉用於指定資料包的處理方式(比如允許通過、拒絕、丟棄、跳轉(Jump)給其它鏈處理。

8、iptables命令的管理控制選項

-A 在指定鏈的末尾新增(append)一條新的規則

-D 刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除

-I 在指定鏈中插入(insert)一條新的規則,預設在第一行新增

-R 修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換

-L 列出(list)指定鏈中所有的規則進行檢視

-E 重新命名使用者定義的鏈,不改變鏈本身

-F 清空(flush)

-N 新建(new-chain)一條使用者自己定義的規則鏈

-X 刪除指定表中使用者自定義的規則鏈(delete-chain)

-P 設定指定鏈的預設策略(policy)

-Z 將所有表的所有鏈的位元組和資料包計數器清零

-n 使用數字形式(numeric)顯示輸出結果

-v 檢視規則表詳細資訊(verbose)的資訊

-V 檢視版本(version)

-h 獲取幫助(help)

-p:指定要匹配的資料包協議型別;

-s:指定要匹配的資料包源ip地址;

-j目標:指定要跳轉的目標;

-i網路介面:指定資料包進入本機的網路介面;

-o網路介面:指定資料包要離開本機所使用的網路介面。

-d:指定要匹配的資料包目標ip地址;

-sport:指定要匹配的資料包源埠;

-dport:指定要匹配的資料包目標埠;

9、防火牆處理資料包的四種方式

ACCEPT 允許資料包通過

DROP 直接丟棄資料包,不給任何迴應資訊(優於REJECT)

REJECT 拒絕資料包通過,必要時會給資料傳送端一個響應的資訊。

LOG在/var/log/messages檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則

10、iptables防火牆規則的儲存與恢復

iptables-save把規則儲存到檔案中,再由目錄rc.d下的指令碼(/etc/rc.d/init.d/iptables)自動裝載

使用命令iptables-save來儲存規則。一般用iptables-save > /etc/sysconfig/iptables生成儲存規則的檔案 /etc/sysconfig/iptables。

也可以用service iptables save它能把規則自動儲存在/etc/sysconfig/iptables中。當計算機啟動時,rc.d下的指令碼將用命令iptables-restore呼叫這個檔案,從而就自動恢復了規則。

二、Iptables命令詳解

1、檢視iptables幫助

iptables -h

2、檢視iptables版本

iptables -V

iptables v1.4.7

3、啟動iptables
(1)啟動命令

/etc/init.d/iptables start

(2)檢視iptables是否啟動(未啟動成功)

service iptables status

iptables: Firewall is not running. 

(3)使用service命令啟動(還是未啟動成功)

service iptables status

iptables: Firewall is not running

(4)執行setup命令,設定安全級別

a、setup

b、選擇Firewallconfiguration

c、用空格鍵將Firwall:[]Enabled選中,Firwall:[*]Enabled

d、儲存退出

(5)再次啟動

/etc/init.d/iptables start

(6)檢視iptables是否啟動(啟動成功

service iptables status

Table: filter

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

。。。

4、檢視核心是否載入iptables

lsmod | egrep "nat|filter|ip"

ip6t_REJECT            3987  2

nf_conntrack_ipv6      7207  2

nf_defrag_ipv6         8897  1 nf_conntrack_ipv6

ip6table_filter         2245 1

ip6_tables            10867  1 ip6table_filter

ipt_REJECT             1867  2

nf_conntrack_ipv4      7694  2

nf_defrag_ipv4         1039  1 nf_conntrack_ipv4

nf_conntrack          65428  3nf_conntrack_ipv6,nf_conntrack_ipv4,xt_state

iptable_filter         2173  1

ip_tables              9567  1 iptable_filter

ipv6                 264059  36ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6,cnic

5、手動載入iptables模組到核心

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state

6、檢視規則
(1)一般檢視:-L -n

iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot optsource               destination        

ACCEPT     all  -- 0.0.0.0/0           0.0.0.0/0           state RELATED,ESTABLISHED

ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          

ACCEPT     all  -- 0.0.0.0/0           0.0.0.0/0          

ACCEPT     tcp  -- 0.0.0.0/0           0.0.0.0/0           state NEW tcpdpt:22

REJECT   all -- 0.0.0.0/0           0.0.0.0/0    reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)

target     prot optsource               destination        

REJECT     all  -- 0.0.0.0/0    0.0.0.0/0       reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)

target     prot optsource               destination

(2)帶序號檢視:-L -n --line-numbers

iptables -L -n --line-numbers

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    DROP       tcp --  0.0.0.0/0            0.0.0.0/0           tcp dpt:35578

2    DROP       tcp --  0.0.0.0/0            0.0.0.0/0           tcp dpt:35579

3    DROP       tcp --  0.0.0.0/0            0.0.0.0/0           tcp dpt:35577

7、清除/刪除規則
(1)清除所有規則:--flush -F(不處理預設規則)

iptables -F 或iptables --flush

(2)清除使用者自定義的鏈:--delete-chain -X

ipbatles -X或iptables --delete-chain

(3)將鏈的記數器清零:--zero -Z

iptables -Z或iptables --zero

(4)刪除指定規則:-D

iptables -t filter -D INPUT -p tcp --dport22 -j DROP

(5)刪除指定序號的規則

#刪除INPUT鏈的第一條規則:iptables -D鏈名 序號

iptables -D INPUT 1

8、增加規則
(1)在指定鏈的結尾增加(最後一條)

iptables -t filter -A INPUT -p tcp --dport22 -j DROP

(2)在指定鏈的開頭增加(第一條)

iptables -t filter -I INPUT -p tcp --dport22 -j DROP

(3)在指定鏈的位置增加(如:在第3位置上)

iptables -t filter -I INPUT 3 -p tcp--dport 22 -j DROP

(4)-A和-I的區別

-A是在指定鏈的結尾處增加規則,是最後一條。

-I是在指定鏈的開始處增加規則,是第一條。

一般情況下,封IP,用-I來封,防止前面規則已放行。封埠,用-A來封。

9、儲存規則
(1)命令列下執行的規則,僅僅在記憶體時臨時生效。
(2)永久儲存規則需iptables-save來儲存規則

a、方法一

iptables-save > /etc/sysconfig/iptables

b、方法二

service iptables save

10、範圍設定
(1)埠

a、用冒號":"來指定連線埠

iptables -A INPUT -p tcp --dport 20:1024 -jACCEPT 

b、用-m和逗號","來指定多個埠

iptables -A INPUT -p tcp -m multiport--dport 20,21,25,110,1250:1280 -j ACCEPT

(2)IP段

a、子網

iptables -A INPUT -i eth1 -s 192.168.0.0/16-j DROP 

b、-m iprange--src-range

iptables -A INPUT -p tcp -m iprange--src-range 192.168.1.20-192.168.1.99 -j DROP

(3)通過感嘆號"!"取非

iptables -I INPUT -p !tcp -j DROP

iptables -A INPUT !--dport 22 -j DROP

iptables -I INPUT -s ! 192.168.1.111 -j DROP

11、示例
(1)示例1:禁用ssh的22埠

a、格式

iptables -t [table] -[AD] chainrule-specification [options]

b、命令

iptables -t filter -A INPUT -p tcp --dport22 -j DROP

iptables  -A INPUT -p tcp --dport 22 -j DROP

c、恢復ssh連線

(i)物理(或虛擬終端)重啟系統

(ii)登陸伺服器刪除此禁止規則:

iptables -F

iptables -t filter -D INPUT -p tcp --dport22 -j DROP

/etc/init.d/iptables stop

d、說明

(i)iptables預設用的表是filter表,所以上面2條命令是等價的。

(ii)其中INPUT和DROP要大寫

(iii)命令執行的規則,僅僅在記憶體時臨時生效。

(2)示例2:禁用80埠

iptables -t filter -A INPUT -p tcp --dport 80-j DROP

iptables  -A INPUT -p tcp --dport 80 -j DROP

(3)示例3:刪除INPUT鏈的第一條規則

iptables -D INPUT 1

說明:這是通過序號來刪除規則。序號可以通過--line-numbers引數來檢視

iptables -L -n --line-numbers

(4)示例4:拒絕進入防火牆的所有ICMP協議資料包

iptables -I INPUT -p icmp -j REJECT

(5)示例5:允許防火牆轉發除ICMP協議以外的所有資料包

iptables -A FORWARD -p ! icmp -j ACCEPT

說明:使用"!"可以將條件取反。

(6)示例6:拒絕轉發來自192.168.1.10主機的資料,允許轉發來自192.168.0.0/24網段的資料

iptables -A FORWARD -s 192.168.1.11 -jREJECT 

iptables -A FORWARD -s 192.168.0.0/24-j ACCEPT

說明:注意要把拒絕的放在前面不然就不起作用了啊。

(7)示例7:丟棄從外網介面(eth1)進入防火牆本機的源地址為私網地址的資料包

iptables -A INPUT -i eth1 -s 192.168.0.0/16-j DROP 

iptables -A INPUT -i eth1 -s172.16.0.0/12 -j DROP 

iptables -A INPUT -i eth1 -s10.0.0.0/8 -j DROP

(8)示例8:封堵網段(192.168.1.0/24),兩小時後解封。

iptables -I INPUT -s 10.20.30.0/24 -jDROP 

iptables -I FORWARD -s 10.20.30.0/24 -jDROP 

at now 2 hours at> iptables -DINPUT 1 at> iptables -D FORWARD 1

說明:這個策略咱們藉助crond計劃任務來完成,就再好不過了。

(9)示例9:只允許管理員從202.13.0.0/16網段使用SSH遠端登入防火牆主機。

iptables -A INPUT -p tcp --dport 22 -s202.13.0.0/16 -j ACCEPT 

iptables -A INPUT -p tcp --dport 22 -jDROP

說明:這個用法比較適合對裝置進行遠端管理時使用,比如位於分公司中的SQL伺服器需要被總公司的管理員管理時。

(10)示例10:允許本機開放從TCP埠20-1024提供的應用服務。

iptables -A INPUT -p tcp --dport 20:1024 -jACCEPT 

iptables -A OUTPUT -p tcp --sport20:1024 -j ACCEPT

(11)示例11:允許轉發來自192.168.0.0/24區域網段的DNS解析請求資料包。

iptables -A FORWARD -s 192.168.0.0/24 -pudp --dport 53 -j ACCEPT 

iptables -A FORWARD -d 192.168.0.0/24-p udp --sport 53 -j ACCEPT

(12)示例12:禁止其他主機ping防火牆主機,但是允許從防火牆上ping其他主機

iptables -I INPUT -p icmp --icmp-typeEcho-Request -j DROP 

iptables -I INPUT -p icmp --icmp-typeEcho-Reply -j ACCEPT 

iptables -I INPUT -p icmp --icmp-typedestination-Unreachable -j ACCEPT

(13)示例13:禁止轉發來自MAC地址為00:0C:29:27:55:3F的和主機的資料包

iptables -A FORWARD -m mac --mac-source00:0c:29:27:55:3F -j DROP

說明:iptables中使用“-m 模組關鍵字”的形式呼叫顯示匹配。咱們這裡用“-mmac –mac-source”來表示資料包的源MAC地址。

(14)示例14:允許防火牆對外開放埠20、21、25、110以及被動模式FTP埠1250-1280

iptables -A INPUT -p tcp -m multiport--dport 20,21,25,110,1250:1280 -j ACCEPT

說明:這裡用“-mmultiport –dport”來指定目的埠及範圍

(15)示例15:禁止轉發源IP地址為192.168.1.20-192.168.1.99的TCP資料包。

iptables -A FORWARD -p tcp -m iprange--src-range 192.168.1.20-192.168.1.99 -j DROP

說明:此處用“-m –iprange–src-range”指定IP範圍。

(16)示例16:禁止轉發與正常TCP連線無關的非—syn請求資料包。

iptables -A FORWARD -m state --state NEW -ptcp ! --syn -j DROP

說明:“-m state”表示資料包的連線狀態,“NEW”表示與任何連線無關的,新的嘛!

(17)示例17:拒絕訪問防火牆的新資料包,但允許響應連線或與已有連線相關的資料包

iptables -A INPUT -p tcp -m state --stateNEW -j DROP 

iptables -A INPUT -p tcp -m state--state ESTABLISHED,RELATED -j ACCEPT

說明:“ESTABLISHED”表示已經響應請求或者已經建立連線的資料包,“RELATED”表示與已建立的連線有相關性的,比如FTP資料連線等。

(18)示例18:只開放本機的web服務(80)、FTP(20、21、20450-20480),放行外部主機發住伺服器其它埠的應答資料包,將其他入站資料包均予以丟棄處理。

iptables -I INPUT -p tcp -m multiport--dport 20,21,80 -j ACCEPT 

iptables -I INPUT -p tcp --dport20450:20480 -j ACCEPT 

iptables -I INPUT -p tcp -m state--state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

(19)示例19:禁止IP是192.168.1.111主機的資料包從eth0網口進入本機(ping不通了)

iptables -t filter -A INPUT -i eth0 -s 192.168.1.111-j DROP

iptables -L -n --line-numbers

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    DROP       all --  192.168.1.111          0.0.0.0/0          

Chain FORWARD (policy ACCEPT)

num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination

(20)示例20:只允許IP是192.168.1.111主機的資料包從eth0網口進入本機

a、CentOS5.8

iptables -t filter -A INPUT -i eth0 -s !192.168.1.111 -j DROP

b、CentOS6.4及以上

iptables -t filter -A INPUT -i eth0 ! -s192.168.1.111 -j DROP

(21)示例21:禁ping,但其它服務正常

iptables -t filter -A INPUT -p icmp--icmp-type 8 -j DROP

(22)示例22:匹配網路狀態-m state--state

a、iptables的4種網路狀態 

NEW:已經或將啟動新的連線

ESTABLISHED:已建立的連線

RELATED:正在啟動新連線

INVALID:非法或無法識別的

b、FTP服務是特殊的,需要配狀態連線。

c、允許關聯的狀態包通過

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -jACCEPT

iptables -A OUTPUT -m state --stateESTABLISHED,RELATED -j ACCEPT

(23)示例23:控制請求速率-m limit

a、引數說明

--limit n/{second/minute/hour}:指定時間內的請求速率"n"為速率,後面為時間分別為:秒、分、時   

--limit-burst [n]:在同一時間內允許通過的請求"n"為數字,不指定預設為5

b、允許172.16.0.0/16網路ping本機(172.16.14.1),限制每分鐘請求不能超過20,併發不能超過6個

iptables -A INPUT -s 172.16.0.0/16 -d172.16.14.1 -p icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 6 -jACCEPT

iptables -A OUTPUT -s 172.16.14.1 -d172.16.0.0/16 -p icmp --icmp-type 0 -j ACCEPT

三、生產場景1:企業伺服器防火牆功能部署實戰

1、生產環境主機防火牆配置的2種模式

(1)逛公園模式

預設隨便進出,對非法分子進行拒絕。企業應用:企業配置上網閘道器路由。

(2)看電影模式

預設沒授權進入。企業應用:伺服器主機配置防火牆。該模式更嚴格、更安全一些。

2、實戰操作
(1)清空原有所有規則

a、清空規則

iptables -F

b、清空自定義鏈

iptables -X

c、計數器清零

iptables -Z

(2)授權管理機IP段訪問(防止自已也無法登陸)

iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24-j ACCEPT

(3)授權本機迴環介面訪問

a、允許進入

iptables -A INPUT -i lo -j ACCEPT

b、允許輸出

iptables -A OUTPUT -o lo -j ACCEPT

(4)設定防火牆預設規則

a、預設規則設定相關引數

-P 或 --policy

b、命令格式

iptables -P 鏈名動作

c、禁止所有輸入

iptables -P INPUT DROP

d、允許所有輸出

iptables --policy OUTPUT ACCEPT

e、禁止所有轉發

iptables -P FORWARD DROP

(5)開啟信任的IP網段

iptables -A INPUT -p tcp -s 192.168.10.0/24-p all -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.248.0/24-p all -j ACCEPT

(6)開啟允許訪問的埠

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

(7)如果允許外部IP能ping通

iptables -A INPUT -p icmp --icmp-type 8 -jACCEPT

(8)如查有FTP服務,還需允許關聯的狀態包通過

iptables -A INPUT -m state --stateESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -m state --stateESTABLISHED,RELATED -j ACCEPT

(9)通過nmap命令檢查開放的埠

nmap 192.168.1.111 -p 1-65535

Starting Nmap 5.51 ( http://nmap.org ) at 2017-05-10 13:44 CST

Nmap scan report for 192.168.1.111

Host is up (0.00053s latency).

Not shown: 65533 filtered ports

PORT   STATE  SERVICE

22/tcp open   ssh

80/tcp closed http

(10)儲存規則

/etc/init.d/iptables save 或iptables-save > /etc/sysconfig/iptables

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

(11)檢視儲存的規則檔案

cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Wed May 10 13:07:10 2017

*filter

:INPUT DROP [86588:3976773]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [50:2332]

-A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT

。。。

COMMIT

# Completed on Wed May 10 13:07:10 2017

四、生產場景2:生產環境如何維護防火牆

1、第1次新增規則

使用命令列或指令碼,一次性儲存為配置檔案。

/etc/init.d/iptables save 或iptables-save > /etc/sysconfig/iptables

2、第2次開始

通過配置檔案進行管理。(修改配置檔案後,reload)

vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Wed May 10 13:07:10 2017

*filter

:INPUT DROP [86588:3976773]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [50:2332]

-A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.16.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.25.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.18.0/24 -p tcp -j ACCEPT

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT-s 192.168.1.0/24 -p icmp -j ACCEPT

-A INPUT-s 192.168.18.0/24 -p icmp -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Wed May 10 13:07:10 2017

:wq

/etc/init.d/iptables reload

iptables -L -n

3、提示:企業硬體防火牆和IPTABLES防火牆是否要同時用?

可以同時用。企業硬體防火牆一般放在閘道器位置,相當於大門保安。伺服器相當於房間,需要有人或鎖門,iptables相當於鎖門。所以IDC機房部署了硬體防火牆,伺服器也必須開啟iptables。

五、生產場景3:生產環境閘道器配置

1、伺服器閘道器必需具備的條件
(1)物理條件

a、雙網絡卡

b、外網網絡卡可以上網

(2)軟體條件

a、核心檔案/etc/sysctl.conf裡開啟了轉發功能

b、iptables的filter表的FORWARD鏈允許轉發

2、場景
(1)閘道器伺服器

eth0:ip 192.168.1.111 gw 192.168.1.254

eth1:ip 192.168.128.18

(2)內部伺服器

192.168.128.0/24

3、實戰
(1)閘道器伺服器配置

a、外網網絡卡eth0配置如下:

ip:192.168.1.111

mask:255.255.255.0

gw:192.168.1.254

DNS1:202.106.0.20

DNS2:8.8.8.8

b、外網網絡卡eth1配置如下:

ip:192.168.128.18

mask:255.255.255.0

gw:無

DNS:無

(2)內部伺服器配置

ip:192.168.128.11

mask:255.255.255.0

gw:192.168.1.18

DNS1:202.106.0.20

DNS2:8.8.8.8

(3)檢視路由表(內部伺服器)

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

。。。

0.0.0.0         192.168.1.18     0.0.0.0         UG   0      0        0 eth0

(4)檢查閘道器伺服器是否能上網

ping www.baidu.com  

位元組=32 時間<1ms TTL=123

(5)開啟閘道器伺服器的核心轉發功能(核心級別)

a、修改配置檔案/etc/sysctl.conf

修改前

# Controls IP packet forwarding

net.ipv4.ip_forward = 0

修改後

# Controls IP packet forwarding

net.ipv4.ip_forward= 1

b、生效

sysctl -p

(6)開啟閘道器伺服器的iptables轉發功能(NAT表:iptables級別)

a、修改預設規則

iptables -P INPUT ACCEPT       #允許輸入

iptables -P FORWARD ACCEPT     #允許轉發

iptables -P OUTPUT ACCEPT     #允許輸出

b、清空規則

iptables -F

c、檢查核心是否載入nat模組

lsmod | grep nat

<--#為空,沒有載入nat模組

d、載入nat模組

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state

e、再次檢查核心是否載入nat模組

lsmod | grep nat

nf_nat_ftp             2602  0

nf_conntrack_ftp      10475  1 nf_nat_ftp

iptable_nat            5053  0

nf_nat                18765  2 nf_nat_ftp,iptable_nat

nf_conntrack_ipv4      7694  3 iptable_nat,nf_nat

nf_conntrack           65428  7  nf_nat_ftp,nf_conntrack_ftp,iptable_nat,。。。

ip_tables              9567  2 iptable_nat,iptable_filter

(7)檢查閘道器伺服器與內部伺服器網路是否通暢

a、閘道器伺服器ping內部伺服器

ping 192.168.128.11

位元組=32 時間<1ms TTL=123

b、內部伺服器ping閘道器伺服器內部IP

ping 192.168.128.18

位元組=32 時間<1ms TTL=123

c、內部伺服器ping閘道器伺服器外部IP

ping 192.168.1.111

位元組=32 時間<1ms TTL=123

d、內部伺服器ping閘道器IP

ping 192.168.1.254

<--#為空,不通

e、內部伺服器ping百度

ping www.baidu.com

<--#為空,不通

(8)在閘道器伺服器配置NAT,實現區域網共享

a、方法一:適用於有固定外網地址的情況

(i)命令

iptables -t nat-A POSTROUTING -s 192.168.128.0/24 -o eth0 -j SNAT --to-source 192.168.1.111

(ii)說明

-s 192.168.128.0/24:內部網段

-o eth0:閘道器伺服器外部網絡卡裝置名

-j SNAT 針對源地址IP進行轉換

--to-source 192.168.1.111:閘道器伺服器外部網絡卡IP地址

b、方法二(偽裝):適用於沒有固定外網地址的情況(每次都變化的,如ADSL)

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

4、為什麼用POSTROUTING?

OUTPUT:和主機發出去的資料包有關。改變主機發出資料包的目標地址。

PREROUTING:在資料包到達防火牆時,進行路由判斷之前執行的規則。作用是改變資料包的目的地址、目的埠等。

POSTROUTING:在資料包離開防火牆進,進行路由判斷之後執行的規則。作用是改變資料包的源地址、源埠等。

六、生產場景4:把外部IP地址及埠對映到內部伺服器地址及埠

1、要求

將訪問閘道器伺服器192.168.1.111:80,對映到192.168.128.20:9000上

2、命令

iptables -t nat-A PERROUTING -d 192.168.1.111 -p tcp --dport 80 -j DNAT --to-destination192.168.1.20:9000

3、說明

-j DNAT 針對目標地址IP進行轉換

--to-destination:內部伺服器網絡卡IP地址及埠

4、企業應用場景

(1)把訪問外網IP及埠的請求對映到內網某個伺服器及埠

(2)硬體防火牆,把外部LVS/nginx外網VIP及埠的請求對映到IDC負載均衡伺服器內部IP及埠

七、生產場景5:外網IP與內網IP實現一對一對映(相當於全埠對映)

1、要求

將訪問閘道器伺服器124.42.34.112,對映到192.168.128.20

2、環境

閘道器伺服器:

eth0:124.42.60.109

eht1:192.168.128.18

內部伺服器:

eth0:192.168.128.20

3、命令

iptables -t nat-A PREROUTING -d 124.42.60.112 -j DNAT --to-destination 192.168.128.20

八、iptables常用企業應用場景

1、Linux主機防火牆(filter表)
2、區域網共享上網(nat表的POSTROUTING鏈)

iptables -t nat-A POSTROUTING -s 192.168.128.0/24 -o eth0 -j SNAT --to-source 192.168.1.111

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

3、外部地址和埠對映到內部地址和埠(nat表的PREROUTING鏈)

iptables -t nat-A PREROUTING -d 124.42.60.112 -j DNAT --to-destination 192.168.128.20

4、對映多個外網IP上網

iptables -t nat-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source124.42.60.11-124.42.60.16

iptables -t nat-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to-source124.42.60.103-124.42.60.106

九、iptables調優

1、配置檔案:/etc/sysctl.conf
2、調優

######---iptables---########

 net.nf_conntrack_max =25000000

 net.netfilter.nf_conntrack_max = 25000000

 net.netfilter.nf_conntrack_tcp_timeout_established= 180

 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

3、重新生效

    sysctl-p