zoukankan      html  css  js  c++  java
  • Iptables流量转发实验

    Iptables流量转发实验

    Iptables简介

    Iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫Netfilter

    Netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。

    Iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

    所以说,虽然我们使用service iptables start启动iptables"服务",但是其实准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

    iptables的结构:iptables -> Tables -> Chains -> Rules。 简单地讲,tables由chains组成,而chains又由rules组成。
    Tables包括Filter, NAT, Mangle, Raw四种表。
    Chains包括Input, Output, Forward, Prerouting, Postrouting五种链。
    rules指定所检查包的特征和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定。该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[删除], QUEUE[排队],或者 RETURN[返回]。

    命令选项

    -t:指定要操纵的表;
    -A:向规则链中添加条目;
    -D:从规则链中删除条目;
    -i:向规则链中插入条目;
    -R:替换规则链中的条目;
    -L:显示规则链中已有的条目;
    -F:清楚规则链中已有的条目;
    -Z:清空规则链中的数据包计算器和字节计数器;
    -N:创建新的用户自定义规则链;
    -P:定义规则链中的默认目标;
    -h:显示帮助信息;
    -p:指定要匹配的数据包协议类型;
    -d:指定目的ip
    --dport:指定目标端口
    -s:指定要匹配的数据包源ip地址;
    -j:指定要跳转的目标;
    -i:指定数据包进入本机的网络接口;
    -o:指定数据包要离开本机所使用的网络接口。

    参考文章:

    https://blog.csdn.net/u011537073/article/details/82685586
    http://www.zsythink.net/archives/1199

    实验描述:

    将服务端的nginx服务流量,通过iptables创建规则转发到另一台主机的端口上,这样就将服务端隐藏了起来,访问代理机的流量实际上来自于本机。

    实验环境:

    服务端:kali2019 ip:192.168.245.129

    代理机:kali2018 ip:192.168.245.139

    实验步骤:

    1. 启动docker容器,开启nginx服务,将服务端的80端口映射到7799端口

      $service docker start
      $docker run -p 7799:80 nginx
      

      浏览器访问服务端的7799端口可以看到成功开启

    2. 现在切换到代理机,输入命令创建两条规则

      $iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.245.129:7799
      $iptables -t nat -A POSTROUTING -p tcp -d 192.168.245.129 --dport 7799 -j SNAT --to 192.168.245.139
      
    3. 查看一下是否创建成功

      $iptables -t nat -L
      

    4. 现在开启转发,查看ip_forward值是否为1,若不是设置值为1

      $cat /proc/sys/net/ipv4/ip_forward
      

      sysctl -w net.ipv4.ip_forward=1
      

    5. 添加规则,设置转发所有流量

      iptables -t filter -I FORWARD -j ACCEPT
      
    6. 此时访问代理机的7788端口,返回了服务端7799端口的流量

  • 相关阅读:
    Numpy基本介绍
    Java中的<< 和 >> 和 >>> 详细分析
    Matplotlib绘制基本图像
    Matplotlib基本使用
    最新动态:开源项目 ionic3-awesome — 实现生成带logo二维码组件
    最新动态:开源项目 ionic3-awesome — 实现iframe嵌入外部网页
    最新动态: 开源项目 ionic3-awesome — 实现多主题功能
    Angular5强势来袭
    js中对象的拷贝,浅拷贝和深拷贝
    vue2 + element-ui + axios 开源项目推荐
  • 原文地址:https://www.cnblogs.com/Iamyoyodan/p/13151992.html
Copyright © 2011-2022 走看看