iptables只是Linux防火墙的管理工具而已。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables具体是如何去过滤各种规则的呢?请看下面的四表五链

四表五链概念

  • filter表——过滤数据包
  • Nat表——用于网络地址转换(IP、端口)
  • Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • Raw表——决定数据包是否被状态跟踪机制处理
  • INPUT链——进来的数据包应用此规则链中的策略
  • OUTPUT链——外出的数据包应用此规则链中的策略
  • FORWARD链——转发数据包时应用此规则链中的策略
  • PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包

iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw-->mangle-->nat-->filter

一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查

wKiom1fD9SHiFulVAAFG31wO9vs466.png

小结一下:

wKioL1fD-LzQLXN1AACb9oWWVug429.png

数据包先经过PREOUTING,由该链确定数据包的走向:

1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;

2、若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥

主机发送数据包时,流程则是⑤—>⑥

iptables安装配置

linux一般默认都已经安装iptables,只需要开启服务即可:service iptables start

iptables规则书写

基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]

说明 支持的链
raw 一般是为了不再让iptables对数据包进行跟踪,提高性能 PREROUTING、OUTPUT
mangle 对数据包进行修改 五个链都可以
nat 进行地址转换 PREROUTING、OUTPUT、POSTROUTING
filter(默认) 对包进行过滤 INPUT、FORWARD、OUTPUT

常用操作命令

说明
-A 在指定链尾部添加规则
-D 删除匹配的规则
-R 替换匹配的规则
-I

在指定位置插入规则

例:iptables -I INPUT 1 --dport 80 -j ACCEPT

(将规则插入到filter表INPUT链中的第一位上)

-L/S 列出指定链或所有链的规则
-F

删除指定链或所有链的规则

-N

创建用户自定义链

例:iptables -N allowed

-X

删除指定的用户自定义链

-P

为指定链设置默认规则策略,对自定义链不起作

例:iptables -P OUTPUT DROP

-Z 将指定链或所有链的计数器清零
-E

更改自定义链的名称

例:iptables -E allowed disallowed

-n

ip地址和端口号以数字方式显示

例:iptables -Ln

常见规则匹配器 说明
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
--sport port1[:port2] 匹配源端口(可指定连续的端口)
--dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface

匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0

-i interface

匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。

--icmp-type  匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)
--tcp-flags mask comp

匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。

例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT

(表示匹配SYN和ACK标记的数据包)

目标动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方
SNAT

