iptables总结

您所在的位置:网站首页 iptables包过滤 iptables总结

iptables总结

2023-10-25 13:20| 来源: 网络整理| 查看: 265

1. iptables四表五链

四表五链:

链就是位置:共有五个 进路由(PREROUTING)、进系统(INPUT) 、转发(FORWARD)、出系统(OUTPUT)、出路由(POSTROUTING);表就是存储的规则;数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行、丢弃、转发还是修改等等操作。 1.1 四表

filter表——过滤数据包 Nat表——用于网络地址转换(IP、端口) Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS Raw表——决定数据包是否被状态跟踪机制处理

1.2 五链

INPUT链——进来的数据包应用此规则链中的策略 OUTPUT链——外出的数据包应用此规则链中的策略 FORWARD链——转发数据包时应用此规则链中的策略 PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理) POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

1.3 四表五链关系

四表五链

2. iptables target 2.1 dnat目的地址转换

在路由前(PREROUTING)将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口,实现发布内部服务器。

iptables -t nat -I PREROUTING -i 外网网卡 -d 外网ip tcp --dport 发布的端口 -j DNAT --to-destination 内网服务ip:端口 2.2 SNAT 源地址转换

定义在POSTROUTING链上,主要用于实现内网客户端访问外部主机时使用(局域网上网用)

iptables -t nat -A postrouting -s 内部网络地址或主机地址 -j SNAT --to-source NAT服务器上的某外部地址 2.3 REDIRECT:重定向、映射、透明代理

可用于 nat 表的 PREROUTING 和 OUTPUT 链上,其工作流程是将上述的两个链上命中的数据包的目的地址修改成(即重定向)该包进入网卡的主 IP 地址,如果是本地回环网络产生的包即重定向到 127.0.0.1。目标端口从参数指定,协议支持 tcp, udp, dccp or sctp。

参考:用nginx搭建http透明代理

nginx配置

