iptable
Posted Bo_OuYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptable相关的知识,希望对你有一定的参考价值。
iptables语法: iptables [-t 表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]表: filter 过滤数据包,默认表 nat 网络地址转换 (DNAT、SNAT、NASQUERADE) mangle 修改数据包,改变包头中内容(TTL,TOS,MARK) (1)TOS:设置改变数据包的服务类型,不要使用TOS设置发往Internet的包除非打算依赖TOS来路由,不能再表中配置任何过滤。SNAT、DNAT (2)TTL: 改变数据包的生存时间,可以让数据包只有一个特殊的TTL,欺骗ISP,有些ISP并不希望多台计算机共享一个连接访问Internet,ISP通过检查一台计算机所发出的数据包是否含有不同的TTL来判断。 (3)Mask:给数据包设置特殊的标记,通过标记配置带宽限制和基于请求分类。 raw
链: filter表中的三条链: INPUT 链 : 过滤所有目标地址是本机的数据包(对进入本机数据包的过滤) OUTPUT链 : 过滤所有本机产生的数据包(对源地址得数据包的过滤) FORWARD链 : 过滤所有路过本机的数据包(源地址和目标地址都不是本机的数据包)
NAT表中的三条链: PREROUTING : 数据包到达防火墙时改变包的目的地址 OUTPUT : 改变本地产生数据包的目标地址 POSTROUTING : 在数据包离开防火墙时改变数据包的源地址
Mangle表中的5条链: INPUT 在数据包进入本机后,应用程序接受之前改变数据包 OUTPUT 在数据包被确定目的地址前改变数据包 FORWARD 第一次路由判断之后,最后一次路由判断前改变数据包 PREROUTING 数据包进入防火墙后,路由判断之前改变数据包 POSTROUTING 数据确定了目标地址后,即路由判断前改变数据包
操作命令: -A -I -D -R -P -F -L 查看filter表的forward链命令: iptables -vnL --line-number FORWARD 查看nat表命令: iptables -t nat -L 设置某链默认策略: iptables -P INPUT DROP
匹配条件: 流入、流出接口(-i、 -o) (-i eth+ 所有的ethernet网卡) (-i ! eth0 除了eth0网卡) 来源、目的地址(-s、-d) (-s ! 192.168.0.0/24) 协议类型 (-p) (-p all ) --tcp-flags 是-p tcp协议的扩展 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN TCP状态旗号:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送) --syn iptables -p tcp --syn 用来比对是否为要求联机之TCP封包,与iptables -p tcp --tcp-flags SYN,FIN,ACK的作用完全相同, 来源、目的端口(--sport、--dport) --sport 800:1000 或者 :1000 --tcp-flags
动作(处理方式): ACCEPT DROP DNAT --to 改写封包目的地IP为某特定IP或范围 SNAT --to 改写来源IP为某特定IP或IP范围 MASQUERADE iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE 将源地址是192.168.0.0/24的数据包进行地址伪装
附加模块: 按包状态匹配 state 按来源MAC匹配 mac 按包速率匹配 limit 多端口匹配 multiport
-m state --state 检测会话之间的连接关系 状态: NEW、RELATED、ESTABLISHED、INVALID NEW:该包想要开始一个连接(重新连接或将连接重定向) ESTABLISHED: 只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包 RELATED:该包是属于某个已经建立的连接所建立的新连接,例如:FTP的数据传输连接就是控制连接所RELATED出来的连接、--icmp-type 0(ping应答)-- icmp-type 8(ping请求)所RELATED出来的 INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据 iptables -A INPUT -m state --state RELATED,ESTABLISHD -J ACCEPT
-m mac --mac --mac-source MAC 报文经过路由后,数据包中原有得mac信息会被替换,所以在路由后得iptables中使用mac模块是没有意义得 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
-m limit --limit 匹配速率 [--burst 缓冲数量] 用一定速率去匹配数据包 iptables -A FORWARD -d 192.168.0.1-m limit --limit 50/s -j ACCEPT 也可以/minute /hour /day iptables -A INPUT -m limit --limit 3/hour 比对每小时平均流量是否超过一次3个封包 --limit-burst 用来比对瞬间大量封包的数量 iptables -A INPUT -m limit --limit-burst 5 -m multiport <--sports | --dports | --ports > 端口1[ ,端口2. . . . ,端口n] 一次性匹配多个端口,可以区分源端口,目的端口或不指定端口 iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT 必须与-p参数一起使用
以上是关于iptable的主要内容,如果未能解决你的问题,请参考以下文章