iptables规则基本用法

简介:

iptables规则基本语法

iptables [-t table] option argu

  • table: 可选4表其中之一,raw,mangle,nat,filter,不指定默认为filter表

  • option:根据对规则的不同操作,可分为-N,-X,-E,-P,-F,-L,-Z,-A等

  • argu:根据选择的option的不同,所对应的参数也不同,下面会具体讲解


iptables规则详细解析

创建一条自定义的空规则链

iptables [-t table] -N chain_name

删除一条自定义的空规则链

iptables [-t table] -X [chain_name]

注:5大内置的主链不可删除;不指定链名,则会删除指定表中非内置的所有空链

修改自定义链名

iptables [-t table] -E old-chain-name new-chain-name

为链指定默认策略

iptables [-t table] -P chain_name target

注:target是ACCEPT或DROP


对链中的规则进行清空操作

iptables [-t table] -F [chain_name]

注:清空指定链中的所有规则;无chain_name参数时,则清空指定表中所有链的规则

对链中的规则进行显示操作

iptables [-t table] -L [chain_name [rulenum]] [options...]

注:显示指定链中的规则;一般都不指定chain_name参数,则会显示指定表中所有链的规则

配合options使用,可以获得更加详细的信息,如

  • -n:数字格式显示IP和PORT

  • -v:以详细格式显示

  • -vv,-vvv:以更加详细的格式显示

  • -x:显示精确值(如bytes的值),不执行单位换算

  • --line-numbers:显示各规则的编号,链中的规则依据编号顺序执行,编号为正整数并从1开始计数

详细显示格式图解

wKioL1M2hZyQRbeoAARvFi6dnYQ949.jpg

注:一般显示格式可简写为iptables -L -nv或iptables -nvL

对链中的规则进行计数器(如上图中的pkts或bytes参数)清零操作

iptables [-t table] -Z [chain_name [rulenum]]

注:可指定对链中的某一条规则计数器清零;也可不指定链名,则直接清零表中所有链的规则计数器

删除指定规则

iptables [-t table] -D chain_name rulenum

iptables [-t table] -D chain_name rule-specification

注:指定规则编号或规则的详细信息,一般都使用第一种,指定规则编号rulenum即可


显示指定链上的规则添加命令

iptables [-t table] -S [chain_name [rulenum]]

注:显示的是当初添加规则时使用的iptables命令,而非-L的显示格式;不指定链名,则显示指定表下所有链下规则的添加命令

插入规则

iptables [-t table] -I chain_name [rulenum] rule-specification

注:可指定规则编号,已将新的规则插入指定位置;若不指定规则编号,则新规则的编号将默认为1

修改规则

iptables [-t table] -R chain_name rulenum rule-specification

注:指定需修改规则的编号即可,rule-specification指定修改后的规则内容

附加规则

iptables [-t table] -A chain_name rule-specification

注:本命令是在指定链下规则队列的最后附加规则;若要指定规则添加的位置,则需使用插入命令-I

而规则的具体信息在于rule-specification的格式,详解如下


rule-specification规则说明

rule-specification=匹配条件 -j 处理机制

匹配条件:

通用匹配

  • -s:匹配源地址(单IP地址或者网络地址),等同于--src,--source

  • -d:匹配目标地址(单IP地址或者网络地址),等同于--dst,--destination

  • -p:匹配协议,通常使用{tcp | udp | icmp}其中之一

  • -i:匹配数据报文流入接口,如eth0

  • -o:匹配数据报文流出接口,如eth1

扩展匹配

隐含扩展匹配:使用-p {tcp | udp | icmp}后,自动能够对协议进行的扩展

-p tcp

  • --dport m[-n]:匹配目标端口,m表示单个端口,如80,m-n表示连续多个端口,如20-25

  • --sport m[-n]:匹配源端口

  • --tcp-flags rst,syn,ack,fin syn:匹配TCP Header中6个符号位(URG,ACK,PSH,RST,SYN,FIN)的值,第一组显示需匹配的符号位(此例中为rst,syn,ack,fin),第二组显示值为1的符号位(此例中为syn),其它都为0

-p udp

  • --dport m[-n]:匹配目标端口

  • --sport m[-n]:匹配源端口

  • 注:UDP是无状态的协议,故无符号位flags的匹配

-p icmp

  • --icmp-type:匹配icmp报文的类型,一般使用8代表PING请求,使用0代表PING应答


显示扩展匹配:必须要明确指定扩展的模块,格式为:-m 扩展模块名称 --选项1 --选项2 ...

multiport模块:多端口匹配,一次指定多个离散端口

  • --dports:目的端口匹配,等同于--destination-ports,如 --dports 53,80

  • --sports:源端口匹配,等同于--source-ports

  • 注:离散端口和端口范围可混用,如 --sports 23,80-100 ,但端口个数最好不要超过15个,端口范围计数为2个端口

iprange模块:IP地址范围匹配

  • --dst-range from[-to]:目标地址匹配,如 --dst-range 192.168.100.10-192.168.100.20

  • --src-range from[-to]:源地址匹配

time模块:时间范围匹配

  • --datestart,--datestop:日期时间匹配,日期时间格式为YYYY[-MM[-D[Thh[:mm[:ss]]]]],如--datestart 2014-03-29T12:05:00 --datestop 2014-03-30T08:00:00

  • --timestart,--timestop:仅时间匹配,时间格式为hh:mm[:ss],如 --timestart 14:05:00 --timestop 18:00:00

  • --weekdays day[,day...]:星期匹配,可使用Mon,Tue,Web,Thu,Fri,Sat,Sun表示星期,或用1-7表示,如--weekdays 1,2,3,4,5

