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