期中集羣架構-第十三章-iptables防火牆網路安全實踐配置
=========================================linux
01:iptables防火牆網路安全前言介紹
學好iptables的基礎:
OSI7層模型以及不一樣層對應哪些協議?
TCP/IP三次握手,四次斷開的過程,TCP HEADER,狀態轉換
經常使用的服務端口要很是清楚瞭解。
經常使用服務協議原理http協議,icmp協議。web
企業中安全配置原則:
儘量不給服務器配置外網IP,能夠經過代理轉發或者經過防火牆映射。
併發不是特別大狀況有外網IP,能夠開啓防火牆服務。
大併發的狀況,不能開iptables,影響性能,利用硬件防火牆提高架構安全。docker
02. iptables防火牆概念介紹
Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾
的防火牆工具,它的功能十分強大,使用很是靈活,能夠對流入和流出服務器的數據包進行很精細的控制。
iptables是linux2.4及2.6內核中集成的服務。
iptables主要工做在OSI七層的2、3、四層,若是從新編譯內核,iptables也能夠支持7層控制
03. iptables防火牆使用時名詞概念理解
容器:裝東西的器皿,docker容器技術,將鏡像裝在了一個系統中,這個系統就稱爲容器
iptables稱爲一個容器 ---裝着防火牆的表
防火牆的表又是一個容器 ---裝着防火牆的鏈
防火牆的鏈也是一個容器 ---裝着防火牆的規則
iptables ---表---鏈---規則vim
規則:防火牆一條一條安全策略
防火牆匹配規則流程:參見防火牆工做流程圖
1. 防火牆是層層過濾的,實際是按照配置規則的順序從上到下,從前到後進行過濾的。
2. 若是匹配上規則,即明確表示是阻止仍是經過,數據包就再也不向下匹配新的規則。
3. 若是規則中沒有明確代表是阻止仍是經過的,也就是沒有匹配規則,
向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。
4. 防火牆的默認規則是全部規則執行完才執行的。安全
表和鏈說明:4表5鏈
Filter: 實現防火牆安全過濾功能
· INPUT 對於指定到本地套接字的包,即到達本地防火牆服務器的數據包 外面---->(門)房子iptables
· FORWARD 路由穿過的數據包,即通過本地防火牆服務器的數據包 外面-----(前門)房子(後門)---房子
· OUTPUT 本地建立的數據包 外面<-----(門)房子iptables
NAT: 實現將數據包中IP地址或者端口信息,內網到外網進行改寫/外網到內網進行改寫
· PREROUTING 一進來就對數據包進行改變 --- 在路由以前,進行數據包IP地址或端口信息的轉換
· OUTPUT 本地建立的數據包在路由以前進行改變 ---本地防火牆要出去的流量進行相應轉換(瞭解)
· POSTROUTING 在數據包即將出去時改變數據包信息 ---在路由以後,進行數據包IP地址或端口信息的轉換
Managle 對數據進行標記
raw 忽略不計服務器
多個表和鏈的關係 man iptables網絡
04. 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 表示添加規則到相應鏈上,默認表示添加規則到結尾ssh
-t 指定表 -p 指定協議 --dport 表示對於訪問者來講是目標端口 -j 表示對這個策略作什麼ACCCEPT 容許 DROP阻止
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 DROP
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.9 -p tcp --dport 22 -j DROP
除了了0.9的都阻止。 0.9被排除沒匹配上則匹配默認規則,默認是容許的因此就實現了只容許0.9訪問
經過利用 !進行規則取反,進行策略控制
實踐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,發送第一次握手的數據包NEU狀態的數據包
ESTABLISHED: 請求數據包發出以後,響應回來的數據包稱爲回覆的包
RELATED: 基於一個鏈接,而後創建新的鏈接
INVALID: 無效的的數據包,數據包結構不符合正常要求的
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
容許那些狀態包經過NEU,ESTABLISHED,RELATED
05. 企業當中應用防火牆方法
項目:部署一個最安全的企業級防火牆(案例)
兩種思想:針對默認規則而言。
逛公園:黑名單
一、默認規則默認是容許的狀態。
看電影:白名單(更安全,推薦配置)
二、默認規則默認是不容許的狀態。更安全。
看電影的思想更安全。
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 注意本身的可能改了ssh端口號
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服務,須要配置網絡狀態機制
由於默認INPUT入站規則默認阻止了 數據不能回來,因此須要設置
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT --- 容許web服務與ftp服務器創建鏈接
10)實現iptables策略配置永久保存 不保存重啓防火牆就會清除配置
①. 利用防火牆啓動腳本命令參數,實現永久保存
/etc/init.d/iptables save
②. 利用防火牆配置信息保存命令,實現永久保存
iptables-save >/etc/sysconfig/iptables
實例拓展:避免本身被踢出門外
01. 去機房重啓系統或者登錄服務器刪除剛纔的禁止規則。
02. 讓機房人員重啓服務器或者讓機房人員拿用戶密碼登陸進去
03. 經過服務器的遠程管理卡管理(推薦)
04. 先寫一個臨時定時任務,每5分鐘就中止防火牆
05. 測試環境測試好,寫成腳本,批量執行
以上內容爲防火牆filter表的配置實踐與原理說明
06. 防火牆nat表的配置實踐
iptables NAT:(配置NAT表示就是配置如下兩個鏈)
01. postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址)
路由以後,進行地址映射轉換,把源地址進行轉換(源私網地址==>源公網地址)
02. 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地址
測試沒生效 內網服務器仍然ping不一樣外網,咱們以前設置的filter表中FORWARD鏈是DROP阻止的
只要配置數據包能通過FORWARD鏈 就能實現設置結果
擴展若是開啓: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地址,能夠採起以上假裝映射的方式進行共享上網
總結:配置映射方法
01. 指定哪些網段須要進行映射 -s 172.16.1.0/24
02. 指定在哪作映射 -o eth0
03. 用什麼方法作映射 -j SNAT/DNAT
04. 映射成什麼地址 --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
我這裏映射的端口以前有改動爲172.16.1.8:17524
(1)-d 10.0.0.8目標地址。
(2)-j DNAT 目的地址改寫。