string模块:字符串匹配(需linux kernel >= 2.6.14)

  • --algo {bm|kmp} --string pattern:先制定匹配算法bm或kmp,然后制定匹配模式,如 --algo bm --string hello,表示匹配带有hello字符串的报文

  • --algo {bm|kmp} --hex-string pattern:先将匹配模式编码成十六进制格式,再跟报文中的数据进行匹配,可提高匹配速度

connlimit模块:连接数限制匹配

  • --connlimit-above:单IP对指定服务的最大并发连接数,如 --connlimit-above 5

limit模块:报文传输速率限制(利用令牌桶token bucket原理)

  • --limit #[/second | /minute | /hour | /day]:如 --limit 5/s,默认是3/hour

  • --limit-burst:初始峰值

state模块:连接状态匹配

连接状态追踪原理

  • 在内存中维护一张会话表,记录进入的连接,并赋予每个连接条目一个计数器(即超时时间),当计数器为0时,清除出此会话表;

  • 当有新连接到来,对比此会话表,会话中无记录时,则此连接状态为NEW,否则为ESTABLISHED状态;

  • 若进来的新连接与已建立的连接有关联,如FTP中的数据连接对于命令连接来说,则此连接状态为RELATED

连接追踪功能涉及的内核模块:ip_conntrack和nf_conntrack

连接状态主要类型:NEW,ESTABLISHED,RELATED,INVALID

state模块用法--state {NEW|ESTABLISHED|RELATED|INVALID}

连接状态过滤法则

  • 对于进入的状态为ESTABLISHED和RELATED的连接都应该放行

  • 对于出去的状态为ESTABLISHED的连接都应该放行

  • 严格检查进入的状态为NEW的连接

  • 所有状态为INVALID的连接都应该拒绝

注:因iptables的state模块对于进出的报文都进行严格的状态匹配,非常消耗系统资源,故在繁忙的前端服务器(如反向代理服务器)上,勿开启此功能!


取反匹配

以上介绍的匹配条件,大部分都可以在匹配条件前加 ! 号,以表示匹配条件取反,格式是:! 匹配条件,注意感叹号后的空格


处理机制:

ACCEPT:报文接受

DROP:报文丢弃

自定义链名:调用自定义链,如 -j clean_in

RETURN:返回调用链,一般用于自定义链的末尾规则










本文转自 xxrenzhe11 51CTO博客,原文链接:http://blog.51cto.com/xxrenzhe/1386614,如需转载请自行联系原作者
目录
相关文章
|
数据采集 存储 测试技术
提升LabVIEW开发效率的技术与工具
提升LabVIEW开发效率的技术与工具
210 0
|
存储 缓存 负载均衡
【面试问题】Memcached 是什么,有什么作用?
【1月更文挑战第27天】【面试问题】Memcached 是什么,有什么作用?
|
5月前
|
测试技术 Python
Python 的 for-else 循环结构是如何工作的?
本文介绍了Python中不太为人熟知但实用的`for-else`循环结构。通过示例讲解了其工作原理:当`for`循环正常结束而未遇到`break`时,执行`else`块。文章提供了两个应用场景——检查素数和列表搜索,帮助理解如何高效使用该结构。最后提醒,若无需条件跳出循环,普通`for`循环已足够。
214 33
|
6月前
|
域名解析 网络协议 Linux
网络基础知识与配置
本文介绍了网络基础知识,涵盖网络概念、协议、拓扑结构及IP地址等内容。网络是由计算机设备通过通信线路连接而成的系统,用于资源共享与信息传递。文中详细解析了TCP/IP协议族(如IP、TCP、UDP)、常见应用层协议(如HTTP、FTP、SMTP、DNS)的功能与应用场景。同时,阐述了多种网络拓扑结构(总线型、星型、环型、树型、网状)的特点与优缺点。此外,还讲解了IP地址分类、子网掩码的作用,以及如何在Windows和Linux系统中配置网络接口、测试连通性(Ping、Traceroute)和查看默认网关与路由表的方法。这些内容为理解和管理计算机网络提供了全面的基础知识。
510 6
|
JavaScript
vue3筛选功能
vue3筛选功能
446 0
|
11月前
|
前端开发 JavaScript 测试技术
构建响应式Web应用程序:React实战指南
【10月更文挑战第9天】构建响应式Web应用程序:React实战指南
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】python之人工智能应用篇--跨模态生成技术
跨模态生成技术是一种将不同模态的数据(如文本、图像、音频、视频等)进行融合和转换的技术。其目标是通过将一个模态的数据作为输入,生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性,提高信息处理的准确性和丰富性具有重要意义。跨模态生成技术主要依赖于深度学习和生成模型,通过学习和模拟不同模态之间的映射关系来实现模态间的转换。
350 1
|
存储 Java
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
构造String问题之在JDK 9及更高版本中,直接访问String对象的coder和value属性,如何实现
125 0
|
存储 缓存 开发工具
git的几种实用操作(合并代码与暂存复原代码)
git的几种实用操作(合并代码与暂存复原代码)
351 1
git的几种实用操作(合并代码与暂存复原代码)