iptables的匹配条件

一、通用匹配:-s、-d、-p、-i、-o

二、扩展匹配

1、隐含扩展:使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行扩展

-p tcp

--dport m[-n]:匹配的目标端口,可以是连续的多个端口

--sport m[-n]:匹配的源端口,可以是连续的多个端口

--tcp-flags

URG,PSH,RST,SYN,ACK,FIN也可以使用ALL和NONE

--tcp-flags rst,syn,ack,fin syn 四个标志位中只有syn为1其他都为0的意思

放行来自于192.168.1.0/24网络的主机对本机ssh服务的请求

iptables -t filter -A INPUT -s 192.168.1.0/24 -d 192.168.1.202 -p tcp --dport 22 -j ACCEPT

iptables -t filter -A OUTPUT -s 192.168.1.202 -d 192.168.1.0/24 -p tcp -sport 22 -j ACCEPT

-p udp

放行本机tftp服务

iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.202 -p udp --dport 69 -j ACCEPT

iptables -A OUTPUT -s 192.168.1.202 -d 192.168.1.0/24 -p udp --sport 69 -j ACCEPT

-p icmp

--icmp-type

8:ping请求

0:ping响应

允许本机ping其他主机:

iptables -A INPUT -s 192.168.1.202 -p icmp --icmp-type 8 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.202 -p icmp --icmp-type 0 -j ACCEPT

允许其他主机ping本机:

iptables -A INPUT -d 192.168.1.202 -p icmp --icmp-type 8 -j ACCEPT

iptables -A OUTPUT -s 192.168.1.202 -p icmp -icmp-type 0 -j ACCEPT

2、显式扩展:必须要明确指定得扩展模块

-m 扩展模块名称 --专用选项1 --专用选项2

multiport:多端口匹配,一次指定多个(15个以内)离散端口

--source-ports,--sports port [,port|,port:port]

--destination-ports, --dports

--ports

例子:

# iptables -I INPUT -d 192.168.1.202 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 192.168.1.202 -p tcp -m multiport --sports 22:80 -j ACCEPT

iprange:ip地址范围

[!] --src-range from[-to]

[!] --dst-range from[-to]

例子:

# iptables -A INPUT -d 192.168.1.202 -p tcp --dport 23 -m iprange --src-range 192.168.1.1-192.168.1.200 -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 23 -m iprange --dst-range 192.168.1.1-192.168.1.200 -j ACCEPT

time:指定时间范围

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

[!] --weekdays day[,day...]

例子:指定8081端口的访问时间位周一至周五的八点到十八点

# iptables -A INPUT -d 192.168.1.202 -p tcp --dport 8081 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 8081 -j ACCEPT

string:字符串匹配

--algo {bm|kmp}:字符匹配查找时使用的算法

--string "STRING":要查找的字符串

--hex-string "HEXSTRING":要查找的字符,先编码成16进制格式

例子:拒绝页面中含有hello的页面

# iptables -I OUTPUT -s 192.168.1.202 -p tcp --sport 80 -m string --algo kmp --string "hello" -j DROP

connlimit:每IP对指定服务的最大并发连接数

[!] --connlimit-above n

例如:每个IP超过5个连接即拒绝掉

# iptables -I INPUT -d 192.168.1.202 -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP

limit:报文速率控制

--limit #[/second|/minute|/hour|/day]

--limit-burst number

例子:限制icmp包峰值为5个每秒只能通过两个

# iptables -A INPUT -d 192.168.1.202 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 5 -j ACCEPT

可以使用hping3做测试,每秒钟发送多个icmp请求

使用watch命令可以看到防火墙的数据包实时变化

# watch -n 1 'iptables -L -nv'

state:状态匹配(只要是四层协议都能够基于state做追踪)

ip_conntract,nf_conntrack

--state

NEW:NEW说明这个包是我们看到的第一个包

ESTABLISHED:ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。

RELATED:一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。

INVALID:INVALID说明数据包不能被识别属于哪个连接或没有任何状态。

调整连接追踪功能所有能容纳的追踪的追踪最大连接数:

# cat /proc/sys/net/nf_conntrack_max 定义了连接追踪的最大值,按需调整该值

# less /proc/net/nf_conntrack 记录了当前追踪的所有连接

# cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established tcp的established的超时时间

法则:

(1)、对于进入的状态为ESTABLISHED都应该放行

(2)、对于出去的状态为ESTABLISHED都应该放行

(3)、严格检查进入的状态为NEW的连接

(4)、所有状态为INVALIED都应该拒绝

如何放行工作与被动模式下的FTP服务?

确保iptables加载ftp协议支持的模块:ip_nat_ftp,ip_conntrack_ftp

手动装载:

# modprobe ip_nat_ftp

# modprobe ip_conntrack_ftp

添加到配置文件自动装载:

编辑配置文件:

# vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

放行请求报文的RELATED和ESTABLISHED状态,放行响应报文的ESTABLISHED状态

ftp放行20、21端口

# iptables -A INPUT -d 192.168.1.202 -p tcp --dport 22 -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 22 -j ACCEPT

# iptables -P OUTPUT DROP

# iptables -P INPUT DROP

# iptables -A INPUT -d 192.168.1.202 -p tcp --dport 21 -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 21 -j ACCEPT

# iptables -A INPUT -d 192.168.1.202 -p tcp --dport 20 -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 20 -j ACCEPT