server{ listen80; #既然是http代理,那么80端口是必须的 resolver 8.8.8.8; #用于解释对外访问的域名IP地址 location / { proxy_pass $scheme://$host$request_uri; #代理转发对应的服务器 proxy_bind $remote_addr transparent; #这行很关键,启用透明代理 proxy_set_header X-Real-IP $remote_addr; #这行是可选,把客户端IP头加到http自定义字段而已 } }

iptables配置

#添加一条策略,把目标是80端口的流量转发到本机的80端口,不加这条策略nginx是不会收到http请求数据的,服务器这个时候只会充当一台路由器的角色做数据转发而已 -A PREROUTING -i em1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 80 #这条策略结合下面两条ip命令规则配合使用,目的是为了使外部http请求返回的数据可以正常地回复给请求者 -A PREROUTING -s 请求者IP范围段 -p tcp -m tcp --sport 80 -j MARK --set-xmark 0x1/0xffffffff ip rule add fwmark 1 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100 2.4 synproxy

synproxy是一个很方便的缓解syn flood攻击的功能 参考:SYNPROXY抵御DDoS攻击的原理和优化

# 不为不请自来(没有经过三次握手)的数据包关联nf_conntrack表项 sysctl -w net.netfilter.nf_conntrack_tcp_loose=0 # 特殊对待携带SYN标记的数据包,由于仅仅收到SYN无法判断是否能最终完成握手,因此不能判断是否最终能关联nf_conntrack表项,故NOTRACK,交由SYNPROXY处理 iptables -t raw -A PREROUTING -i eth4 -p tcp -m tcp --syn --dport 80 -j CT --notrack # SYNPROXY会过滤出两类感兴趣数据包自己来处理: # 1.UNTRACKED:携带SYN标记的数据包 # 2.INVALID:未携带SYN标记的数据包(稍后我们会看到,其实这类包就是握手的ACK包或者攻击包) iptables -A INPUT -i eth4 -p tcp --dport 80 -m state --state UNTRACKED,INVALID -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 # 丢弃未被SYNPROXY处理的数据包,此数据包为攻击包 iptables -A INPUT -i eth4 -p tcp --dport 80 -m state --state INVALID -j DROP 3. iptables防火墙性能指标 3.1 吞吐量(Throughput)

吞吐量是衡量一款防火墙或者路由交换设备的最重要的指标,它是指网络设备在每一秒内处理数据包的最大能力。设备吞吐量越高,所能提供给用户使用的带宽越大。

吞吐量的计量单位有两种方式:常见的就是带宽计量,单位是Mbps(Megabits per second)或者Gbps(Gigabits per second),另外一种是数据包处理量计量,单位是pps(packets per second),两种计量方式是可以相互换算的。在进行对一款设备进行吞吐性能测试时,通常会记录一组从64字节到1518字节的测试数据,每一个测试结果均有相对应的pps数。64字节的pps数最大,基本上可以反映出设备处理数据包的最大能力。所以从64字节的这个数,基本上可以推算出系统最大能处理的吞吐量是多少。

3.2 时延(Latency)

时延是系统处理数据包所需要的时间。防火墙时延测试指的就是计算它的存储转发(Store and Forward)时间,即从接收到数据包开始,处理完并转发出去所用的全部时间。

时延的单位通常是微秒,一台高效率防火墙的时延通常会在一百微秒以内。时延通常是建立在测试完吞吐量的基础上进行的测试。测试时延之前需要先测出每个包长下吞吐量的大小,然后使用每个包长的吞吐量结果的 90%-100%作为时延测试的流量大小。一般时延的测试要求不能够有任何的丢包。因为如果丢包,会造成时延非常大,结果不准确。我们测试一般使用最大吞吐量的95%或者90%进行测试。测试结果包括最大时延,最小时延,平均时延,一般记录平均时延。

3.3 新建连接速率(Maximum TCP Connection Establishment Rate)

新建连接速率指的是在每一秒以内防火墙所能够处理的HTTP新建连连接请求的数量。用户每打开一个网页,访问一个服务器,在防火墙看来会是1个甚至多个新建连接。而一台设备的新建连接速率越高,就可以同时给更多的用户提供网络访问。比如设备的新建连接速率是1万,那么如果有1万人同时上网,那么所有的请求都可以在一秒以内完成,如果有1万1千人上网的话,那么前1万人可以在第一秒内完成,后1千个请求需要在下一秒才能完成。所以,新建连接速率高的设备可以提供给更多人同时上网,提升用户的网络体验。

新建连接速率虽然英文用的是TCP,但是为了更接近实际用户的情况,通常会采用HTTP来进行测试,测试结果以连接每秒(connections per second)作为单位。为什么针对防火墙要测试这个数据呢?因为我们知道防火墙是基于会话的机制来处理数据包的,每一个数据包经过防火墙都要有相应的会话来对应。会话的建立速度就是防火墙对于新建连接的处理速度。新建连接的测试采用4-7层测试仪来进行,模拟真实的用户和服务器之间的HTTP教过过程:首先建立三次握手,然后用户到HTTP服务器去Get一个页面,最后采用三次握手或者四次握手关闭连接。测试仪通过持续地模拟每秒大量用户连接去访问服务器以测试防火墙的最大极限新建连接速率。

3.4 并发连接数(Concurrent TCP Connection Capacity)

最后介绍的是并发连接数,并发连接数就是指防火墙最大能够同时处理的连接会话个数。并发连接数指的是防火墙设备最大能够维护的连接数的数量,这个指标越大,在一段时间内所能够允许同时上网的用户数越多。随着web应用复杂化以及P2P类程序的广泛应用,每个用户所产生的连接越来越多,甚至一个用户的连接数就有可能上千,更严重的是如果用户中了木马或者蠕虫病毒,更会产生上万个连接。所以显而易见,几十万的并发连接数已经不能够满足网络的需求了,目前主流的防火墙都要求能够达到几十万甚至上千万的并发连接以满足一定规模的用户需求。

并发连接数虽然英文用的是TCP,但是为了更接近实际用户的情况,通常会采用HTTP来进行测试。它是个容量的单位,而不是速度。测试结果以连接(connections)作为单位。基本测试的方法和HTTP新建连接速率基本一致,主要的区别在于新建连接测试会立刻拆除建立的连接,而并发连接数测试不会拆除连接,所有已经建立的连接会保持住直到达到设备的极限。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3