源地址转换(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1

DNAT

目标地址转换(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT

目标端口转换(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK

将数据包打上标记

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要点:

1、目标地址转换一般在PREROUTING链上操作

2、源地址转换一般在POSTROUTING链上操作

保存和恢复iptables规则

使用iptables-save可以保存到特定文件中

1

    iptables-save >/etc/sysconfig/iptables_save

使用iptables-restore可以恢复规则

1

    iptables-restore</etc/sysconfig/iptables_save

iptables的进阶使用

1、limit限制流量:

-m limit --limit-burst 15        #设置一开始匹配的最���数据包数量

-m limit --limit 1000/s            #设置最大平均匹配速率

-m limit --limit 5/m --limit-burst 15     #表示一开始能匹配的数据包数量为15个,每匹配到一个,

limit-burst的值减1,所以匹配到15个时,该值为0,以后每过

12s,limit-burst的值会加1,表示又能匹配1个数据包

例子:

1
2

iptables -A INPUT -i eth0 -m limit --limit 5/m --limit-burst 15 -j ACCEPT 
iptables -A INPUT -i eth0 -j DROP

注意要点:

1、--limit-burst的值要比--limit的大

2、limit本身没有丢弃数据包的功能,因此,需要第二条规则一起才能实现限速的功能

2、time :在特定时间内匹配

-m time  说明
--monthdays day1[,day2] 在每个月的特定天匹配
--timestart hh:mm:ss 在每天的指定时间开始匹配
--timestop hh:mm:ss 在每天的指定时间停止匹配
--weekdays day1[,day2] 在每个星期的指定工作日匹配,值可以是1-7

例子:

1
2

iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPT
iptables -A INPUT -i eth0 -j DROP

3、ttl:匹配符合规则的ttl值的数据包

参数 说明
--ttl-eq 100 匹配TTL值为100的数据包
--ttl-gt 100 匹配TTL值大于100的数据包
--ttl-lt 100 匹配TTL值小于100的数据包

例子:

1

iptables -A OUTPUT -m ttl --ttl-eq 100 -j ACCEPT

4、multiport:匹配离散的多个端口

参数 说明
--sports port1[,port2,port3] 匹配源端口
--dports port1[,port2,port3] 匹配目的端口
--ports port1[,port2,port3] 匹配源端口或目的端口

例子:

1

iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP

5、state:匹配指定的状态数据包

参数 说明
--state value value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)

例子:

1

iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

6、mark:匹配带有指定mark值的数据包

参数 说明
--mark value 匹配mark标记为value的数据包

例子:

1

iptables -t mangle -A INPUT -m mark --mark 1 -j DROP

7、mac:匹配特定的mac地址

例子:

1

iptables -A FORWARD -m mac --mac-source 00:0C:24:FA:19:80 -j DROP

转载于:https://www.cnblogs.com/jinxuan/p/7513681.html

防火墙--iptables相关推荐

  1. Linux下防火墙iptables用法规则详及其防火墙配置

    原博主文章更美丽: http://www.cnblogs.com/yi-meng/p/3213925.html iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国 ...

  2. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  3. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  4. 共创Linux防火墙,Linux防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  5. CentOS6.7防火墙(Iptables)的开启与关闭

    Linux防火墙(iptables)的开启与关闭 . Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig i ...

  6. linux防火墙策略文件夹,Linux防火墙iptables的策略

    iptables策略 iptables -L #查看现有防火墙所有策略 iptables -F #清除现有防火墙策略 只允许特定流量通过,禁用其他流量 1.允许SSH流量(重要) iptables - ...

  7. linux防火墙--iptables(三)

    七.SNAT源地址转换 ·Source Network Address Translation ·修改数据包的源地址 ·仅用于nat表的POSTROUTING链 Example:局域网共享公网IP上网 ...

  8. linux 防火墙 iptables的简单使用

    linux 防火墙 iptables的简单使用 [root@web web]# uname -a Linux web 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 ...

  9. linux防火墙ip黑名单,【转】Linux防火墙(iptables)之黑名单

    iptables删除规则 So if you would like to delete second rule : iptables -D INPUT 2 ---------------------- ...

  10. Linux完全清除防火墙策略,linux下的软件防火墙iptables——规则的查看与清除、定义默认策略,...

    linux下的软件防火墙iptables--规则的查看与清除.定义默认策略软件防火墙IPTABLES --规则在Linux下查看和清除,定义默认策略,防火墙意味着用户限制某些ip或用户对其主机的访问. ...

最新文章

  1. 美多商城之支付(支付宝介绍)
  2. 秒懂 CountDownLatch 与 CyclicBarrier 使用场景
  3. Winform中使用NPOI实现Excel导入并赋值给DataTable
  4. OpenCV微笑探测器smile detector的实例(附完整代码)
  5. 敏捷软件开发(Agile Software Development)简介之:什么是敏捷软件开发?
  6. python wav模块获取采样率, 采样点,声道,量化位数和时间
  7. Leet Code OJ 8. String to Integer (atoi) [Difficulty: Easy]
  8. am5718_基于TI AM5718 车牌识别系统解决方案 - 飞凌嵌入式行业资讯 - 保定飞凌嵌入式技术有限公司...
  9. tomcat(17)启动tomcat
  10. Qt 编码问题QTextCodec
  11. pytorch学习1:pytorch 定义网络的方式
  12. jquery 获取日期时间
  13. Python图像纹理分割
  14. ArcGIS案例学习笔记_3_2_CAD数据导入建库
  15. Google Cloud资源层级, IAM Identity and Access Management, 控制台云交互
  16. 使用esp32-s2模拟实现usb多点触摸
  17. mc:Ignorable=“d“什么意思?
  18. MFC无边框窗体设置窗口圆角,并且绘制边框
  19. IM即时通讯开发,聊天软件APP搭建,私有云部署
  20. HTTP 必备干货学习,一篇HTTP入门 不收藏都可惜!

热门文章

  1. java接收rowtype类型_Java PhysType.getJavaRowType方法代码示例
  2. 【ES6(2015)】String
  3. 编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...
  4. Java笔记-多线程相关
  5. Niginx工作笔记-通过error.log定位错误(记录一个寻找问题的方法)
  6. Redis工作笔记-String类型
  7. C++笔记-使用sprintf把各个类型转成char*(long long, doule,int)
  8. Qt工作笔记-对connect的第五个参数的研究
  9. Qt多线程-QThreadPool线程池与QRunnable
  10. python函数能返回列表吗_Python函数返回列表还是作为生成器工作?