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

posted @ 2020-08-04 17:01  admin刍狗  阅读(189)  评论(0编辑  收藏  举报