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端口的流量

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/Iamyoyodan/p/13151992.html
Copyright © 2011-2022 走看看