# iptables -A INPUT -d 192.168.1.202 -p tcp -m state --state RELAY,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp -m state --state ESTABLISHED -j ACCEPT

# iptables -I INPUT -d 192.168.1.202 -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -I INPUT 2 -d 192.168.1.202 -p tcp -m state --state NEW -m multiport --dports 9001,80,21,22 -j ACCEPT

# iptables -I OUTPUT -s 192.168.1.202 -m state --state ESTABLISHED -j ACCEPT

# iptables -D INPUT 3

# iptables -D INPUT 3

# iptables -D INPUT 3

# iptables -D OUTPUT 2

# iptables -D OUTPUT 2

# iptables -D OUTPUT 2

最终的规则就是:

-A INPUT -d 192.168.1.202/32 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -d 192.168.1.202/32 -p tcp -m state --state NEW -m multiport --dports 9001,80,21,22 -j ACCEPT

-A OUTPUT -s 192.168.1.202/32 -m state --state ESTABLISHED -j ACCEPT

-j target

ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNAT,MASQUERADE,MARK,RTURN,自定义链

例如:

# iptables -A INPUT -d 192.168.1.202 -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.1.202 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

添加自定链,过滤恶意数据包(标志位全为0或1):

# iptables -t filter -N clean_in

# iptables -A clean_in -d 192.168.1.202 -p tcp --tcp-flags ALL ALL -j DROP

# iptables -A clean_in -d 192.168.1.202 -p tcp --tcp-flags ALL NONE -j DROP

# iptables -A clean_in -d 192.168.1.255 -p icmp -j DROP

# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

# iptables -A clean_in -d 192.168.1.202 -j RETURN

# iptables -I INPUT -d 192.168.1.202 -j clean_in

拒绝状态为INVALID

# iptables -I clean_in 5 -d 192.168.1.202 -m state --state INVALID -j DROP

iptables的扩展匹配的更多相关文章

  1. Linux防火墙之iptables常用扩展匹配条件(一)

    上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ...

  2. Linux防火墙之iptables常用扩展匹配条件(二)

    上一篇博文我们讲到了iptables的一些常用的扩展匹配模块以及扩展模块的一些选项的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12273755.htm ...

  3. iptables 扩展匹配 第三章

    获取帮助: centos 6 :man iptables centos 7: man iptables-extensions 扩展匹配: 隐式扩展:当使用-p指定某一协议之后,协议自身所支持的扩展就叫 ...

  4. iptables详解(6):iptables扩展匹配条件之’–tcp-flags’

    如果你看过前文,那么你一定知道,前文已经对"tcp扩展模块"做过总结,但是只总结了tcp扩展模块中的"--sport"与"--dport"选 ...

  5. Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件

    一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...

  6. linux防火墙(三)—— iptables语法之匹配条件

    一.iptables规则的匹配条件类型有三类 1.通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议.IP地址.网络接口等条件 2.隐含匹配:要求以特定的协议匹配作为前提,包括端口.TCP标记 ...

  7. centos6.5下系统编译定制iptables防火墙扩展layer7应用层访问控制功能及应用限制QQ2016上网

    iptables防火墙扩展之layer7应用层访问控制 概述: iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以基于网络层的数据包过滤机制为主,同 ...

  8. 四十七.iptables防火墙 filter表控制 扩展匹配 nat表典型应用

    1.iptables基本管理 关闭firewalld,开启iptables服务 查看防火墙规则 追加.插入防火墙规则 删除.清空防火墙规则   1.1 关闭firewalld,启动iptables服务 ...

  9. 4、iptables扩展匹配及网络防火墙功能

    关于centos7   firewalld    http://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html 如何保存及重载规则: ...

随机推荐

  1. Bash shell的内建命令:type

    type指令是用来观察指令时来自于外部指令还是内建在bash中的指令. type  [-tpa]  name 选项与参数: :不加任何选项与参数时,type会显示出name是外部指令还是bash内建指 ...

  2. jdbc基本查询方法

    jdbc操作数据库时,最基本的三种接口是Statement PreparedStatment  CallableStatement (1)Statement createStatement() cre ...

  3. java基础之 超类Object

    一.概述:       Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要 ...

  4. java多线程系列之 synchronized

    一.synchronized基本原理 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁. ...

  5. 火狐和IE浏览器的兼容问题汇总

    1.window.event code=(navigator.appName="Netscape")?event.which:event.keycode; 2.event.x mx ...

  6. oracle 用户创建这个挺靠谱

    CREATE TEMPORARY TABLESPACE test_tempTEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf ...

  7. C# lambda表达式(简单易懂)

    前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一 ...

  8. 颜色代码表#FFFFFF #FF0000 #00FF00 #FF00FF (2015-07-21 10:39)转载

    ▼标签: 颜色代码表 白色 ffffff 红色 ff0000 黑色 000000 it     分类: hht1 白色 #FFFFFF 2 红色 #FF0000 3 绿色 #00FF00 4 蓝色 # ...

  9. Selenium简介(二)--基于CORE/IDE的简单应用

    参考  http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍  http://blog.csdn.net/iam ...

  10. delphi里动态创建AlphaControls实现换肤

    AlphaControls是一套Delphi下的优秀的皮肤vcl控件.几年前,一般用得比较多的是vclskin,使用很方便,可惜这套2010年已经停止维护了.后来就看到更多的人开始推崇AlphaCon ...