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新建连接速率基本一致,主要的区别在于新建连接测试会立刻拆除建立的连接,而并发连接数测试不会拆除连接,所有已经建立的连接会保持住直到达到设备的极限。

iptables总结--理解四表五链/snat/dnat/redirect/synproxy/性能相关推荐

  1. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)

    文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...

  2. Linux系统管理(3)——防火墙 iptables基本原理 四表五链 NetFilter 概述

    Linux防火墙主要就行工作的部分在内核,这个模块叫NetFilter:我们平时配置的iptables是给我们的一个配置界面,我们通过iptables配置规则,配置之后,NetFilter通过这些规则 ...

  3. Linux--firewalld防火墙基础(firewalld和iptables的关系,四表五链,netfilter与iptables的关系,iptables语法与参数,firewalld网络区域)

    文章目录 前言 一:Firewalld,iptables概述 1.1:Firewalld简介 1.2:iptables简介 二:Firewalld和iptables的关系 2.1:netfilter ...

  4. 云小课 | 守护网络安全不是问题,iptables的四表五链为你开启“八卦阵”

    摘要:担心网络基本安全?iptables八卦阵为您守护!本文带您一起了解iptables的相关知识. 网络世界就和现实世界一样,总是会有些不怀好意的"人"出现,扫扫你的端口啊,探测 ...

  5. iptables四表五链

    本文收录于微信公众号「 LinuxOK 」,ID为:Linux_ok,关注公众号第一时间获取更多技术学习文章. 如下是具有双网卡的Linux服务器,数据入口网卡是eth0,数据出口网卡是eth1: 而 ...

  6. TCP三次握手、tcp和udp对比、四表五链

    (1)简述TCP的三次握手 第一次握手:客户端请求建立连接时,会将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认. 第二次握手: ...

  7. iptables防火墙理论清晰解释(四表、五链、流程图文并茂)学习不能忘!!!

    文章目录 前言 一:iptables包过滤的概述 1.1:netfilter 1.2:iptanbles 1.3:包过滤的工作层次 二:iptables的四表.五链结构 2.1:规则链 2.2:具体的 ...

  8. firewalld、netfilter、 netfilter5表5链、iptables介绍

    1. Linux网络相关 ifconfig查看网卡ip(如果没有这个命令请使用yum install net-tools安装) ifdown ens33 //关闭网卡ens33(在使用远程终端连接时不 ...

  9. 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...

最新文章

  1. SpringBoot 部署 Jar 文件,瘦身优化指南 !
  2. 项目: 用C语言写一个图形化的音乐播放器 【C++ / C】
  3. outlook vba开发要点
  4. android+note2+分辨率,Android自适应屏幕方向、大小和分辨率
  5. Visual Studio Team System 2008 Team Suite (90-day Trial)(转)
  6. 连续两天高烧_连续工作两天,可以看电视11秒
  7. CSS 背景附着 background-attachment属性
  8. springboot中获得app_Spring Boot 应用程序启动流程分析
  9. NS3 MyApp Class Reference
  10. VS2012打开项目 提示Asp.net4.0未在web服务器上注册的解决方案
  11. JS删除两个数组中相同的某个对象值
  12. TCP和UDP的不同
  13. Java中super的用法 ____简单粗暴
  14. Android SDK4.0(api14)安装
  15. breadweb控制台下载_路由器刷breed web控制台助手通用版
  16. Java8新特性Stream流、Stream多字段排序
  17. 思考篇|姜子牙观影后感
  18. mysql5.7 主从切换_mysql5.7主从切换(master/slave switchover)
  19. 提炼函数(Extract Method)
  20. 红米note4 android4,红米 note 4(Redmi Note 4 标准版 全网通)刷机详解教程,秒懂刷机...

热门文章

  1. 【系统架构设计师】软考高级职称,来自订阅者真实反馈,从理论、实践、技巧让你掌握论文写作秘诀
  2. 【Mac Buf Install Solution】Mac Buf Not Provide support for this old version Solution
  3. android 图片转字符串,图片转字符文字怎么转?安卓字符图App
  4. flex file 文件上传 带参数 php,php+flex打造多文件带进度超级上传
  5. python下俄罗斯方块的游戏设计_[源码和文档分享]基于Python的PyGame的俄罗斯方块游戏设计与实现...
  6. java实现字块反转_java实现字符串反转
  7. 计算机软件基础第四版,《计算机软件技术基础》徐士良(第4版)课后习题答案详解|复习笔记...
  8. Spring Boot 声明式事务 @Transactional 的使用
  9. linux系统关于mysql的命令_[操作系统]Linux 操作MySql命令
  10. mac html编辑器 免费,Mac下 10 款最棒的编辑器