防火墻原理以及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
下一篇 2017-06-18

相關推薦

  • mysql基礎

      mysql基礎 數據模型: 數據模型:層次模型、網狀模型、關系模型、…… 關系模型: 二維關系:表     行:row, entity     列:colume, attribution 索引:數據結構,輔助完成數據查找;  &nbsp…

    Linux干貨 2016-11-01
  • 馬哥linux0803作業內容

    1. 創建sysadmins組 將用戶user1,user2,user3加入sysadmins組中 將user3設置為sysadmins的管理員 用user3登錄,將user2從組中移除 設置sysadmins的密碼centos 設置user1 在創建新文件時,文件的所屬組為sysadmins 刪除user1…3 刪除sysadmins 2、三種權限rwx對…

    Linux干貨 2016-08-08
  • Linux運維之進程管理

    一、      進程概念 進程是內核的一個功能,在Linux中,運行一個程序或命令可以出發一個事件而驅動一個PID,在linux系統中,系統只識別二進制程序文件,我們可以通過執行系統上的二進制程序來運行程序,進而產生進程。在linux系統中第一個進程是init程序,它是系統開機第一個加載的程序,用來支撐系統的…

    Linux干貨 2016-09-13
  • keepalived高可用

    keepalived實現wrrp熱網關備份:keepalived配置文件如下主:! Configuration File for keepalived global_defs {  notification_email {    acassen@firewall.loc    failover@firewal…

    Linux干貨 2017-05-16
  • N-22-南京-修 第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost xujie]# cp -a /etc/skel /home/tuser1 [root@localhost home]# chmod -R 700 tuser1 之前 [root@localho…

    Linux干貨 2016-09-15
  • Shell 編 程 之 until循 環 語 句-20160817

    Shell 編 程 之 until循 環 語 句 §·練習題: 1 每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統? 解:解題思路:按照題意該腳本一直無限循環,一直探測用戶h…

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