1. 程式人生 > 其它 >|NO.Z.00048|——————————|Applications|——|防火牆.V2|----------------------------------------------|3臺server|

|NO.Z.00048|——————————|Applications|——|防火牆.V2|----------------------------------------------|3臺server|



[Applications:防火牆.V2]                                                                                   [Applications.LBC&HAC$HPC] [|安全防護|防火牆|SNAT轉換|DNAT轉換|iptables指令碼|firewalld修改為iptables|3臺server|]








一、實驗專題:新增規則,常規操作。
### --- 新增規則,常規操作。
### --- 開啟防火牆並設定開機自啟動

[root@server11 ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]
[root@server11 ~]# chkconfig iptables on
### --- 檢視當前防火牆的規則
 
[root@server11 ~]# iptables -L                                              // 預設檢視的就是filter表
[root@server11 ~]# iptables -t filter -L                                    // 上面命令完整寫法
Chain INPUT     (policy ACCEPT)                                             // 預設規則有兩種:ACCEPT和DROP
Chain FORWARD   (policy ACCEPT)
Chain OUTPUT    (policy ACCEPT)
### --- 清空當前表的所有規則
[root@server11 ~]# iptables -F  
 
### --- 新增一條規則
[root@server11 ~]#  iptables -t filter -A INPUT -p tcp -j ACCEPT 
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere   

[root@server11 ~]# iptables -L -n                                           // -n以埠號的方式去展示
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0                          // 0.0.0.0/0表示所有地址

