<返回更多

iptables 命令实战详解

2022-08-17  今日头条  技术瘾君子
加入收藏

一.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

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

raw

PREROUTING, OUTPUT

mangle

PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat

REROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,
centos6中没有)

filter

INPUT,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选项指明要调用的扩展模块的扩展机制;

显示扩展:

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

string扩展模块

使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。

-m string:表示使用string扩展模块

–algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但 是我们必须指定一个。

–string:用于指定需要匹配的字符串

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

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

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

limit扩展模块

limit模块对"报文到达速率"进行限制,我们可以以秒为单位进行限制,也可以以分钟、小时、天作为单位进行限

制。

–limit限制比较有意思,主要用来限制单位时间内可以流入的数据包的数量。

使用"–limit"选项时,可以选择的时间单位有多种,如下 /second /minute /hour /day

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

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 #匹配第二次握手

state扩展

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

报文状态有五种:

NEW: 第一次连接时

ESTABLISHED:已建立的连接;

INVALID:无法识别的连接;

RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接

UNTRACKED:row表上关闭连接追踪功能

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

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>