iptables超全详解 http://www.linuxidc.com/Linux/2016-09/134832.htm
来源:互联网 发布:怎么开淘宝天猫店 编辑:程序博客网 时间:2024/04/27 15:21
转载地址:http://www.linuxidc.com/Linux/2016-09/134832.htm
iptables超全详解
前提基础:
当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据包
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw-->mangle-->nat-->filter
一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查
(图片来源网络)
小结一下~~~
数据包先经过PREOUTING,由该链确定数据包的走向:
1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;
2、若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥
主机发送数据包时,流程则是⑤--->⑥
iptables安装配置
linux一般默认都已经安装iptables,只需要开启服务即可
service iptables start
iptables规则书写
基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]
表说明支持的链raw一般是为了不再让iptables对数据包进行跟踪,提高性能PREROUTING、OUTPUTmangle对数据包进行修改五个链都可以nat进行地址转换PREROUTING、OUTPUT、POSTROUTINGfilter(默认)对包进行过滤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
-nip地址和端口号以数字方式显示
例: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可以保存到特定文件中
iptables-save >
/etc/sysconfig/iptables_save
使用iptables-restore可以恢复规则
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个数据包
例子:
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例子:
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的数据包例子:
iptables -A OUTPUT -m ttl --ttl-
eq
100 -j ACCEPT
4、multiport:匹配离散的多个端口
参数说明--sports port1[,port2,port3]匹配源端口--dports port1[,port2,port3]匹配目的端口--ports port1[,port2,port3]匹配源端口或目的端口例子:
iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP
5、state:匹配指定的状态数据包
参数说明--state valuevalue可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)例子:
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
6、mark:匹配带有指定mark值的数据包
参数说明--mark value匹配mark标记为value的数据包例子:
iptables -t mangle -A INPUT -m mark --mark 1 -j DROP
7、mac:匹配特定的mac地址
例子:
iptables -A FORWARD -m mac --mac-
source
00:0C:24:FA:19:80 -j DROP
更多iptables相关教程见以下内容:
CentOS 7.0关闭默认防火墙启用iptables防火墙 http://www.linuxidc.com/Linux/2015-05/117473.htm
iptables使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux防火墙iptables详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux下防火墙iptables用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux下iptables防火墙设置 http://www.linuxidc.com/Linux/2015-10/123843.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/134832.htm
- iptables超全详解 http://www.linuxidc.com/Linux/2016-09/134832.htm
- http://www.linuxidc.com/Linux/2014-09/106310.htm
- nginx在Centos下的安装,转:http://www.linuxidc.com/Linux/2016-09/134907.htm
- http://www.linuxidc.com/Linux/2011-08/40169.htm
- http://www.linuxidc.com/Linux/2010-05/26206.htm
- http://www.linuxidc.com/Linux/2012-01/52138.htm
- http://www.linuxidc.com/Linux/2014-06/102856.htm
- http://www.linuxidc.com/Linux/2013-07/86999.htm
- http://www.linuxidc.com/Linux/2015-05/117920.htm
- http://www.linuxidc.com/Linux/2012-10/72284.htm
- 没有main函数生成可执行程序的几种方法 http://www.linuxidc.com/Linux/2013-09/90061.htm
- Centos6.5 mysql 5.7 主从复制 转自其他博主(http://www.linuxidc.com/Linux/2016-11/136899.htm)
- linux mkdir http://www.linuxidc.com/Linux/2011-04/35180.htm
- redhat 正确安装 MYSQL http://www.linuxidc.com/Linux/2012-02/54342.htm
- Ubuntu 13.10 Eclipse菜单栏失效 http://www.linuxidc.com/Linux/2013-11/92612.htm
- gitbub(cp:http://www.linuxidc.com/Linux/2014-03/97821.htm)
- sourceinsight(cp:http://www.linuxidc.com/Linux/2012-07/65603.htm)
- 通过XShell链接虚拟机的CentOS http://www.linuxidc.com/Linux/2013-02/79574.htm
- 高效sql性能优化极简教程
- MySQL 优化百分比/比例计算
- 搭建框架遇到SessionFactory is not writable or has an invalid setter method的问题
- 广东问国笔,怎样才能消除疲劳?
- android之android.intent.category.DEFAULT的用途和使用
- iptables超全详解 http://www.linuxidc.com/Linux/2016-09/134832.htm
- 材料设计——折叠自定义toolbar
- Java之GC
- openstack compute service list报错(HTTP 503)
- shel基本知识-proc目录介绍
- 接口测试
- PHP使用PHPExcel导出,导入数据总结
- 数据库中使用SQL语句查询当天数据记录
- STL list 的循环