一.前言介紹
企業中的防火牆安全配置原則:
- 盡可能不給服務器配置外網IP,可以通過代理轉發或者通過防火牆進行映射。
- 並發不是特別大情況有外網IP,可以開啟防火牆服務。
- 一般大並發的情況下不能開iptables,影響性能,利用硬件防火牆提升架構安全。
二.Iptables防火牆概念介紹
- Netfilter(內核)/Iptables(軟件)是unix/linux自帶的一款優秀且開放源代碼的完全自由的基於包顧慮的防火牆工具
- 他的功能十分強大,使用靈活可以對流入和流出服務器的數據包進行很精細的控制。
- iptables是linux2.4及2.6內核中集成的服務,注意:其他內核並沒有集成iptables服務
- 另外iptables主要工作在OSI七層的二三四層,也就是(mac,ip,端口)層,如果要重新編譯內核,iptables也可以支持七層控制
三.iptables防火牆使用時名詞概念解釋
容器的概念:即為裝東西的器皿,docker容器技術,將鏡像裝在一個系統上,這個系統就稱為容器
- iptables稱為一個容器:裝着防火牆的表
- 防火牆的表又是一個容器:裝着防火牆的鏈
- 防火牆的鏈也是一個容器:裝着防火牆的規則

規則即為:防火牆一條一條的安全策略
防火牆匹配規則流程圖:

具體流程為:
(1).防火牆是層層過濾的,實際是按照配置規則的順序從上到下,從前到后進行過濾的
(2).如果匹配上規則,即明確表示是阻止還是通過,數據包就不再向下匹配新的規則
(3).如果未匹配上就一直向下進行匹配,直到匹配上為止
(4).防火牆的默認規則是所有規則執行完才執行的
防火牆四表五鏈說明:

四.防火牆操作實踐
1.防火牆配置初試化:
/etc/init.d/iptables start/status/stop -----啟動停止防火牆
chkconfig iptables on -----加入開機自啟
iptables -F -----清除防火牆默認規則
iptables -X -----清除防火牆自定義鏈
iptables -Z -----清除防火牆技術信息
2.iptables防火牆信息查看方法:
service iptables status ------查看防火牆的狀態信息
iptables -L ------ -L 以列表形式展示所有規則信息
iptables -L -n ------ -n 以數字形式顯示IP地址或端口信息,不要轉換為字符串顯示
iptables -t nat -L -n ------ -t 表示指定查看或者配置相應的表
iptables -L -n -v ------ -v 表示顯示詳細規則信息,包含匹配計數器數值信息
iptables -L -n --line-number ------ --line-number 顯示規則序號信息
\
3.iptables防火牆端口規則配置:
(1).阻止用戶訪問服務器的22端口:
首先需要清除原有的防火牆的規則:iptables -F
之后:iptables -t filter -A INPUT -p tcp --dport 22 -j DROP ---- -A表示添加規則到相應鏈,默認加到結尾
也可以直接:iptables -t filter -I INPUT -p tcp --dport 22 -j DROP ---- -I 表示插入規則到相應鏈上,默認加到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定規則插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP --- -R 指定將配置好的規則信息進行替換
iptables -t filter -D INPUT 規則序號
總結防火牆參數信息:
- -A --- 表示將規則添加到指定鏈上
- -I --- 表示將規則插入到指定鏈上
- -D --- 表示將規則從指定鏈上刪除
- -R --- 表示將規則信息進行修改
- -p --- 指定相應服務協議信息(tcp udp icmp all)
- --dport --- 表示指定目標端口信息
- --sport --- 表示指定源端口號信息
- -j --- 指定對相應匹配規則執行什么操作(ACCEPT DROP* REJECT)
注:這里的DROP表示靜默拒絕,對方找不到原因,REJECT表示告訴對方我拒絕了你,推薦用DROP
(2).阻止相應網段主機訪問服務器指定端口服務
192.168.1.0/24 -- 22端口(阻止)
iptables -t filter -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 192.168.1.175 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP
總結參數信息:
- -s --- 指定匹配的源地址網段信息,或者匹配的主機信息
- -d --- 指定匹配的目標地址網段信息,或者匹配的主機信息
- -i --- 指定匹配的進入流量接口信息 只能配置在INPUT鏈上
- -o --- 指定匹配的發出流量接口信息 只能配置在OUTPUT鏈上
(3).除了某個地址可以訪問22端口之外,其余地址都不能訪問
只允許192.168.1.5訪問22端口,其余都不可以訪問
iptables -t filter -A INPUT -s 192.168.1.5 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT ! -s 192.168.1.5 -p tcp --dport 22 -j ACCEPT(通過利用 !進行規則取反,進行策略控制)
(4).指定阻止訪問多個端口服務:
22-80,22,24,25
iptables -A INPUT -s 192.168.1.175 -p tcp --dport 22:80 -j DROP
iptables -A INPUT -s 192.168.1.175 -m multiport -p tcp --dport 22,24,25 -j DROP
總結參數信息:
-m --指定應用擴展模塊參數 multiport ---可以匹配多個不連續端口信息
(5).通過防火牆實現禁ping功能
實現ping功能測試鏈路是否正常,基於icmp協議實現的,
icmp協議有多種類型:icmp-type 8:請求類型 icmp-type 0:回復類型
情景一:實現禁止主機訪問防火牆服務器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
情景二:實現禁止防火牆訪問主機服務器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP
默認情況:所有icmp類型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP
(6).實現防火牆狀態機制控制
NEW: 發送數據包里面控制字段為syn=1,發送第一次握手的數據包
ESTABLISHED: 請求數據包發出之后,響應回來的數據包稱為回復的包
RELATED: 基於一個連接,然后建立新的連接
INVALID: 無效的的數據包,數據包結構不符合正常要求的
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
五.企業中應用防火牆的方法
部署一個最安全的企業級防火牆案例:默認規則是不允許的狀態最安全

1)保存防火牆配置文件信息
cp /etc/sysconfig/iptables{,.bak}
2)清除配置規則
iptables -F <- 清空iptables所有規則信息(清除filter)
iptables -X <- 清空iptables自定義鏈配置(清除filter)
iptables -Z <- 清空iptables計數器信息(清除filter)
3)別把自己踢出到門外
iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
4)配置防火牆filter上各個鏈的默認規則
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
-P ---指定相應鏈的默認規則策略,是允許還是阻止
5)允許iptables服務端ping自己的網卡地址
iptables -A INPUT -i lo -j ACCEPT --- 讓自己可以ping自己
6)指定外網可以訪問的端口信息
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
7)企業中內網之間不要配置防火牆策略
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT --- 允許架構內部服務進行訪問
8)企業之間有合作關系的,不要將友商的網絡禁止(主要經常改動)
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT --- 允許一些合作企業的外網服務器進行訪問
iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT
9)如果防火牆上配置了FTP服務,需要配置網絡狀態機制
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT --- 允許web服務與ftp服務器建立連接
10)實現iptables策略配置永久保存
①. 利用防火牆啟動腳本命令參數,實現永久保存
/etc/init.d/iptables save
②. 利用防火牆配置信息保存命令,實現永久保存
iptables-save >/etc/sysconfig/iptables
