iptables 扩展匹配 第三章
获取帮助:
centos 6 :man iptables
centos 7: man iptables-extensions
扩展匹配:
隐式扩展:当使用-p指定某一协议之后,协议自身所支持的扩展就叫做隐式扩展、使用[tcp|udp|icmp]指定某特定协议后、自动能对协议进行扩展。可省略 -m 选项
- -p tcp
- --dport PORT [-PORT];目标端口匹配
- --sport PORT [-PORT] :源端口
- --tcp-flags:
- SYN ,ACK ,FIN ,RST ,PSH ,URG
- --syn : #简写,新建链接时第一次请求
- -p udp
- --dport
- --sport
- -p icmp
- --icmp-type
- : echo-reply
- : echo-request
- #只允许本机ping ,不响应 ping 包
- iptables -I INPUT -d 192.168.100.230 -p icmp --icmp-type -j ACCEPT
- [root@nginx etc]# iptables -I INPUT -d 10.2.61.22 -p tcp --dport 22 -j ACCEPT
- [root@nginx etc]#
- [root@nginx etc]# iptables -I OUTPUT -s 10.2.61.22 -p tcp --sport 22 -j ACCEPT
- [root@nginx etc]# iptables -L -n -v
- Chain INPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt:
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22
- ACCEPT all -- ens192 * 0.0.0.0/ 0.0.0.0/
- Chain FORWARD (policy ACCEPT packets, bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ tcp spt:
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/
- ACCEPT all -- * ens192 0.0.0.0/ 0.0.0.0/
- [root@nginx etc]# iptables -I INPUT -d 10.2.61.22 -p tcp --dport 22:8080 -j ACCEPT #多个端口
- [root@nginx etc]# iptables -A INPUT -d 10.2.61.22 -p icmp --icmp-type -j ACCEPT #INPUT 允许应答报文 ,只能自己ping 别人,不响应ping
- [root@nginx etc]# iptables -A OUTPUT -s 10.2.61.22 -p icmp --icmp-type -j ACCEPT #OUTPUT 允许请求报文
显示扩展:必须要明确指定的扩展模块
-m
- 1.multiport 扩展
- .multiport 扩展
- 以离散方式定义多端口匹配,最多15 个端口
- [!] --source-ports,--sports port[,port|,port:port]...#指明多个源端口
- [!] --destination-ports,--dports port[,port|,port:port]...#指明多个目标端口
- [!] --ports port[,port|,port:port]... #同时匹配源和目的端口
- 列子: 同时限制22, 端口
- iptables -I INPUT -s 192.168.0.0/ -d 192.168.100.230 -p tcp -m multiport --dports , -j ACCEPT
- [root@nginx /]# iptables -I INPUT -d 10.2.61.22 -p tcp -m multiport --dports 22,80 -j ACCEPT
- [root@nginx /]# iptables -L -n
- Chain INPUT (policy DROP)
- target prot opt source destination
- ACCEPT tcp -- 0.0.0.0/ 10.2.61.22 multiport dports ,80
- [root@nginx /]# iptables -I OUTPUT -s 10.2.61.22 -p tcp -m multiport --sports 22,80 -j ACCEPT
- [root@nginx /]# iptables -L -n -v
- Chain INPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports ,
- 192K ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpts::
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt:
- ACCEPT icmp -- * * 0.0.0.0/ 10.2.61.22 icmptype
- Chain FORWARD (policy ACCEPT packets, bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- 4 544 ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/0 multiport sports 22,80
- 463K ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ tcp spt:
- ACCEPT icmp -- * * 10.2.61.22 0.0.0.0/ icmptype
- [root@nginx /]#
2.iprange 扩展
- .iprange 扩展
- 指明连续的IP 地址范围 ,一般不能扩展为整个网络
- [!] --src-range from[-to] #连续的源地址范围
- [!] --dst-range from[-to] #连续的目的地址范围
- iptables -I INPUT -d 192.168.100.230 -p tcp -m multiport --dports :,, -m iprange --src-range 192.168.100.2-192.168.100.199 -j ACCEPT
- iptables -I OUTPUT -s 192.168.100.230 -p tcp -m multiport --sports :,, -m iprange --dst-range 192.168.100.2-192.168.100.199 -j ACCEPT
- [root@nginx ~]# iptables -I INPUT -d 10.2.61.22 -p tcp -m multiport --dports 8080,8090 -m iprange --src-range 10.2.61.1-10.2.61.100 -j ACCEPT #地址范文在一个 C 段中
- [root@nginx ~]# iptables -I OUTPUT -s 10.2.61.22 -p tcp -m multiport --sports 8080,8090 -m iprange --dst-range 10.2.61.1-10.2.61.100 -j ACCEPT
3.string 扩展
- .string 扩展
- 检查报文中出现的字符串
- --algo {bm|kmp}
- bm = Boyer-Moore,
- kmp = Knuth-Pratt-Morris
- --from offset #左偏移
- --from offset #右偏移
- [!] --string pattern
- iptables -I OUTPUT -m string --algo bm --string 'test' -j LOG
- iptables -A INPUT -p tcp --dport -m string --algo bm --string 'GET /index.html' -j LOG
- iptables -I OUTPUT -s 192.168.100.150 -m string --algo bm --string 'test' -j REJECT
- [root@nginx ~]# iptables -I INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /' -j LOG
- [root@nginx ~]# tail -f /var/log/messages
- Feb :: nginx systemd-logind: New session of user root.
- Feb :: nginx systemd: Starting Session of user root.
- Feb :: nginx systemd: Started Session of user root.
- Feb :: nginx systemd: Starting Session of user root.
- Feb :: nginx systemd-logind: Removed session .
- Feb :: nginx systemd: Started Session of user root.
- Feb :: nginx systemd-logind: New session of user root.
- Feb :: nginx systemd: Starting Session of user root.
- Feb 19 03:53:52 nginx kernel: IN=ens192 OUT= MAC=00:0c:29:a9:72:71:00:0c:29:73:98:2f:08:00 SRC=10.2.61.21 DST=10.2.61.22 LEN=114 TOS=0x00 PREC=0x00 TTL=64 ID=59396 DF PROTO=TCP SPT=36804 DPT=80 WINDOW=229 RES=0x00 ACK PSH URGP=0
- Feb 19 03:56:36 nginx kernel: IN=ens192 OUT= MAC=00:0c:29:a9:72:71:00:0c:29:73:98:2f:08:00 SRC=10.2.61.21 DST=10.2.61.22 LEN=114 TOS=0x00 PREC=0x00 TTL=64 ID=7382 DF PROTO=TCP SPT=36806 DPT=80 WINDOW=229 RES=0x00 ACK PSH URGP=0
4.time 扩展 :定时执行策略
- .time 扩展 :定时执行策略
- -m time --weekdays Sa,Su
- -m time --datestart -- --datestop --
- -m time --datestart --01T17: --datestop --01T23::
- -m time --timestart : --timestop :
- -m time --weekdays Fr --monthdays ,,,,,,
- -m time --weekdays Mo --timestart : --timestop :
- --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] #起始日期
- --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] #结束日期
- #限制在某个时间段内拒绝某些请求
- iptables -IINPUT -d 192.168.100.230 -p tcp --dport -m time --timestart : --timestop : -j REJECT
- #一周内固定时间限制
- iptables -I FORWARD -s 172.17.1.132 -d 192.168.1.119 -m time --timestart : --timestop : --weekdays Wed,Thu -j DROP
- [root@nginx ~]# iptables -I INPUT -p tcp -d 10.2.61.22 --dport 80 -m time --timestart 20:00 --timestop 06:00 -j REJECT #晚上八点早上6点禁止访问
5.connlimit #并发连接限制 ,单个地址或者地址块
- [!] --connlimit-above n #链接上限
- --connlimit-upto n #链接数量小于 n
- iptables -A INPUT -p tcp --syn --dport -m connlimit --connlimit-above -j REJECT
- iptables -I INPUT -d 192.168.100.230 -p tcp --syn --dport -m connlimit --connlimit-above -j REJECT
- [root@nginx ~]# iptables -L -n -v
- Chain INPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- 3 152 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 #conn src/32 > 3 reject-with icmp-port-unreachable
- ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt:
- REJECT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt: TIME from :: to :: UTC reject-with icmp-port-unreachable
- REJECT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt: TIME from :: to :: UTC reject-with icmp-port-unreachable
- LOG tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt: STRING match "GET /" ALGO name bm TO LOG flags level
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.0.0.1-10.0.0.255
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports : source IP range 10.0.0.1-10.0.0.255
- tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports
- ACCEPT icmp -- * * 0.0.0.0/ 10.2.61.22 icmptype
- Chain FORWARD (policy ACCEPT packets, bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.0.0.1-10.0.0.255
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports : destination IP range 10.0.0.1-10.0.0.255
- 586K ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports ,
- 463K ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ tcp spt:
- ACCEPT icmp -- * * 10.2.61.22 0.0.0.0/ icmptype
- [root@nginx ~]# iptables -I INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT #限制ssh 新建链接数量为3 ,首先需要有放行的策略 ,否则拒绝了 -.-
[root@nginx ~]# iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT #插入序号为1 的规则
6.limit 扩展
- 基于收发报文的速率做检查
- 令牌桶过滤器:
- --limit rate[/second|/minute|/hour|/day]
- --limit-burst number #限制超过这个值 策略开始进行匹配计数
- iptables -A INPUT -d 192.168.100.230 -p icmp --icmp-type -m limit --limit-burst --limit /minute -j ACCEPT
#限制 icmp ping 包峰值 5 个 ,每分钟30 个。
7.state 扩展
- 根据链接追踪机制检查链接的状态
- 调整链接追踪功能所能容纳的最大链接数量
- /proc/sys/net/nf_conntrack_max #追踪链接的最大限制
- cat /proc/net/nf_conntrack #追踪信息
- #不同协议或链接的追踪时长
- /proc/sys/net/netfilter/
[root@nginx ~]# cat /proc/sys/net/netfilter/nf_conntrack_max #centos7 查看链接追中最大限制
65536
- 可追踪的链接状态:
- NEW :新发出的请求,链接追踪模板中不存在此链接的相关信息,因此识别为第一次发起的请求
- ESTABLISHED :NEW 状态后,链接追踪模板中为其建立的条目失效前期间所进行的通信状态
- RELATED :相关的链接,如ftp 协议的命令链接和数据链接的关系叫做相关链接
- INVALIDE :无法识别的链接
- --state state
- --state STATE1,STATE2
- iptables -I INPUT -p tcp -d 192.168.100.230 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#对于访问本机的80 端口 ,只允许NEW 和ESTABLISHED 状态链接,访问 对于 80 端口的回应只允许回应ESTABLISHED
- [root@nginx ~]# iptables -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
- [root@nginx ~]# iptables -I OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
- [root@nginx ~]# iptables -L -n -v
- Chain INPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED
- ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt: state NEW,ESTABLISHED
- 129K ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt:
- REJECT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt: flags:0x17/0x02 #conn src/ > reject-with icmp-port-unreachable
- REJECT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt: TIME from :: to :: UTC reject-with icmp-port-unreachable
- REJECT tcp -- * * 0.0.0.0/ 10.2.61.22 tcp dpt: TIME from :: to :: UTC reject-with icmp-port-unreachable
- LOG tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt: STRING match "GET /" ALGO name bm TO LOG flags level
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports , source IP range 10.0.0.1-10.0.0.255
- ACCEPT tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports : source IP range 10.0.0.1-10.0.0.255
- tcp -- * * 0.0.0.0/ 10.2.61.22 multiport dports
- ACCEPT icmp -- * * 0.0.0.0/ 10.2.61.22 icmptype
- ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp dpt:
- ACCEPT icmp -- * * 0.0.0.0/ 192.168.100.230 icmptype limit: avg /min burst
- ACCEPT icmp -- * * 0.0.0.0/ 10.2.61.22 icmptype limit: avg /min burst
- Chain FORWARD (policy ACCEPT packets, bytes)
- pkts bytes target prot opt in out source destination
- Chain OUTPUT (policy DROP packets, bytes)
- pkts bytes target prot opt in out source destination
- 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED
- ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp spt: state ESTABLISHED
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.2.61.1-10.2.61.100
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports , destination IP range 10.0.0.1-10.0.0.255
- ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports : destination IP range 10.0.0.1-10.0.0.255
- 899K ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ multiport sports ,
- 463K ACCEPT tcp -- * * 10.2.61.22 0.0.0.0/ tcp spt:
- ACCEPT icmp -- * * 10.2.61.22 0.0.0.0/ icmptype
- ACCEPT icmp -- * * 0.0.0.0/ 0.0.0.0/
- [root@nginx ~]# iptables -L -n --line-number
- Chain INPUT (policy DROP)
- num target prot opt source destination
- 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED #iptables 规则匹配从上往下,NEW 状态第一次,把 ESTABLISHED 放在第一位增加后续访问的命中率,提升速度
- ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ tcp dpt: state NEW
- ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ multiport dports ,,, state NEW
- ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/ icmptype
- ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/ icmptype
- Chain FORWARD (policy ACCEPT)
- num target prot opt source destination
- Chain OUTPUT (policy DROP)
- num target prot opt source destination
- 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED #OUTPUT 规则中允许进入的数据就允许出去,
- ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/ icmptype
- [root@nginx ~]#
iptables 扩展匹配 第三章的更多相关文章
- iptables详解(6):iptables扩展匹配条件之’–tcp-flags’
如果你看过前文,那么你一定知道,前文已经对"tcp扩展模块"做过总结,但是只总结了tcp扩展模块中的"--sport"与"--dport"选 ...
- 4、iptables扩展匹配及网络防火墙功能
关于centos7 firewalld http://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html 如何保存及重载规则: ...
- Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件
一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...
- Linux防火墙之iptables常用扩展匹配条件(一)
上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ...
- iptables的扩展匹配
iptables的匹配条件 一.通用匹配:-s.-d.-p.-i.-o 二.扩展匹配 1.隐含扩展:使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行扩展 -p tcp --dp ...
- Linux防火墙之iptables常用扩展匹配条件(二)
上一篇博文我们讲到了iptables的一些常用的扩展匹配模块以及扩展模块的一些选项的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12273755.htm ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第三章 查询 前一章,我们展示了常见数据库场景的建模方式,本章将向你展示如何查询实体 ...
- 《Linux命令行与shell脚本编程大全》 第三章 学习笔记
第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户 ...
随机推荐
- Python学习之旅(七)
Python基础知识(6):基本数据类型之列表 在Python中,最基本的数据结构是序列.序列中的每个元素被分配一个序号——即元素的位置,也称为索引.第一个索引从0开始,如果要从右边开始,序列中的最后 ...
- 修复ubuntu引导
1. 插入ubuntu光盘启动临时ubuntu 2. ctrl alt t 进入命令行 3. 过程如下
- WebH
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- 【立体几何】Journey to Jupiter Gym - 101991J 立体几何模板
https://cn.vjudge.net/problem/Gym-101991J 题目很长,其实就是给你一个正三角形,并且告诉你它的中点在Z轴上以及法向量,边长和顶点A的坐标(自由度已定),让你求A ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 解决adb:error: unknown host service
1.在使用adb命令跑程序时出现adb: error: failed to get feature set: unknown host service 输入adb shell 时提示error: un ...
- JQuery插件之【jqGrid】常用语法整理
jqGrid常用语法整理,包含数据获取.常用函数.触发事件等 jqGrid表格数据获取相关语法 获取表格所有数据 $("#grid").jqGrid("getRowDat ...
- 解决Kettle ETL数据乱码
首先用insert语句插入一条数据试试是否因为MySQL编码不对引起,如果是MySQL原因,修改MySQL编码即可: 如果不是因为MySQL的编码导致问题,那么在Kettle的表输出中,编辑连接-选项 ...
- 漫画HDFS工作原理(转)
转自:http://blog.csdn.net/netcoder/article/details/7442779?locationNum=2 对漫画内容更好的解读,可参考: http://www.we ...
- Ch03 数组相关操作 - 练习
1. 编写一段代码,将a设置为一个n个随机数的数组,要求随机数介于0(包含)和n(不包含)之间. //import java.lang.Math def getArray(n:Int)={ val ...