iptabels

一.iptables介绍

iptables并不是真正意义上的防火墙,我们可以理解为一个客户端工具,用户通过ipatbles这个客户端,将用户 的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。 netfilter才是防火墙真正的安全框架,netfilter位于内核空间。
iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包 过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能

二.iptables的四表五链

说明
filter过滤,防火墙
nat网络地址转换 ;用于修改源ip或目标ip,也可以改端口
mangle拆解报文,做出修改,并重新封装起来
raw关闭nat表上启用的连接追踪机制

链(内置):
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

在实际使用中,我们通常是用表来操作,这里列出表和链的关系

rawPREROUTING, OUTPUT
manglePREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
natREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filterINPUT,FORWARD,OUTPUT

在这里插入图片描述
报文流向:
流入本机:PREROUTING --> INPUT
由本机流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

三.iptables基本用法

规则格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

-t table:
raw, mangle, nat, filter(默认)

COMMAND

  • 链管理:
    -F:flush,清空规则链:省略链,表示清空指定表上的所有的链;
    -N:new, 自定义一条新的规则链;
    -X: delete,删除自定义的规则链;
    -Z: zero,清零,置零规则计数器;
    注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
    -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
    ACCEPT:接受
    DROP:丢弃
    REJECT:拒绝
    -E: rEname 重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;

  • 规则管理
    -A:append,追加;
    -I:insert, 插入,要指明位置,省略时表示第一条;
    -D:delete,删除;
    (1) 指明规则序号;
    (2) 指明规则本身;
    -R:replace,替换指定链上的指定规则;
    -F:flush,清空指定的规则链;
    -Z:zero,置零;
    iptables的每条规则都有两个计数器:
    (1) 匹配到的报文的个数;
    (2) 匹配到的所有报文的大小之和

  • 查看

    -L:list, 列出指定鏈上的所有规则;

     					-n:numberic,以数字格式显示地址和端口号;
     					-v:verbose,详细信息;
     						-vv, -vvv
     					-x:exactly,显示计数器结果的精确值; 
     					--line-numbers:显示规则的序号;
    
  • chain
    PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

  • -j targetname(处理动作)
    在这里插入图片描述

常用规则匹配器
在这里插入图片描述

命令用法总结
在这里插入图片描述

四.iptables进阶用法

扩展匹配条件:
隐式扩展:在使用-p选项指明了特定的协议时,无需再同时使用-m选项指明扩展模块的扩展机制;
显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制;

显示扩展:

  1. iprange扩展模块
    用iprange扩展模块可以指定"一段连续的IP地址范围",用于匹配报文的源地址或者目标地址。
    –src-range:源地址范围
    –dst-range:目标地址范围

]# iptables -t filter -I INPUT -m iprange --src-range 192.168.1.128-192.168.1.254 -j DROP

  1. string扩展模块
    使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。
    -m string:表示使用string扩展模块
    –algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但 是我们必须指定一个。
    –string:用于指定需要匹配的字符串

]# iptables -t filter -I INPUT -m string --algo bm --string “bit” -j REJECT

  1. time扩展模块
    过time扩展模块,根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件。
    -m time:表示使用time扩展模块
    –timestart:选项用于指定起始时间,00:00:00格式时分秒。
    –timestop:选项用于指定结束时间。
    –weekdays:选项用于用数字指定星期几,还能用缩写表示,例如:Mon, Tue, Wed,Thu, Fri, Sat, Sun
    –monthdays,–datestart,–datestop:指定日期范围

    ~]# iptables -t filter -I OUTPUT -p TCP --dport 80 -m time --timestart 08:55:00 --timestop 17:00:00 -j REJECT

    ~]# iptables -t filter -I OUTPUT -p TCP --dport 80 -m time --weekdays 1,2,3,4,5 -j REJECT

    ~]# iptables -t filter -I OUTPUT -p TCP --dport 8080 -m time -monthdays 1,2 -j REJECT

    ~]# iptables -t filter -I OUTPUT -p TCP --dport 8080 -m time -datestart 2019-04-20 --datestop 2019-04-21 -j REJECT

  2. connlimit扩展模块
    connlimit扩展模块,可以限制每个IP地址同时链接到server端的链接数量,注意:我们不用指定IP,其默认就 是针对"每个客户端IP",即对单IP的并发连接数限制。一般和协议、端口配合使用
    –connlimit-above:限制连接上限
    –connlimit-mask:按照网段限制连接上限

    ~]# iptables -t filter -I OUTPUT -p TCP --dport 22 -m connlimit -connlimit-above 2 -j REJECT

  3. limit扩展模块
    limit模块对"报文到达速率"进行限制,我们可以以秒为单位进行限制,也可以以分钟、小时、天作为单位进行限
    制。
    –limit限制比较有意思,主要用来限制单位时间内可以流入的数据包的数量。
    使用"–limit"选项时,可以选择的时间单位有多种,如下 /second /minute /hour /day

    ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/min -j REJECT

  4. tcp-flags模块
    tcp-flags模块也属于我们之前讲到过的tcp扩展模块中的内容。 --tcp-flags指的就是tcp头中的标志位,看来,在使用iptables时,我们可以通过此扩展匹配条件,去匹配tcp报 文的头部的标识位,然后根据标识位的实际情况实现访问控制的功能。在网络部分我们讲了三次握手,四次挥手,讲 了TCP的包头,这里主要指tcp包头中的标志位,SYN,ACK,FIN,RST,URG,PSH。
    他的匹配规则是:“SYN,ACK,FIN,RST,URG,PSH SYN”,怎么来理解,我们可以把这串字符拆成两部分去理解,第一部分为"SYN,ACK,FIN,RST,URG,PSH",第二部分为"SYN"。

    第一部分表示:我们需要匹配报文tcp头中的哪些标志位,那么上例的配置表示,我们需要匹配报文tcp头中的6 个标志位,这6个标志位分别为为"SYN、ACK、FIN、RST、URG、PSH",我们可以把这一部分理解成需要匹配的标 志位列表。
    第二部分表示:第一部分的标志位列表中,哪些标志位必须为1,上例中,第二部分为SYN,则表示,第一部分 需要匹配的标志位列表中,SYN标志位的值必须为1,其他标志位必须为0。

    ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT #匹配第一次握手
    ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT #匹配第二次握手

  5. state扩展
    state是一个非常重要的扩展,可以基于连接追踪功能去查看每一报文当前所处的状态。不论什么协议,客户端 第一次访问时,服务器会去内核内存中的追踪表查看他之前是否来过,查不到就证明是第一次来,记录入追踪表,如 果查到以前来过就不检查规则,直接允许访问,这称为连接追踪机制。在访问量特别大的场景下,比如负载均衡服务 器不建议开启,追踪表大只能记录6万多的条目,访问数超过就会无法记录出错,导致所有的连接失败。

    报文状态有五种:
    NEW: 第一次连接时
    ESTABLISHED:已建立的连接;
    INVALID:无法识别的连接;
    RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
    UNTRACKED:row表上关闭连接追踪功能

    ~]# iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值