[root@server11 ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 3 packets, 234 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   36  2396 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0  
~~~     36:這條規則過濾了多個數據包了  2396:過濾的位元組大小 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0  
~~~     加入-v就知道那條規則過濾的報文多了,過濾的報文多的規則可以把它放在前面。
~~~     在書寫規則的時候,把匹配較多的規則放在最上面。
### --- 新增一條-I選項的規則

[root@server11 ~]#  iptables -t filter -I INPUT -p udp -j ACCEPT 
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere                           // -I 預設是新增到規則的第一行      
ACCEPT     tcp  --  anywhere             anywhere 
[root@server11 ~]#  iptables -t filter -A INPUT -p ICMP -j ACCEPT 
 
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere                           // -A預設新增到規則的最後一行
[root@server11 ~]# iptables -I INPUT 2 -p ICMP -j ACCEPT                    // -I可以指定規則第二列新增的列的,2表示規則的

[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere                           // -I INPUT 2 :INPUT鏈的第二列           
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere
### --- 顯示規則列的序號

[root@server11 ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     tcp  --  anywhere             anywhere            
4    ACCEPT     icmp --  anywhere             anywhere
### --- 刪除一條固定的規則

[root@server11 ~]# iptables -t filter -D INPUT 4                            // 刪除第四條的ICMP規則
[root@server11 ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     tcp  --  anywhere             anywhere  
### --- 刪除所有規則

[root@server11 ~]# iptables  -F
[root@server11 ~]# iptables -t filter -F                                    // 上面命令的完整寫入,實現結果一樣
### --- 放行Apache服務

[root@server11 ~]# service httpd start
[root@server11 ~]# echo "this is iptables output port 80 22" >>/var/www/html/index.html
[root@server11 ~]# curl localhost
this is iptables output port 80 22
[root@server11 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT  // 放行2埠
[root@server11 ~]# iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 

[root@server11 ~]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT  // 放心80埠,80比22埠的訪問量大,解除安裝最前面。加入-I
[root@server11 ~]# iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
[root@server11 ~]# iptables -P INPUT DROP                                   // 預設規則設定為拒絕
[root@server11 ~]# iptables -L 
Chain INPUT (policy DROP)                                                   // 其它全部拒絕
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http   // 放行80
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh    // 放行22

### --- 驗證:
~~~     通過Chrome訪問http://10.10.10.11/可以正常訪問
~~~     通過CMD視窗ping 10.10.10.11是ping不同的,ICMP不在預設規則裡,所以拒絕。
二、防火牆型別
### --- 匹配型別(它們三者難度是依次增加的)

~~~     通用匹配
~~~     可直接使用,不依賴於其他條件或擴充套件
~~~     包括網路協議、IP地址、網路介面等條件
~~~     隱含匹配
~~~     要求以特定的協議匹配作為前提
~~~     包括埠、TCP標記、ICMP型別等條件
~~~     顯示匹配
~~~     要求以“-m 擴充套件模組”的形式明確指出型別
~~~     包括多埠、MAC地址、IP範圍、資料包狀態等條件
### --- 通用匹配

~~~     常見的通用匹配條件
~~~     協議匹配:-p  協議名
~~~     地址匹配:-s 源地址、-d    目的地址
~~~     介面匹配:-i  入站網絡卡、-o  出站網絡卡
### --- 通用匹配

iptables -A FORWARD -s 192.168.1.11 -j REJECT                        // 新增一條規則到FORWARD表的末尾源地址192.168.1.11的值;filter表做的過濾,FORWARD鏈做的是轉發,在源地址是192.168.1.11的時候在我這臺機器做轉發請求的時候REJECT拒絕。
iptables -I INPUT -s  10.20.30.0/24  -j  DROP                        // 在filter表的INPUT鏈的最開頭新增一條規則,當入站源地址是10.20.30.0/24位的時候拒絕
iptables -I  INPUT -p  icmp -j  DROP                                 // 當入站請求時ICMP協議的時候拒絕
iptables -A  FORWARD -p ! icmp -j ACCEPT                            // 感嘆號表示非:非ICMP協議。非ICMP拒絕,其他的都放行。
iptables -A  INPUT -i  eth1  -s  172.16.0.0/12 -j  DROP              // 當你的入站網絡卡是eth1並且源地址是172.16.0.0/12位的時候丟棄。

三、實驗專題:丟棄和拒絕的區別
### --- 實驗專題:丟棄和拒絕的區別

~~~     HA-server1:10.10.10.11:web伺服器
~~~     HA-server2:10.10.10.12:client
### --- HA-server1下啟動iptables

[root@server11 ~]# service iptables start
[root@server11 ~]# chkconfig iptables on
[root@server11 ~]# iptables -P INPUT ACCEPT                                 // 預設規則還原
[root@server11 ~]# iptables -L              
Chain INPUT (policy ACCEPT)                                                 // 預設規則放行           
[root@server11 ~]# iptables -F                                              // 清空防火牆
[root@server11 ~]# iptables -L
### --- 新增一條丟棄規則

[root@server11 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP      
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            tcp dpt:http   // DROP丟棄
### --- 驗證丟棄:client HA-srver2向HA-server1服務端發起請求

[root@server11 ~]# service httpd start
[root@server11 ~]# echo "this is the HA-serve1 IPtablwes DROP" >>/var/www/html/index.html
[root@server11 ~]# curl localhost
this is the HA-serve1 IPtablwes DROP

[root@server12 ~]# curl 10.10.10.11                                         // 執行不下去,client發起資料報文,它認為服務端已經接受到資料報文了,等待服務端迴應,但服務端把資料包丟棄了,所以沒有迴應,所以client等待到響應超時。
 curl: (7) couldn't connect to host
[root@server11 ~]# iptables -F                                              // 把規則清空
[root@server12 ~]# curl 10.10.10.11
this is the HA-serve1 IPtablwes DROP                                        // 可以正常訪問了
### --- 驗證拒絕:

[root@server11 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             anywhere            tcp dpt:http reject-with icmp-port-unreachable
[root@server12 ~]# curl 10.10.10.11                                         //立馬響應,不會等到響應超時才中斷,直接決絕,立馬反饋響應。
curl: (7) couldn't connect to host

### --- 問題一:什麼時候用拒絕,什麼時候用丟棄呢?
~~~     答案:REJECT需要消耗一定的資源,比如web維護這種需要響應給客戶的資料使用拒絕,
~~~     而資料庫的3306,這是一個非法入侵,直接丟棄。不需要回應,DROP不需要消耗CPU資源。

四、實驗專題:新增一條規則,ICMP的所有型別全部拒絕
### --- 實驗專題:新增一條規則,ICMP的所有型別全部拒絕
### --- 新增一條規則,ICMP的所有型別全部拒絕。

[root@server11 ~]# iptables -F
[root@server11 ~]# iptables -A INPUT -p icmp -j DROP                        // 把入站ICMP的ping放行,出站ACCEPT放行。
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere 
[root@server11 ~]# ping 10.10.10.12                                         // ping不通,資料報文從10.10.10.11發起請求,可以正常出去,預設策略是ACCEPT放行,並且10.10.10.12也會給迴應,但會的時候迴應的這個資料報文要進行入站,入站的時候發現ICMP是DROP是丟棄的,所以ping是不通的。
### --- 新增一條規則,我可以ping 其它主機,其它主機不可以ping我

[root@server11 ~]# iptables -F
[root@server11 ~]# iptables -A INPUT -p icmp -j DROP
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere                           // 這條規則表示,我去ping其它主機,還是其它主機ping該主機都是ping不通的。
[root@server11 ~]# iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@server11 ~]# iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            icmp destination-unreachable       //3級別,主機不可達destination-unreachable
ACCEPT     icmp --  anywhere             anywhere            icmp echo-reply                    //0級別,回顯,echo-reply 

[root@server11 ~]# ping 10.10.10.12                                         // 本機可以ping其它主機
PING 10.10.10.12 (10.10.10.12) 56(84) bytes of data.
64 bytes from 10.10.10.12: icmp_seq=1 ttl=64 time=0.237 ms
[root@server12 ~]# ping 10.10.10.11                                         // 其它主機不可以ping本主機
PING 10.10.10.11 (10.10.10.11) 56(84) bytes of data.
五、顯示匹配
### --- 顯示匹配
### --- 常用的顯示匹配條件
### --- 多埠匹配:-m multiport --sport 源埠列表
~~~                -m multiport --dport 目的埠列表
~~~     IP範圍匹配:-m iprange  -src-range  IP範圍
~~~     MAC地址匹配:-m mac  --mac1-source MAC地址
~~~     狀態匹配:-m state --state 連線狀態
### --- 顯示匹配

~~~     iptables    -A    INPUT    -p    tcp    -m    multiport    --dport    25.80.110.143 -j    ACCEPT        
~~~     iptables    -A    FORWARD    -p    tcp    -m    iprange    --src-range    192.168.4.21-192.168.4.28 -j  ACCEPT           // --src-range:新增ip的範圍
~~~     iptables    -A    INPUT    -m    mac    --mac-source    00:0c:29:c0:55:3f:    -j    DROP        //-mac-source:新增Mac地址的方式新增對應的處理
~~~     iptables    -P    INPUT DROP
~~~     iptables    -I    INPUT    -p    tcp    -m    multiport    --dport    80-82,85    -j    ACCEPT    
~~~     iptables     -I    INPUT    -p    tcp    -m    state    --state    NEW,ESTABLISHED,RELATED    -j    ACCEPT            // -m state:表示當前的狀態模組,--state NEW:指定當前的狀態是NEW新建連線,ESTABLISHED:有資料傳輸,RELATED:有相關連,
### --- 建議生產環境中使用。
### --- 案例一:搭建一個ftp服務供視訊下載,待定時間是2點鐘。但是2點鐘的時候有一個使用者下載到99%,還有1%未下載完成,
### --- 方案一:若是直接中斷,導致該使用者下載不完成,體驗不行。
### --- 方案二:若是直接供下載完成,那麼這個時間段會有新的連線進來,也達不到我們的目的
### --- 解決方案:新建一條規則:讓這個使用者下載完成,拒絕其他使用者的連線。
iptables     -I    INPUT    -p    tcp    -m    --dport 21 state    --state    NEW   -j DROP // 新增一條規則在最開頭,當原地址並且這個埠是21號埠的時候,並且這個連線時新建連線的時候拒絕。這樣舊的連線不會斷,新連線會斷。

### --- 案例二:80埠 443埠 22埠;之前有連結的都放行
iptables     -I    INPUT    -p    tcp     state    --state   ESTABLISHED    -j ACCEPT 
iptables     -I    INPUT    -p    tcp     state    --state   ERLATED    -j ACCEPT           // 之前和80/443//22之前有連線的都放行。
### --- 顯示匹配

~~~     SANT策略的典型應用環境
~~~     區域網主機共享單個公網IP地址介入INternet
~~~     SNAT策略的原理
~~~     源地址轉換:Source Network Address Translation
~~~     修改資料包的源地址








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)