防火墻原理以及iptables重要實踐

防火墻

  • 主機間通信大致過程:

    1. 請求報文由客戶端IP+PORT和服務器端IP+PORT構成。當客戶端網絡地址和服務端地址在同一網段時,不需要經由路由轉發,可以直接到目標服務器,再經由服務器端口請求道所需資源;
    2. 當服務器端和客戶端不在同一網段時。目標IP和源IP是不會改變的,會經由互聯網中的路由器,按照其的路由表,指向該路由器的下一跳主機,知道找到服務器端所在網段。

      • 當Linux主機充當路由器時,接收到報文請求之后,判斷目標IP是不是本地的IP地址,如果是,則發往內核空間拆開IP封裝,再拆開端口地址封裝,交由目標端口,有監聽該端口的進程進行處理。
      • 當不是本地的IP,并且打開了核心轉發功能(ip_forward),那么,就會交給其他網卡,并且根據相應的路由表進行轉發
  • 防火墻的工作原理:

    • 由于主機之間的通信,需要IP和端口兩個數據,那么我們可以在端口之外,將端口封起來,不允許隨意訪問,這樣就可以實現防火墻功能呢個
    • 但是,作為服務器而言,需要向外提供服務;作為客戶端而言,需要向外請求服務。所以,純粹的封閉主機的端口,來達到防火墻功能,并不現實。需要在防火墻上添加規則,并且給出相應的處理動作,與規則條件不匹配的,做出什么樣的處理動作,符合的又該做出什么動作。
    • 根據主機間的通信過程,我們可以了解到,一個請求進入一臺Linux主機,有兩個方向可以通過,一個是進入內核空間,另外一個是通過核心轉發功能轉發出去:

