iptables说明(转)
原文:https://www.linuxidc.com/Linux/2016-09/134832.htm
前提基础:
当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
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,只需要开启服务即可
1
|
service iptables start
|
iptables规则书写
基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]
表 | 说明 | 支持的链 |
raw | 一般是为了不再让iptables对数据包进行跟踪,提高性能 | PREROUTING、OUTPUT |
mangle | 对数据包进行修改 | 五个链都可以 |
nat | 进行地址转换 | PREROUTING、OUTPUT、POSTROUTING |
filter(默认) | 对包进行过滤 | INPUT、FORWARD、OUTPUT |
常用操作命令 |
说明 |
-A |
在指定链尾部添加规则,比如: iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口 |
-D |
删除匹配的规则,比如: iptables -D INPUT --dport 80 -j DROP iptables -D INPUT 1 从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除 |
-R |
替换匹配的规则,比如: iptables -R INPUT 1 -s 192.168.0.1 -j DROP #修改INPUT链1处的规则为现在的 |
-I |
在指定位置插入规则 例:iptables -I INPUT 1 --dport 80 -j ACCEPT (将规则插入到filter表INPUT链中的第一位上) |
-L/S |
列出指定链或所有链的规则 |
-F |
删除指定链或所有链的规则,比如: iptables -F INPUT #删除INPUT链的所有规则 |
-N |
创建用户自定义链 例:iptables -N allowed |
-X |
删除指定的用户自定义链,比如: iptables -X allowed |
-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表上):是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机 例:iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -j SNAT --to-source 10.144.235.10 |
DNAT |
目标地址转换(在nat表上):DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B 例: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 |
MASQUERADE |
地址伪装,算是snat中的一种特例,可以实现自动化的snat。 在iptables中有着和SNAT相近的效果,但也有一些区别,但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如: 如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去, iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source192.168.5.3 如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去 iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source192.168.5.3-192.168.5.5 这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常不好用的。 MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。 比如下边的命令: iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE 如此配置的话,不用指定SNAT的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。 |
注意要点:
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/boshen-hzb/p/9815931.html
iptables说明(转)相关推荐
- docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name
docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...
- centos7下没有iptables进行安装或更新
从centos7开始使用linux,之前版本的没有深入了解过,今天要开放个端口,需要有防火墙的相关操作,从网上查资料都是编辑/etc/sysconfig目录下面的iptables文件,可我进入这个文件 ...
- 25个iptables常用示例
本文将给出25个iptables常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望. 格式 iptables [-t 表名] 选项 [链名] [条件] [-j ...
- iptables命令(备忘)
语法 iptables(选项)(参数) 选项 -t<表>:指定要操纵的表: -A:向规则链中添加条目: -D:从规则链中删除条目: -i:向规则链中插入条目: -R:替换规则链中的条目: ...
- linux防火墙cc,Linux防火墙后面的Alljoyn服务(iptables)
我想在嵌入式linux设备上使用Alljoyn框架.由于安全原因,有必要为该设备配置防火墙.这是通过iptables完成的.Linux防火墙后面的Alljoyn服务(iptables) 我到目前为止所 ...
- 关于对IPtables规则的理解
1,iptables中的所有规则都会存放到/etc/sysconfig/iptables文件中 2,最前端的规则既是现有规则 3,如果要改变现有的规则有两种办法: (1) 使用iptables -t ...
- linux nat 端口,linux – iptables nat只是端口25?
下面的代码将完成这项工作. Iptables很容易使用 – 您只需要明确告诉它如何处理来自或到达特定端口上特定位置的流量.虽然您只请求了端口25和110,但我还包括安全SMTP和安全POP3的选项. ...
- linux禁止向指定ip发送数据包,Linux下使用iptables封锁端口禁止邮件发送
原创文章,转载请注明出处:https://www.myzhenai.com/thread-17843-1-1.html https://www.myzhenai.com.cn/post/2161.ht ...
- 在CentOS 6.3 64bit上利用iptables开放指定端口的方法
可以python写的服务器在Ubuntu 14.04.3上测试时发现很正常,但是在CentOS 6.3上搭好环境后,发现对特定端口,比如8000,的http请求无法访问,真是百思不得其解.最后不断分析 ...
- 防火墙iptables介绍
防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统.该架构可以实现数据包过滤,网络地址转换以及数据包管理功能.linux中防火墙分为两部分:netf ...
最新文章
- 树形dp——树的最远距离 hdu2196
- 更新鸿蒙系统运行评价,全球首批!升级使用鸿蒙OS真实反馈评价出炉:差评/好评都很真实...
- 致我测试之路的“七年之痒”
- 阿里 2 年内市值将赶超苹果;腾讯回应吃鸡下架;滴滴恢复深夜运营 | 极客头条...
- mysql事务保证幂等_事务与一致性:刚性or柔性
- 刀下留人--苹果开发者账号封号前挽救
- 宏碁电脑安装linux,ubuntu安装篇——acer 4750G ubuntu安装详解
- 关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
- golang幽灵蛛(pholcus)(一)
- 微信可以批量清理僵尸粉啦
- 刘鹏教授接受新华日报财经客户端采访:智能制造应用落地生根,“江苏智造”进入快速增长期...
- greedy、reluctant和possessive量词
- cadence SPB17.4 - allegro - 尺寸标注
- typescript完成日期转换
- Android一键沉浸式状态栏(透明状态栏)
- 盒子拉伸拉扯(左右模式)
- 前端基础总结:HTML基础知识
- 董小姐:人生六十四,事业一道坎
- 生态环境影响评价制图流程
- Ubuntu8.10 DVD的下载和Mac OSX Leopard的模拟