# 1.1 keepalived軟件的做用? Keepalived軟件起初是專爲LVS負載均衡軟件設計的, 用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP功能 Keepalived軟件主要是經過VRRP協議實現高可用功能的。 VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫, VRRP出現的目的就是爲了解決靜態路由單點故障問題的,它可以保證當個別節點宕機時, 整個網絡能夠不間斷地運行 # 1.2 keepalived軟件工做原理?(重點) 原理 1)VRRP協議,全稱Virtual Router Redundancy Protocol,中文名爲虛擬路由冗餘協議, VRRP的出現是爲了解決靜態路由的單點故障。 2)VRRP是用過IP多播的方式(默認多播地址(224.0.0.18))實現高可用對之間通訊的。 3)工做時主節點發包,備節點接包,當備節點接收不到主節點發的數據包的時候, 就啓動接管程序接管主節點的資源。備節點能夠有多個,經過優先級競選, 但通常Keepalived系統運維工做中都是一對。 # 1.3 keepalived軟件主要功能? ①. 管理LVS負載均衡軟件 ②. 實現對LVS集羣節點健康檢查功能 ③. 做爲系統網絡服務的高可用功能
# 1)確認反向代理服務是否工做正常 [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.7/oldboy.html web01 www.etiantian.org [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.8/oldboy.html web02 www.etiantian.org [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.9/oldboy.html web03 www.etiantian.org [root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.9/oldboy.html web03 bbs.etiantian.org [root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.8/oldboy.html web02 bbs.etiantian.org [root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.7/oldboy.html web01 bbs.etiantian.org # 2)安裝部署高可用keepalived服務(05和06主機) # 第一步:安裝keepalived服務軟件 yum install -y keepalived # 第二步:編寫keepalived配置文件 vim /etc/keepalived/keepalived.conf # man keepalived.conf --- 配置文件說明信息 # 配置文件結構: GLOBAL CONFIGURATION --- 全局配置(*) VRRPD CONFIGURATION --- vrrp配置(*) LVS CONFIGURATION --- LVS服務相關配置 # lb01主負載均衡器配置 global_defs { router_id lb01 # 在一個集羣中,每一臺主機的 router_id 都是惟一的 } vrrp_instance group01 { # 相同的集羣中,實例是同樣的 state MASTER # 只是一個描述性信息 interface eth0 virtual_router_id 51 # 主備發送 組播包 的時間間隔 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { # VIP:虛IP地址(用戶訪問的是這個地址) 10.0.0.3/24 dev eth0 label eth0:1 } } # lb02配置信息 global_defs { router_id LVS_DEVEL } vrrp_instance group01 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } # 重啓 keepalived 服務 /etc/init.d/keepalived reload # 開啓爲 start # 開啓 keepalived 服務後會在 主(MASTER)上的 eth0 網卡上生成 虛ip 10.0.0.3 # 無論 VIP 在哪臺主機上,用戶訪問時都是訪問的 10.0.0.3 這個 ip
# 同時在keepalived高可用集羣中,出現了兩個虛擬IP地址信息,這種狀況就稱爲腦裂 # 腦裂狀況出現緣由: 1. 心跳線出現問題 網卡配置有問題 交換設備有問題 線纜鏈接有問題 2. 有防火牆軟件阻止問題 3. virtual_router_id配置數值不正確 # 總之:只要備服務器收不到組播包,就會成爲主,而主資源沒有釋放,就會出現腦裂 利用shell腳本實現監控管理: 備用設備有VIP就是表示不正常 01. 真正實現主備切換 02. 出現腦裂狀況了 #!/bin/bash check_info=$(ip a|grep -c 10.0.0.3) if [ $check_info -ne 0 ] then echo "keepalived server error!!!" fi
1)編寫nginx反向代理配置 (兩臺反向代理服務器都要作以下配置) server { listen 10.0.0.3:80; # 在 監聽的端口前加上 虛ip server_name www.etiantian.org; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; proxy_set_header X-Forwarded-For $remote_addr; } } server { listen 10.0.0.3:80; # 在 監聽的端口前加上 虛ip server_name bbs.etiantian.org; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; proxy_set_header X-Forwarded-For $remote_addr; } } /application/nginx/sbin/nginx -s stop # ngxin 中只要涉及到 ip 地址的修改,都要進行真正的重啓nginx(先stop 再start) /application/nginx/sbin/nginx netstat -lntup|grep nginx tcp 0 0 10.0.0.3:80 0.0.0.0:* LISTEN 53334/nginx 2)# 實現監聽本地網卡上沒有的IP地址 echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf sysctl -p # 監聽網卡上沒有的 ip 地址
# 假如 keepalived 主機服務器的 nginx 掛掉了,此時的 虛ip 依然會在 keepalived主服務器中,這樣用戶訪問就會出現問題 # 因此此時須要將 keepalived服務和 nginx 反向代理服務創建聯繫,即 nginx 反向代理服務掛掉的時候,keepalived服務也要自動關閉 1)編寫腳本 #!/bin/bash web_info=$(ps -ef|grep [n]ginx|wc -l) if [ $web_info -lt 2 ] then /etc/init.d/keepalived stop fi 2)運行腳本,實現監控nginx服務 # 編輯keepalived服務配置文件 vrrp_script check_web { script "/server/scripts/check_web.sh" # 定義我本身寫的一個監控腳本,腳本必須有執行權限 interval 2 # 指定腳本間隔時間(s) weight 2 #腳本執行完成,讓優先級值和權重值進行運算,從而實現主備切換 } # vrrp_script 配置添加到全局配置和vrrp實例配置之間 track_script { # 調用我寫的監控腳本 check_web } # track_script 配置要放到 vrrp實例 中 chmod +x check_web.sh --- 修改腳本可執行權限
# lb01 主機的 keepalived 配置文件的實例修改成以下: vrrp_instance gorup01 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } vrrp_instance gorup02 { # 新增一個實例 gorup02 state BACKUP # 實例 group02 中lb01主機爲 備 interface eth0 virtual_router_id 52 # 修改成一個新的 virtual_router_id priority 100 # 優先級相對lb02主機中的 group02 要變小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 dev eth0 label eth0:1 # 添加一個新的 虛ip 10.0.0.4 } } # lb02 主機的 keepalived 配置文件的實例修改成以下: vrrp_instance gorup01 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } vrrp_instance gorup02 { # 新增一個實例 gorup02 state MASTER # 實例 group02 中lb02主機爲 主 interface eth0 virtual_router_id 52 priority 150 # 優先級相對lb01主機中的 group02 要變大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 dev eth0 label eth0:1 # 添加一個新的 虛ip 10.0.0.4 } } # 修改nginx反向代理監控地址信息 # lb01 主機 [root@lb01 ~]# vim /application/nginx/conf/nginx.conf server { listen 10.0.0.3:80; server_name www.etiantian.org; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; } } server { listen 10.0.0.4:80; # 新增 bbs.etiantian.org 對應的 虛ip 爲 10.0.0.4 server_name bbs.etiantian.org; proxy_set_header host $host; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; } # lb02 主機 [root@lb02 ~]# vim /application/nginx/conf/nginx.conf server { listen 10.0.0.3:80; server_name www.etiantian.org; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; } } server { listen 10.0.0.4:80; # 新增 bbs.etiantian.org 對應的 虛ip 爲 10.0.0.4 server_name bbs.etiantian.org; proxy_set_header host $host; root html; index index.html index.htm; location / { proxy_pass http://oldboy; proxy_set_header host $host; } }
1:網絡安全涉及的問題:html
①. 網絡安全問題-數據機密性問題 傳輸的數據可能會被第三方隨時都能看到 ②. 網絡安全問題-數據完整性問題 傳輸的數據不能隨意讓任何人進行修改 ③. 網絡安全問題-身份驗證問題 第一次通信時,須要確認通信雙方的身份正確
2:網絡安全涉及的問題:linux
①. 網絡安全問題-數據機密性問題解決 a) 利用普通加密算法解決機密性 利用相應算法,對傳輸數據(明文數據)進行加密(密文數據);再利用對應算法,將加密數據解密變爲真實數據 優勢:實現了數據機密傳輸,避免了明文傳輸數據的危險性。 缺點:利用加密算法,將明文改密文,若是第三方得到加密算法,便可將傳輸密文再次變爲明文 b) 利用對稱加密算法解決機密性(重要的一種加密方式) 對稱加密算法就比如將普通算法的規則手冊放入到了保險櫃裏,只有獲取保險櫃和保險櫃鑰匙才能獲取《算法手冊》 優勢:密鑰加密算法計算速度很是快;解決了普通加密算法的安全問題 缺點:加解密過程的安全性徹底依賴於密鑰,而且對稱加密密鑰是公開的,當通信加密對象過多時,沒法解決密鑰管理問題。 ②. 網絡安全問題-數據完整性問題解決 a) 利用單項加密算法(全網備份數據完整性) 根據數據生成特徵碼(數據指紋信息);接收數據方獲取數據信息算出特徵碼,驗證是否與發送過來的特徵碼一致 若特徵碼一致,表示數據完整性沒被破壞;若特徵碼不一致,表示數據已被破壞,直接丟棄 **************************************************************************** 擴展說明: 01:不一樣數據的特徵碼(數據指紋信息)是不可能一致的 單項加密算法特徵 · 數據輸入同樣,特徵碼信息輸出必然相同 · 雪崩效應,輸入的微小改變,將形成輸出的巨大改變 · 定長輸出,不管源數據多大,但結果都是同樣的 · 不可逆的,沒法根據數據指紋,還原出原來的數據信息。 **************************************************************************** 優勢:有效的解決了數據完整性問題 缺點:沒有考慮中間人攻擊對數據信息的影響 b) 利用單項加密算法(加密特徵碼) 利用對稱加密算法對數據加密的同時,也對特徵碼進行加密; 接收方擁有和發送方同樣的密鑰,才能夠解密加密後的數據和特徵碼 而中間人加密的特徵碼是沒有辦法讓接收方進行解密的,因此接收方獲取不了特徵碼,直接丟棄數據 **************************************************************************** 擴展說明: 01:那麼對稱密鑰如何有效的讓通信雙方獲取呢 須要進行對稱密鑰協商過程,即經過密鑰交換機制(Internet key exchange IKE) 實現密鑰交換機制的協議稱爲diffie-hellman協議 **************************************************************************** ③. 網絡安全問題-身份驗證問題解決 a)利用非對稱密鑰加密算法(公鑰加密算法) 發送方創建私鑰和公鑰,將公鑰發送給接收方,從而實現發送數據方的身份驗證 讓你的母親驗證你的爸爸身份信息,你的母親就稱爲證書頒發機構 公鑰信息在網站訪問過程當中,被稱爲證書(身份證) 網絡安全問題結論:實現網絡安全性,須要解決問題的順序爲 1. 解決身份驗證問題 2. 解決數據完整性問題 3. 解決數據機密性問題
3:網絡安全證書由來:nginx
根據上述結論可知,網絡安全性最首先要解決的就是身份驗證問題; 而解決身份驗證問題,最主要的方式就是藉助私鑰和公鑰 而最主要的公鑰信息獲取就變得尤其重要;利用第三方公正者,公正公鑰信息 目前標準的證書存儲格式是x509,還有其餘的證書格式,須要包含的內容爲: 證書==身份證 ? 公鑰信息,以及證書過時時間 ? 證書的合法擁有人信息 ? 證書該如何被使用(不用關注) ? CA頒發機構信息 ? CA簽名的校驗碼
# 獲取OpenSSL軟件的版本信息: rpm -qa openssl openssl version <- 查看openssl版本信息 # 獲取OpenSSL配置文件信息: /etc/pki/tls/openssl.cnf <- openssl配置文件,主要用於配置成私有ca時進行使用 # 說明:基本上openssl配置文件不須要運維過多修改配置 # 利用openssl軟件實現HTTPS訪問過程 # 實現HTTPS: [root@web01 ~]# mkdir -p /server/key [root@web01 ~]# cd /server/key/ # 生成的 key 放到該目錄下 # 第一步:建立出一個私鑰文件(出生證實) --- 運維人員須要會 # 方法1: openssl genrsa 2048 >server.key <- 建立私鑰信息,並指定私鑰的長度爲2048,並將生成的私鑰信息保存在一個文件中 # 方法2: openssl genrsa -out server.key 2048 <- 將私鑰信息直接進行保存,加密長度必定要放在輸出文件後面 # 方法3: (umask 077;openssl genrsa -out server1024.key 1024) <- 利用小括號,實現子shell功能,臨時修改umask,使之建立的私鑰文件權限爲600 # 第二步:生成證書文件信息(公鑰) # ①. 生成自簽發證書 --- 運維人員能夠自行操做 [root@NFS-server-01 ~]# openssl req -new -x509 -key server.key -out server.crt -days 365 req <- 用於請求建立一個證書文件 new <- 表示建立的是新的證書 x509 <- 表示定義證書的格式爲標準格式 key <- 表示調用的私鑰文件信息 out <- 表示輸出證書文件信息 days <- 表示證書的有效期 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN <- 定義生成證書的國家 State or Province Name (full name) []:BJ <- 定義生成證書的省份 Locality Name (eg, city) [Default City]:BJ <- 定義生成證書的城市 Organization Name (eg, company) [Default Company Ltd]:oldboy <- 定義生成證書的組織 Organizational Unit Name (eg, section) []:it <- 定義生成證書的職能部門 Common Name (eg, your name or your server's hostname) []:oldboy.com.cn <- 定義主機服務器名稱 說明:此輸出信息很是重要,客戶端在獲取證書前,會利用主機名與相應服務器之間創建鏈接,而後得到證書 Email Address []: # ②. 向證書頒發機構申請證書 --- ca證書版本機構完成 # 生成請求證書文件 (戶口本) --- 運維人員完成 openssl req -new -key server.key -out server.csr # 獲取獲得證書文件 (身份證) --- ca頒發機構完成 # 省略 # 第三步:配置網站服務,加載私鑰和證書信息 # 修改 nignx 配置文件中的 server 爲以下: server { listen 443; # https 的端口號爲 443 server_name www.etiantian.org; ssl on; # 打開 ssl ssl_certificate /server/key/server.crt; # 公鑰路徑 ssl_certificate_key /server/key/server.key; # 私鑰路徑 root html/www; index index.html index.htm; } # 要求:訪問 www.etiantian.org 的 http 時,自動跳轉爲 https # nginx 配置文件中的 server 修改成以下: server { # 做用:訪問 www.etiantian.org 的 http 時,自動跳轉爲 https listen 80; server_name www.etiantian.org; rewrite ^(.*)$ https://$host$1 permanent; # ^表示 URL信息, (.*) 表示 URI 信息;$host表示 URL信息,$1表示 (.*) 中的信息(即也是URI信息); permanent 表示永久跳轉 } server { listen 443; server_name www.etiantian.org; ssl on; ssl_certificate /server/key/server.crt; ssl_certificate_key /server/key/server.key; root html/www; index index.html index.htm; } [root@web01 conf]# netstat -lntup|grep [n]ginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3401/nginx tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3401/nginx
學好iptables的基礎: OSI7層模型以及不一樣層對應哪些協議? TCP/IP三次握手,四次斷開的過程,TCP HEADER,狀態轉換 經常使用的服務端口要很是清楚瞭解。 經常使用服務協議原理http協議,icmp協議。 企業中安全配置原則: 儘量不給服務器配置外網IP,能夠經過代理轉發或者經過防火牆映射。 併發不是特別大狀況有外網IP,能夠開啓防火牆服務。 大併發的狀況,不能開iptables,影響性能,利用硬件防火牆提高架構安全。
Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾
的防火牆工具,它的功能十分強大,使用很是靈活,能夠對流入和流出服務器的數據包進行很精細的控制。
iptables是linux2.4及2.6內核中集成的服務。
iptables主要工做在OSI七層的2、3、四層,若是從新編譯內核,iptables也能夠支持7層控制
容器:裝東西的器皿,docker容器技術,將鏡像裝在了一個系統中,這個系統就稱爲容器 iptables稱爲一個容器---裝着防火牆的表 防火牆的表又是一個容器---裝着防火牆的鏈 防火牆的鏈也是一個容器---裝着防火牆的規則 iptables---表---鏈---規則 # 規則:防火牆一條一條安全策略 1. 防火牆是層層過濾的,實際是按照配置規則的順序從上到下,從前到後進行過濾的。 2. 若是匹配上規則,即明確表示是阻止仍是經過,數據包就再也不向下匹配新的規則。 3. 若是規則中沒有明確代表是阻止仍是經過的,也就是沒有匹配規則, 向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。 4. 防火牆的默認規則是全部規則執行完才執行的。 # 表和鏈說明:4表5鏈 Filter: 實現防火牆安全過濾功能 · INPUT 對於指定到本地套接字的包,即到達本地防火牆服務器的數據包 外面---->(門)房子iptables · FORWARD 路由穿過的數據包,即通過本地防火牆服務器的數據包 外面-----(前門)房子(後門)---房子 · OUTPUT 本地建立的數據包 外面<-----(門)房子iptables NAT: 實現將數據包中IP地址或者端口信息,內網到外網進行改寫/外網到內網進行改寫 · PREROUTING 一進來就對數據包進行改變 在路由以前,進行數據包IP地址或端口信息的轉換 · OUTPUT 本地建立的數據包在路由以前進行改變 本地防火牆要出去的流量進行相應轉換(瞭解) · POSTROUTING 在數據包即將出去時改變數據包信息 在路由以後,進行數據包IP地址或端口信息的轉換 Managle 對數據進行標記 raw 忽略不計
# 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(只容許) # 方式1: 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 # 方式2: iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j DROP 經過利用 !進行規則取反,進行策略控制 實踐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 # ping 的請求禁止輸入 iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP # ping 的響應禁止輸出 # 狀況二:實現禁止防火牆訪問主機服務器(禁ping) iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP # ping 的請求禁止輸出 iptables -A INPUT -p icmp --icmp-type 0 -j DROP # ping 的響應禁止輸入 # 默認狀況:全部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: 基於一個鏈接,而後創建新的鏈接 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 # 實例拓展:避免本身被踢出門外 01. 去機房重啓系統或者登錄服務器刪除剛纔的禁止規則。 02. 讓機房人員重啓服務器或者讓機房人員拿用戶密碼登陸進去 03. 經過服務器的遠程管理卡管理(推薦) 04. 先寫一個定時任務,每5分鐘就中止防火牆 05. 測試環境測試好,寫成腳本,批量執行 # 以上內容爲防火牆filter表的配置實踐與原理說明
iptables NAT:(配置NAT表示就是配置如下兩個鏈) 01. postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址) 路由以後,進行地址映射轉換,把源地址進行轉換(源私網地址==>源公網地址) 02. prerouting(外網---內網-NAT 目標公網IP地址---目標私網IP地址 映射目標端口) 路由以前,進行地址映射轉換,把目標地址進行轉換(目標公網地址==>目標變爲私網地址) # 實踐一:iptables實現共享上網方法(postrouting) # 第一步:配置內網服務器,設置網關地址 [root@web02 ~]# /etc/init.d/iptables stop # --- 內網服務器中止防火牆服務 iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@web02 ~]# ifdown eth0 # --- 模擬關閉內網服務器外網網卡 [root@web02 ~]# setup # --- 修改內網網卡網關和DNS地址信息 [root@web02 ~]# 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 # 說明:內網服務器網關地址指定爲共享上網服務器內網網卡地址(172.16.1.7) # 第二步:配置共享上網服務器,開啓共享上網服務器路由轉發功能 [root@web01 ~]# vim /etc/sysctl.conf [root@web01 ~]# sysctl -p net.ipv4.ip_forward = 1 # 第三步:配置共享上網服務器,實現內網訪問外網的NAT映射 [root@web01 ~]# 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鏈以下(172.16.1.7 主機) 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 # -d 10.0.0.8目標地址。 # -j DNAT 目的地址改寫。