1. 程式人生 > >iptables之forward

iptables之forward

iptables forward

1. forward鏈的作用

2. 實現


1. forward鏈的作用

  根據數據報文的流向,若數據報文是由本機轉發的則會經由以下幾個鏈prerouting --> forward --> postrouting。
  forward實現的是數據轉發的功能,當數據報文經過本機時,網卡接收數據報文至緩沖區,內核讀取報文ip首部,發現報文不是送到本機時(目的ip不是本機),由內核直接送到forward鏈做匹配,匹配之後若符合forward的規則,再經由postrouting送往下一跳或目的主機。


2. 實現

2.1 試驗環境:

技術分享圖片
  試驗環境如上圖

  防火墻網卡1與客戶端在一個物理網絡,ftp服務器與http服務器與防火墻網卡2在同一物理網絡。
  四臺主機防火墻規則都清空,默認規則都為ACCEPT,僅充當防火墻的主機FORWARD鏈默認規則為DROP。且SELinux與firewalld服務關閉。

~]# systemctl stop firewalld
#關閉firewalld
~]# systemctl disable firewalld 
#禁止firewalld服務開機啟動
~]# iptables -P FORWARD DROP
#FORWARD默認規則置為DROP
~]# setenforce 0
#關閉selinux

2.2 試驗步驟

  1. 防火墻開啟核心轉發
      ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
  2. 實現1.1.1.0網絡與192.168.1.0網絡的通信
      客戶端添加路由規則:
    ~]# route add -net 192.168.1.0/24 gw 1.1.1.1

      http服務器與ftp服務器分別添加規則

    ~]# route add -net 1.1.1.0/24 gw 192.168.104
  3. 開放1.1.1.0網絡對192.168.1.0網絡的回顯請求

    ~]# iptables -A FORWARD -s 1.1.1.0/24 -d 0/0 -p icmp --icmp-type 8 -j ACCEPT
    #放行1.1.1.0網絡的主機對任意主機的回顯請求(ping請求)
    ~]# iptables -A FORWARD -s 0/0 -d 1.1.1.0/24 -p icmp --icmp-type 0 -j ACCEPT
    #開啟任意主機至1.1.1.0網絡主機的ping回顯響應(ping響應)

    完成操作後如下圖:
    技術分享圖片
    技術分享圖片
    技術分享圖片
      若基於狀態追蹤機制實現以上功能則方法如下:

    ~]# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
    #對狀態是ESTABLISHED狀態的相關請求放行
    ~]# iptables -A FORWARD -s 1.1.1.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
    #放行來自1.1.1.0網絡,狀態是NEW的icmp回顯請求(ping請求)

    完成後效果同上圖(需事先清空防火墻)

  4. 基於狀態追蹤機制實現1.1.1.0網絡對192.168.1.0網絡80、21端口的請求(需服務器支持狀態追蹤機制)
    ~]# iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
    #把第3步forward鏈第一條規則修改為放行已經連接狀態地址的連接和相關聯的連接
    ~]# modprobe nf_conntrack_ftp
    #ftp服務器加載nf_conntrack_ftp模塊
    ~]# lsmod | grep ^nf_conntrack_ftp
    #查看已加載模塊中是否有nf_conntrack_ftp
    nf_conntrack_ftp       12049  0
    ~]# iptables -A FORWARD -s 1.1.1.0/24 -d 0/0 -p tcp -m multiport --dport 21,80 -m state --state NEW -j ACCEPT

    技術分享圖片

iptables之forward