十三.iptabled配置

期中集羣架構-第十三章-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 目的地址改寫。

相關文章
相關標籤/搜索