zoukankan      html  css  js  c++  java
  • Linux-Iptables

    防火墙

    分类:

    1、软、硬件形式分类:软件防火墙、硬件防火墙、芯片级防火墙。

    2、防火墙技术分类:包过滤型防火墙、应用代理型防火墙 、复合型防火墙。

    3、从逻辑上分类:主机防火墙(针对于单个主机进行防护)、网络防火墙(往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网)。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。

    Iptables 简介

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

    netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。iptables其实是一个命 令行工具,位于用户空间,我们用这个工具操作真正的框架。

    netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软 件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封 包重定向和网络地址转换(NAT)等功能。

    Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

    • 网络地址转换﴾Network Address Translate﴿

    • 数据包内容修改

    • 以及数据包过滤的防火墙功能

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

    表链结构

    好文推荐:http://www.zsythink.net/archives/1199

    ​ (朱双印博客图)

    1. 如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。

      #INPUT链 – 处理来自外部的数据。
      #OUTPUT链 – 处理向外发送的数据。
      #FORWARD链 – 将数据转发到本机的其他网卡设备上。
      #PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
      #POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
      
    2. 每一个关卡上面有很多规则,这些规则连在一起就是链

    3. 不同的链上面会有一些规则是相似的,我们把相同功能的规则放在一起叫做表

      iptables提供的表:
      
      filter表:负责过滤功能,防火墙;内核模块:iptables_filter
      nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
      mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
      raw表:关闭nat表上启用的连接追踪机制;iptable_raw
      
    4. 表链关系,每条链中会不同规则存在于不同的表中,

      rules指定所检查包的特征和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定。该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[删除], QUEUE[排队],或者 RETURN[返回]。

    5. 下图展示了iptables的三个内建表


    实例实验

    实验原理

    原本从nginx服务映射到Kali 2019中的流量,现在通过iptables转发到Kali 2018的另一个端口上,这样将Kali 2019的ip隐藏了起来,通过Kali 2018访问的流量实际上来自于Kali 2019

    实验准备

    Kali 2019:192.168.43.132

    Kali 2018:192.168.43.222

    实验步骤

    1. 在kali2019中打开docker服务。

      service docker start
      

    2. 在docker环境中将nginx服务运行在7789端口上,并且将7789端口映射到80端口供访问。

      docker run -p 7789:80 nginx
      

      kali2018访问2019地址,显示nginx页面,说明服务成功运行

    3. 在kali2018中开启中间代理转发

      iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.43.132:7789
      
      iptables -t nat -A POSTROUTING -p tcp -d 192.168.43.132 --dport 7789 -j SNAT --to 192.168.43.222
      
      iptables -t nat -L
      
      # -L是--list的简写,作用是列出规则。
      # -t: 指定表
      # ‐A:向规则链中添加条目(Append),iptables中共有INPUT, OUTPUT, FORWARD, P REROUTING, POSTROUTING五个规则链
      # ‐p:指定要匹配的数据包协议类型 
      # ‐‐dport:匹配目的端口(可指定连续的端口) 
      # ‐j<目标>:指定要跳转的目标 
      # DNAT:目标地址转换,iptables中共有ACCEPT, DROP, REDIRECT, SNAT, DNAT, MASQUERADE, LOG,REJECT八种动作
      
      

    查看设置项情况

    1. 查看ip_forward值 ,为0

      cat /proc/sys/net/ipv4/ip_forward
      

    2. 设置ip_forward值为1,开启转发

      sysctl ‐w net.ipv4.ip_forward=1
      

    3. 在filter表中添加规则

      iptables -t filter -I FORWARD -j ACCEPT
      

    结果

    ​ 使用物理机访问kali2019和访问2018是一样的结果,都是nginx服务。成功转发

    参考文章链接:

    http://www.zsythink.net/archives/1199

    https://blog.csdn.net/u011537073/article/details/82685586

  • 相关阅读:
    Mysql源代码分析系列(2): 源代码结构转载
    Python 元组、列表、字典、文件
    Mysql源代码分析系列(1): 编译和调试转载
    ETL测试参考文档
    MySql select into与set的区别
    STL container
    mysqlclient5.0.2614 RPM for ppc
    linux多线程的总结(pthread用法)
    给线程变量pthread_t *thread动态分配空间
    当SQL数据库日志文件已满,或者日志很大,怎么办
  • 原文地址:https://www.cnblogs.com/kbhome/p/13434391.html
Copyright © 2011-2022 走看看