防火墻原理以及iptables重要實踐
1. 請求報文進入主機內部,先經由prerouting,input鏈進入內核空間,到目標端口,進行處理
2. 處理完之后,用過output,postrouting,由本機發出 2. 請求報文進入主機內部,從prerouting,到forward,再到postrouting,由本機轉發
3. 請求報文進入內核空間,經由ouput,postrouting,再到網卡,由本機發出 4. 對Linux而言,這五個能實現包進行處理的位置,是在內核中安置的一個框架,任何一個報文只要達到這個位置,都會被審核(根據檢查規則作出相應處理動作。如何添加規則就是由管理員所定義的) 5. 通過iptables這個工具,將編寫的規則通過這個工具發送給上述的框架 防火墻原理以及iptables重要實踐

  • iptables:

    1. 功能:(4表)

    filter:過濾,防火墻;
    nat:network address translation nat會話的連接追蹤表;用于修改源IP或目標IP,也可以改端口;(功能是地址轉換,保護服務器一側,就將它放置在服務器里,向外提供服務;保護客戶端一側,放置在客戶端,代表客戶端訪問互聯網。保護客戶端的時候做源地址轉換;保護服務端做目標地址轉換)
    mangle:拆解報文,做出修改,并重新封裝起來;(修改地址(源IP,目標IP)之外的其他屬性,比如報文中的其他信息 ttl 協議版本等。)
    raw:關閉nat表上啟用的連接追蹤機制

    1. 5鏈

    PREROUTING
    INPUT
    FORWARD
    OUTPUT
    POSTROUTING

  • state

    它是coontrack模塊(連接追蹤)的子集;可以基于連接追蹤功能去查看某一報文的當前所處的狀態
    連接追蹤:在內核內存中打開一段空間,這段空間可以記錄下來,此前哪些客戶端訪問過。(給內核內存中添加了記錄某個IP基于什么協議通過什么端口訪問了哪些東西等信息)
    連接追蹤功能需要激活后才能使用,需要裝載(-m state –state
    對于一個非常繁忙的主機而言,要么調大這個空間,要么不開啟追蹤

    • [!] –state state

      INVALID,ESTABLSHED,NEW,RELATED or UNTRACKED.
      NEW:新連接請求;
      ESTABLISHED:已經建立的連接;
      RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接;  UNTRACKED:未追蹤的連接;
      INVALID:無法識別的連接;

    • state擴展:

      內核模塊裝載:
      nf_conntrack
      nf_conntrack_ipv4

    • 手動裝載:

      nf_conntarck_ft

  • SNAT:源地址轉換。用于將IP數據包的源地址轉換成另外一個地址,實現隱藏客戶端源IP,順帶著解決了IPv4地址不夠使用的問題

  • DNAT:目標地址轉換。實現了隱藏服務器地址,和解決IPv4地址不夠使用的問題

    #環境:
    A:eth0:inet 192.168.2.128/24 
    B:eth0: inet 192.168.3.129/24;
       eth1: inet 192.168.2.129/24
    C:eth0:inet 192.168.3.128/24
    #B機器eth1為A機器的網關
    ip route add default via 192.168.2.129
    #B機器eth0為C機器網關
    ip route add default via 192.168.3.129
    #B機器添加規則:
    iptables -t nat -A PREROUTING -d 192.168.2.129 -j DNAT --to-destination 192.168.3.128       #構建DNAT
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.0.6                #構建SNAT

萬能規則示例:

#在B機器(開啟了核心轉發功能的Linux主機)添加一下規則
iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
    #對所有已經建立的報文,都放行
iptables -I FOWARD 2 -s 192.168.2.0/24 -m state --state NEW -j ACCEPT
    #開放內網主機(A),訪問服務端(外網主機C),放行NEW請求;表示放行內網去訪問外網。
#注意,無法放行ftp這種半連接狀態的協議,需要額外添加RELATED的規則
modprobe nf_conntrack_ftp
vim /etc/sysconfig/iptables-config
    IPTBLES_MODULES="nf_conntrack_ftp"      #firewalld文件,自動加載這個模塊,CentOS6中自動啟動可以使用腳本
iptables -I FORWARD 5 -d 192.168.2.128 -p tcp -m state --state RELATED -j ACCEPT

原創文章,作者:半斤八兩,如若轉載,請注明出處:http://www.www58058.com/78172

(1)
半斤八兩半斤八兩
上一篇 2017-06-18 13:52
下一篇 2017-06-18 19:04

相關推薦

  • 2班jackcui20160802作業

    1、每日課堂筆記總結 2、預習 3、每日課堂pdf練習 4、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 [root@centos7 /]# groupadd g1 [root@centos7 /…

    Linux干貨 2016-08-05
  • Nginx負載均衡

    基于Nginx的負載均衡以及高可用簡單應用 一、負載均衡配置 1、Nginx負載均衡配置 前面配置好的Nginx,可以訪問之后,克隆4臺,統一配置為512M,因為我的電腦內存是4G的。一臺用來訪問,一臺用來做調度器(Director),兩臺web服務器(real server),Nginx前面已經介紹過了,故在此簡單介紹一下那臺Director的配置。 2、…

    Linux干貨 2016-12-29
  • 在Linux中使用計算器遇到的問題

    進制轉換的時候出現了與理解不同的結果

    Linux干貨 2017-11-14
  • 管窺Linux史

    管窺Linux史 眾所周知,絕大部分發行版本都被稱為類Unix系統,要說Linux就應該先了解Unix的歷史,Unix的起源應該贅述MULTICS的歷史,Unix的父輩是頗具開拓性的Multics項目…… Unix創世紀 二戰結束以后,冷戰開始了。1957年蘇聯發射了第一顆人造衛星,進而開始籌備發射載人宇宙飛船。與此同時,美國宇航局的研究卻連連受挫。航天領域…

    Linux干貨 2016-10-14
  • vim 文本編輯器

    vim 文本編輯器 vi 簡介 vi命令是UNIX操作系統和類UNIX操作系統中最通用的全屏幕純文本編輯器。Linux中的vi編輯器叫vim,它是vi的增強版(vi Improved),與vi編輯器完全兼容,而且實現了很多增強功能。 vi編輯器支持編輯模式和命令模式,編輯模式下可以完成文本的編輯功能,命令模式下可以完成對文件的操作命令,要正確使用vi編輯器就…

    Linux干貨 2016-08-16
  • 文本全屏編輯器 vim

             vim在Linux中站著很重要的位置,是每一個學習Linux人員的必須掌握的技能之一,因為vim功能很強大為我們編輯文件和腳本帶來了很大的方便。接下來我們來一起了解vim的功能。   文本編輯種類:     行編…

    Linux干貨 2016-08-15
欧美性久久久久