zoukankan      html  css  js  c++  java
  • 6.iptables的匹配条件(三)

    --tcp-flags模块

    --tcp-flags选项指的是tcp头部的标识位,可以通过此扩展匹配条件,去匹配tcp报文的头部的标识位,然后根据标识位的实际情况实现访问控制的功能。

    在TCP协议建立连接的过程中,需要先进行三次握手,而三次握手就要依靠TCP头中的标识位进行。

    如果想要匹配“第一次握手”的报文,可以使用如下命令:

    --tcp-flags用于匹配报文tcp头部的标志位;第一部分为“SYN,ACK,FIN,RST,URG,PSH”,第二部分为“SYN”。
    第一部分表示:需要匹配报文tcp头部中的哪些标志位,也就是要匹配的标志位列表;
    第二部分表示:第一部分的标志位列表中,哪些标志位必须为1。

    匹配TCP头中第二次握手:

    TCP扩展模块中的--syn选项可以匹配“第一次握手”,也就是说可以替代“--tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN”。

    UDP和ICMP扩展模块

    1.UDP扩展

    --sport:匹配报文中的源端口
    --dport:匹配报文中的目的端口
    例如,放行Samba服务的UDP 137,138这两个端口

    表示137:138两个udp端口对外开放,连续的端口范围使用冒号隔开;

    和TCP同样支持使用“multiport”模块指定多个离散的、不连续的端口,每个端口之间用逗号隔开。

    2.ICMP扩展

    ICMP协议的全称为Internet Control Message Protocol互联网控制报文协议,主要用于探测网络上的主机是否可用,目标是否可达等。

    经常使用的ping命令,如果主机可达,对应主机会向我们的ping请求做出回应,也就是说,我们发出ping请求,对方回应ping请求,虽然ping请求报文与ping回应报文都属于ICMP类型的报文,但在概念上细分的话,它们所属的类型是不同的,我们发出的ping请求属于类型8的ICMP报文,而对方的ping回应报文则属于类型0的ICMP报文。

    如果想要禁止所有的icmp类型的报文进入本机,可以这样设置:
    iptables -t filter -I INPUT -p icmp -j REJECT
    上述只是使用了“-p icmp”匹配了所有icmp协议类型的报文;所以我们既无法ping通别人,别人也无法ping通我们。

    假设,此时我们需要ping通别人,但是不想让别人ping通我们,可以进行如下设置:

    使用“--icmp-type 8/0”选项表示ICMP报文的type为8,code为0时才会被匹配到,也就是只有ping请求类型的报文才能被匹配到,所以,别人对我们发起的ping请求将会被拒绝通过防火墙,而我们之所以能够ping通别人,是因为别人回应我们的报文ICMP的TYPE为0,code也为0.

    除了能够使用对应TYPECode匹配到具体类型的ICMP报文外,还能用ICMP报文的描述名去匹配对应类型的报文。

    state模块

    从字面上理解,state译为状态,state模块可以让iptables实现“连接追踪”机制。
    对于state模块而言,只要两台机器在相互的通信,就算建立起了连接

    state模块的连接分为5种状态:
    1.NEW:连接中的第一个包
    2.ESTABLISHED:表示连接已建立
    3.RELATED:关系;数据连接中的报文与命令连接是有关系的
    4.INVALID:如果一个包没有办法被识别,或者这个包没有任何状态
    5.UNTRACKED:报文的状态为untracked时,表示报文未被追踪,当报文的状态为untracked时通常表示无法找到相关的连接。

    问题是:怎样判断报文是否是为了回应我们之前发出的报文,还是主动向我们发送的报文呢?

    可以放行状态为ESTABLISHED的报文即可,因为如果报文的状态为ESTABLISHED,那么报文肯定是之前发出的报文的回应,还可以将状态为INVALID或ESTABLISHED的报文都放行,这样,就表示只有回应我们的报文能够通过防火墙,而别人主动发来的新报文,则无法通过防火墙。

    示例:

    当前主机的IP地址为10.10.10.15,当放行RELATED和ESTABLISHED状态的包后,并不影响本地远程ssh到16主机,但是无法从16主机使用ssh连接到本机。

    作者:ccku
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/ccku/p/13693005.html
Copyright © 2011-2022 走看看