1. forward链的作用

2. 实现


1. forward链的作用

  根据数据报文的流向,若数据报文是由本机转发的则会经由以下几个链prerouting --> forward --> postrouting。
  forward实现的是数据转发的功能,当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目的主机。


2. 实现

2.1 试验环境:

iptables之forward_第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之forward_第2张图片
    iptables之forward_第3张图片
    iptables之forward_第4张图片
      若基于状态追踪机制实现以上功能则方法如下:

    ~]# 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_第5张图片