zoukankan      html  css  js  c++  java
  • iptables基础知识详解

    iptables命令是Linux上最常用的防火墙代理,可以很好得控制进出流量以及限速等。

    iptables不是真正意义上得防火墙,我们应该把它理解为一个代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"里面,【netfilter】,这个框架才是真正的防火墙。

    netfilter位于内核空间

    iptables是一个命令行工具,位于用户空间

       

    首先,我们介绍几个基本概念。

    netfilter

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

    • 网络地址转换(NAT
    • 数据包内容修改
    • 数据包过滤【防火墙功能】

       

    rules

    规则是网络管理员预定义的条件,一般形式为"如果符合XXX的条件,就XXX这样处理"。

    规则存储在内核空间的信息包过滤表中,这些规则分别指定了/目的地址,传输协议,服务类型等。

    当数据包与规则匹配时,就按照定义的方法进行处理【放行,拒绝,丢弃】。

    配置防火墙主要就是配置这些规则。

       

    内核要想实现报文的【放行,拒绝,丢弃】,就要在内核设置关卡,符合条件放行,不符合阻止,这些所谓的关卡就叫链,主要包括【inputoutput】。

    而报文并不是每次的目标主机都是本机,当主机支持 IP_FROWARD时,我们可以把报文转发给其他服务器,也就是其他链,"路由前","转发","路由后"。

    如图:

    链为什么叫链呢?

    我们前文已经说过,防火墙的作用就是对经过关卡的报文匹配规则,然后执行相对应的动作。但是关卡上的规则可能不止一条,有可能有很多条,每个经过此关卡的报文,都要将这些所有的规则都匹配一遍,所以,我们将这些关卡称之为链

    链名

    功能

    INPUT

    处理输入数据包

    OUTPUT

    处理输出数据包

    PORWARD

    处理转发数据包

    PREROUTING

    用于目标地址转换DNAT

    POSTOUTING

    用于源地址转换SNAT

       

    表:

    我们把具有相同功能的规则的集合叫做

    表名

    功能

    内核模块

    主要用于

    filter

    负责过滤功能

    iptables_filter

    防火墙

    nat

    网络地址转换

    iptable_nat

    网关路由器

    mangle

    拆解报文,修改,重新封装

    iptable_mangle

    服务质量(QOS

    raw

    关闭nat表上启用的连接追踪机制

    iptable_raw

    高级功能,如:网址过滤

    所有的规则都保存在这四张表中。

       

    表的优先级为: raw -> mangle -> nat -> filter

       

    动作:

    accept

    接收数据包

    DROP

    丢弃数据包

    REDIRECT

    重定向、映射、透明代理

    SNAT

    源地址转换

    DNAT

    目标地址转换

    MASQUERADE

    IP伪装(NAT),用于ADSL

    LOG

    日志记录

       

    接下来,我们介绍一下iptables的使用:

       

    • 基本命令

         

      • 清除已有的规则

        iptables -F

        iptables -X

        iptables -Z

           

      • 查看已有的规则

        iptables -vnL

        iptables -L -n --line-numbers(删除前查看序号)
         

      • 删除已有的规则

        iptables -D INPUT 8

           

    • 开放指定端口
      • iptables -A OUTPUT -j ACCEPT                      #允许所有本机向外的访问
      • iptables -A INPUT -p tcp --dport 22 -j ACCEPT     #允许访问22端口
      • iptables -A INPUT -j reject                       #禁止其他未允许的规则访问
      • iptables -A FORWARD -j REJECT                     #禁止其他未允许的规则访问

           

    • 屏蔽指定端口
      • iptables -I INPUT -s 123.45.6.7 -j DROP           #屏蔽单个IP的命令
      • iptables -I INPUT -s 123.45.6.0/24 -j DROP        #IP段即从123.45.6.1123.45.6.254的命令

           

    • 相对复杂的命令

      iptables -A INPUT -i br-ext -p tcp --dport 5355 -j DROP -m comment --comment 'huwangxingdong'

                                链                接口              协议                  目的端口  丢弃         备注

         

    • 选项

    -t<>

    指定要操纵的表;

    -A

    向规则链中添加条目;

    -D

    从规则链中删除条目;

    -i

    向规则链中插入条目;

    -R

    替换规则链中的条目;

    -L

    显示规则链中已有的条目;

    -F

    清除规则链中已有的条目;

    -Z

    清空规则链中的数据包计算器和字节计数器;

    -N

    创建新的用户自定义规则链;

    -P

    定义规则链中的默认目标;

    -h

    显示帮助信息;

    -p

    指定要匹配的数据包协议类型;

    -s

    指定要匹配的数据包源ip地址;

    -j<目标>

    指定要跳转的目标;

    -i<网络接口>

    指定数据包进入本机的网络接口;

    -o<网络接口>

    指定数据包要离开本机所使用的网络接口。

       

  • 相关阅读:
    在Html中使用echarts图表
    html+css模拟微信对话
    解决React 的<img >src使用require的方式图片显示不出来,展示的是[object Module]的问题
    easygui入门
    python安装easygui
    关于gcc、make和CMake的区别
    FreeRTOS使用心得。
    C/C++整数输出位不足前补0方法
    AngularJS前端分页 + PageHelper后端分页
    AngularJS常见指令
  • 原文地址:https://www.cnblogs.com/liufarui/p/10970468.html
Copyright © 2011-2022 走看看