iptables防火墻網路安全實踐配置
企業中安全配置原則:
盡可能不給服務器配置外網IP,可以通過代理轉發或者通過防火墻映射。
並發不是特別大情況有外網IP,可以開啟防火墻服務。大並發的情況,不能開iptables,影響性能,利用硬件防火墻提升架構安全。
-
iptables防火墻概念介紹
Netfilter/Iptables(以下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的完全自由的基於包過濾的防火墻工具,它的功能十分強大,使用非常靈活,可以對流入和流出服務器的數據包進行很精細的控制。iptables是linux2.4及2.6內核中集成的服務。
iptables主要工作在OSI七層的二、三、四層,如果重新編譯內核,iptables也可以支持7層控制 -
iptables防火墻使用時名詞概念理解
容器:裝東西的器皿,docker容器技術,將鏡像裝在了一個系統中,這個系統就稱為容器
iptables稱為一個容器---裝著防火墻的表
防火墻的表又是一個容器---裝著防火墻的鏈
防火墻的鏈也是一個容器---裝著防火墻的規則
iptables---表---鏈---規則規則:防火墻一條一條安全策略
防火墻匹配規則流程:參見防火墻工作流程圖- 防火墻是層層過濾的,實際是按照配置規則的順序從上到下,從前到後進行過濾的。
- 如果匹配上規則,即明確表示是阻止還是通過,數據包就不再向下匹配新的規則。
- 如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,
向下進行匹配,直到匹配默認規則得到明確的阻止還是通過。 - 防火墻的默認規則是所有規則執行完才執行的。
表和鏈說明:4表5鏈
Filter: 實現防火墻安全過濾功能
· INPUT 對於指定到本地套接字的包,即到達本地防火墻服務器的數據包 外面---->(門)房子iptables
· FORWARD 路由穿過的數據包,即經過本地防火墻服務器的數據包 外面-----(前門)房子(後門)---房子
· OUTPUT 本地創建的數據包 外面<-----(門)房子iptables
· PREROUTING 一進來就對數據包進行改變 在路由之前,進行數據包IP地址或端口信息的轉換
· OUTPUT 本地創建的數據包在路由之前進行改變 本地防火墻要出去的流量進行相應轉換(了解)
· POSTROUTING 在數據包即將出去時改變數據包信息 在路由之後,進行數據包IP地址或端口信息的轉換
Managle 對數據進行標記
raw 忽略不計多個表和鏈的關系
-
iptables防火墻操作實踐練習
1)iptables防火墻配置初始化
/etc/init.d/iptables start
chkconfig iptables on
iptables -F --- 清除防火墻默認規則
iptables -X --- 清除防火墻自定義鏈
iptables -Z --- 清除防火墻技術器信息2)iptables防護墻信息查看方法
/etc/init.d/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防火墻端口規則配置:
實踐01:阻止用戶訪問服務器的22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP --- -A 表示添加規則到相應鏈上,默認表示添加規則到結尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP --- -D 表示刪除規則從相應鏈上。
iptables -t filter -D INPUT 規則序號
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 指定將配置好的規則信息進行替換總結防火墻參數信息:
-A --- 表示將規則添加到指定鏈上
-I --- 表示將規則插入到指定鏈上
-D --- 表示將規則從指定鏈上刪除
-R --- 表示將規則信息進行修改
-p --- 指定相應服務協議信息(tcp udp icmp all)
--dport --- 表示指定目標端口信息
--sport --- 表示指定源端口號信息
-j --- 指定對相應匹配規則執行什麽操作(ACCEPT DROP* REJECT)實踐02:阻止相應網段主機訪問服務端指定端口服務
10.0.0.0/24 -- 22端口(阻止)
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 10.0.0.9 -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鏈上實踐03:除了莫個地址可以訪問22端口之外,其余地址都不能訪問
10.0.0.1 10.0.0.253 10.0.0.9(只允許)
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROPiptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
通過利用 !進行規則取反,進行策略控制實踐04:指定阻止訪問多個端口服務
22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP --- 匹配連續的端口號訪問
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP --- 匹配不連續的端口號訪問總結參數信息:
-m --- 指定應用擴展模塊參數
multiport --- 可以匹配多個不連續端口信息實踐05: 通過防火墻實現禁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實踐06:實現防火墻狀態機制控制
NEW: 發送數據包裏面控制字段為syn=1,發送第一次握手的數據包
ESTABLISHED: 請求數據包發出之後,響應回來的數據包稱為回復的包
RELATED: 基於一個連接,然後建立新的連接 例如:ftp連接
INVALID: 無效的的數據包,數據包結構不符合正常要求的iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-
企業當中應用防火墻方法
項目:部署一個最安全的企業級防火墻(案例)
兩種思想:針對默認規則而言。
逛公園:黑名單
1、默認規則默認是允許的狀態。
看電影:白名單(更安全,推薦配置)
2、默認規則默認是不允許的狀態。更安全。
看電影的思想更安全。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 ACCEPT4)配置防火墻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 ACCEPT7)企業中內網之間不要配置防火墻策略
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 ACCEPT9)如果防火墻上配置了FTP服務,需要配置網絡狀態機制
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT --- 允許web服務與ftp服務器建立連接
註意:如果沒有ESTABLISHED允許,當用防火墻的服務器ssh去另一臺服務器時,就沒有回來的數據了
例如:telnet 10.0.0.9 22 將連接不成功
10)實現iptables策略配置永久保存
①. 利用防火墻啟動腳本命令參數,實現永久保存
/etc/init.d/iptables save②. 利用防火墻配置信息保存命令,實現永久保存
iptables-save >/etc/sysconfig/iptables實例拓展:避免自己被踢出門外
- 去機房重啟系統或者登陸服務器刪除剛才的禁止規則。
- 讓機房人員重啟服務器或者讓機房人員拿用戶密碼登錄進去
- 通過服務器的遠程管理卡管理(推薦)
- 先寫一個定時任務,每5分鐘就停止防火墻
- 測試環境測試好,寫成腳本,批量執行?
以上內容為防火墻filter表的配置實踐與原理說明
-
防火墻nat表的配置實踐
iptables NAT:(配置NAT表示就是配置以下兩個鏈)- postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址)
路由之後,進行地址映射轉換,把源地址進行轉換(源私網地址==>源公網地址) - prerouting(外網---內網-NAT 目標公網IP地址---目標私網IP地址 映射目標端口)
路由之前,進行地址映射轉換,把目標地址進行轉換(目標公網地址==>目標變為私網地址)
實踐一:iptables實現共享上網方法(postrouting)
第一個歷程:配置內網服務器,設置網關地址
/etc/init.d/iptables stop --- 內網服務器停止防火墻服務
ifdown eth0 --- 模擬關閉內網服務器外網網卡
setup --- 修改內網網卡網關和DNS地址信息
[root@oldboyedu42-lnb-02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 172.16.1.7 0.0.0.0 UG 0 0 0 eth1
說明:內網服務器網關地址指定為共享上網服務器內網網卡地址第二個歷程:配置共享上網服務器,開啟共享上網服務器路由轉發功能
[root@oldboyedu42-lnb-02 ~]# vim /etc/sysctl.conf
[root@oldboyedu42-lnb-02 ~]# sysctl -p
net.ipv4.ip_forward = 1第三個歷程:配置共享上網服務器,實現內網訪問外網的NAT映射
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
-s 172.16.1.0/24 --- 指定將哪些內網網段進行映射轉換
-o eth0 --- 指定在共享上網哪個網卡接口上做NAT地址轉換
-j SNAT --- 將源地址進行轉換變更
-j DNAT --- 將目標地址進行轉換變更
--to-source ip地址 --- 將源地址映射為什麽IP地址
--to-destination ip地址 --- 將目標地址映射為什麽IP地址擴展如果開啟:forward默認drop策略,如果配置forward鏈
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT網絡數據包傳輸過程一定是有去有回的
實踐二:iptables實現共享上網方法(postrouting)
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 偽裝共享上網
說明:在企業中如何沒有固定外網IP地址,可以采取以上偽裝映射的方式進行共享上網總結:配置映射方法
- 指定哪些網段需要進行映射 -s 172.16.1.0/24
- 指定在哪做映射 -o eth0
- 用什麽方法做映射 -j SNAT/DNAT
- 映射成什麽地址 --to-source ip地址/--to-destination ip地址
實踐三:iptables實現外網IP的端口映射到內網IP的端口
需求:將網關的IP和9000端口映射到內網服務器的22端口
端口映射 10.0.0.7:9000 -->172.16.1.8:22
實現命令:
iptables -t nat -A PREROUTING -d 10.0.0.7 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22(1)-d 10.0.0.8目標地址。
(2)-j DNAT 目的地址改寫。 - postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址)
iptables防火墻網路安全實踐配置