zoukankan      html  css  js  c++  java
  • Linux网络安全篇,认识防火墙(二),Netfilter

    一.概述

    因为iptables软件利用的是数据包的过滤的机制。所以它会分析数据包的报头数据。根据报头数据与定义的规则来决定该数据是否可以放行。若数据包内容与规则内容相同则放行,否则继续与下一条规则进行比较。我们可以发现这些规则是有顺序的。如果数据符合第一条规则,则不再理会后续的规则了。因此,规则的排列顺讯是非常重要的

    如果该数据与所有规则都不符合,则会通过默认操作,即数据包策略Policy。

    二.iptables的整体框架

    从名字我们就可以得知,iptables是一个管理多个表格的软件。而每个表格又有很多链(chain)。我们在上面(概述)提到的工作流程其实只是某个表格的某个链的执行原理。

    如何查看当前iptables中已经存在的表以及其中的规则呢?

    iptables [-t tables] [-L] [-nv]

    -t ===> 后面接table,若省略则默认使用filter

    -L ===> 列出目前的table的规则

    -n ===> 不进行IP和HOSTNAME的反查

    -v ===> 列出更多的信息

    eg:

    字段属性:

    target ===> 代表进行的操作,ACCEPT事放行,而REJECT则是拒绝,DROP是丢弃

    prot ===> 代表使用的数据包协议

    opt ===> 额外的选项说明

    source ===> 代表此规则是针对哪个来源IP进行限制

    destination ===> 代表此规则是针对哪个目标IP进行限制

    主要的表及其内部包含的链:

    Filter(过滤器):

    主要跟进入Linux本机的数据包有关,是默认的table。

    INPUT与要进入本机的数据包有关

    OUTPUT:与本机要送出的数据包有关

    FORWARD:与本机没有关系,可以传递数据包到后端的计算机中,与NAT的相关性较高

    NAT(地址转换):

    PREROUTING:路由判断之前要进行的规则

    POSTROUTING:路由判断之后要进行的规则

    OUTPUT:与发送出去的数据包有关

    这个用来进行来源与目的地的IP或port的转换,与本机无关,主要与Linux主机后的局域网内计算机有关

    Mangle(破坏者):

    特殊的数据包。该表与特殊标志相关性较高

    三、常用命令

    1.查看完整的防火墙规则(没有格式化输出)

    iptables-save [-t table]

    2.清除规则

    iptables [-t tables] [-FXZ]

    -F ===> 清除所有的已制定规则

    -X ===> 删除所有用户“自定义”的链(chain)

    -Z ===> 将所有用户的链(chain)的计数与流量都归零

    注意:这三条命令会将本机防火墙规则都清除,但是不会改变默认策略(policy)

    3.定义默认策略

    策略(policy) :当数据包不在我们设置的规则之内时,它的通过与否是以策略(policy)的设置为准。

    iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT|DROP]

    -P ===> 定义策略(Policy)

    ACCEPT ===> 该数据包可接受

    DROP ===> 该数据包直接丢弃,不会让Client端知道为何丢弃

    eg:

    将本机的INPUT设置为DROP

    iptables -P INPUT DROP

    4.数据包的基础对比

    iptables [-A/I 链名] [-i/o 网络接口] [-p 协议] [-s 来源IP/网络] [-d 目标IP/网络] -j [ACCEPT|DROP|REJECT|LOG]

    -A ===> 新增一条规则到该链的最后面

    -I ===> 插入一条规则,若没有指明此规则的顺序,则默认插入变成第一条规则

    -i ===> 设置数据包进入网络接口(eth0,lo等)的规范,需要与INPUT链配合

    -o ===> 设置数据包传出网络接口的规范,需要与OUTPUT链配合

    -p ===> 设置改规则适用于哪种数据包格式(tcp,udp,icmp,all)

    -s ===> 设置此规则之数据包的来源地,可以为IP(如192.168.1.1)或网络(如192.168.1.0/24或192.168.1.0 255.255.255.0)

    -d ===> 设置此规则之数据包的目标IP或网络

    -j ===> 后面接操作,ACCEPT(接受),DROP(丢弃),REJECT(拒绝),LOG(记录)

    注意:如果没有设置某个参数,则代表无论该参数代表的值为何值都接受

    eg:

    (1).

    iptables -A INPUT -i lo -j ACCEPT 

    该命令的意思是:设置lo成为受信任的设备,亦即进入和出去lo的数据都予以接受。

    (2).

    iptables -A INPUT -i eth1 -j ACCEPT

    该命令的意思是:设置eth1网卡为信任网卡。即该网卡没有任何防备。

    5.TCP、UDP的规则比对:针对端口设置

    iptables [-A/I 链] [-i/o 网络接口] [-p tcp,udp] [-s 来源IP/网络] [--sport 端口范围] [-d 目标IP/网络] [--dport 端口范围] -j [ACCEPT|DROP|REJECT]

    --sport ===> 端口范围,限制来源的端口号码

    --dport ===> 端口范围,限制目标的端口号码

    注意:因为仅有tcp与udp数据包具有端口,因此要想使用--dport,sport时,需要加上-p tcp或-p udp的参数才会成功

    eg:将想要连接进入本机port 21的数据包全部阻挡

    iptables -A INPUT -i ens33 -p tcp --dport 21 -j DROP

    6.特殊标志,对主动连接SYN的处理

    eg:

    将来自任何地方来源port 1:1023的主动连接到本机端的 1:1023连接丢弃

    iptables -A INPUT -i ens33 -p tcp --sport 1:2023 --dport 1:1023 --syn -j DROP 

    注意:一般来说,客户端启用的port都大于1024,而服务器端启用的端口都小于1023。

    7.iptables外挂模块:mac与state

    iptables -A INPUT [-m state] [--state 状态]

    -m ===> 接iptables的外挂模块

    常见的外挂模块有:

    state:状态模块

    mac:网卡硬件地址

    --state ===> 接数据包的状态

    常见状态主要有:

    INVALID:无效的数据包

    ESTABLISHED:已经连接成功的连接状态

    NEW:想要新建立连接的数据包状态

    RELATED:表示这个数据包是与主机发送出去的数据包有关

    eg:

    (1).只要已建立连接或与已发出请求相关的数据包就予以通过

    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    (2).针对局域网内的aa:bb:cc:dd:ee:ff主机开放其连接

    iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT 
  • 相关阅读:
    IE和FF下面的css半透明效果
    javascript 文字滚动
    利用URLRewriter重写url
    “/”应用程序中的服务器错误。
    Iframe 参数列表
    【转】CSS的一些技巧
    ASP.NET 如何动态修改 title Meta link标签
    Test2.数据库批处理添加练习(mysql_java)
    html5(test1.提交表单)
    smartupload图片上传
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700485.html
Copyright © 2011-2022 走看看