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. static的作用

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...

  2. linux配置网卡绑定

    1.确定好要绑定的那两个网口 我这边要绑定的是两个业务口  em2.em3 2.配置ifcfg-bond0.em2.em3 3.修改配置文件/etc/modprcode.d/disk.conf 底部添 ...

  3. It will affect staff as well.

    Premier Foods has reduced its number of suppliers dramatically in the last 12 months. In 2013 it mad ...

  4. Android中的onActivityResult和setResult方法的使用

    如果你想在Activity中得到新打开Activity关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intent intent,int requestCode)方 ...

  5. JRE JDK JVM是什么

    jre: Java Runtime Environment java运行环境 ----------------------------------------- jdk:Java Developmen ...

  6. jquery ajax详解

    详细参数列表url:发送请求的连接地址type:请求方式 get:获取 post:发送 put和deletetimeout:设置请求超时时间async:默认true为异步请求,false同步请求锁住浏 ...

  7. php实现函数重载

    java..net等强类型预言中都有方法重载,但是PHP是弱类型语言,不能确定参数的类型, 而且如果php定义的方法接收一个参数,调用的时候传入多个也不会有问题,所以不能进行重载. 但是我们可以通过p ...

  8. 1Caesar加密

    Julius Caesar发明的较早的加密术,举个例子: 明文: meet me after the toga party 密文:   PHHW PH DIWHU WKH WRJD SDUWB 其实就 ...

  9. 【C】制作简单的时钟减法程序

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define ARGC_NUM 3 #def ...

  10. layer弹框

    官网http://layer.layui.com/ /!*如果是页面层*/layer.open({ type: 1, content: '传入任意的文本或html' //这里content是一个普通的 ...