#数据包传输
以本地为目标
----------------------------------------------------------------------------------------------------
Step Table Chain Comment
1 在线路上传输(比如,Internet)
2 进入接口 (比如, eth0)
3 mangle PREROUTING 这个链用来mangle数据包,比如改变TOS等
4 nat PREROUTING 这个链主要用来做DNAT。不要在这个链做过虑操作,
因为某 些情况下包会溜过去。
5 路由判断,比如,包是发往本地的,还是要转发的。
6 mangle INPUT 在路由之后,被送往本地程序之前,mangle数据包。
7 filter INPUT 所有以本地为目的的包都要经过这个链,
不管它们从哪儿来,对这些包的过滤条件就设在这里。
8 到达本地程序了(比如,服务程序或客户程序)
------------------------------------------------------------------------------------------------------
以本地为源的包
------------------------------------------------------------------------------------------------------
Step Table Chain Comment
1 本地程序(比如,服务程序或客户程序)
2 路由判断,要使用源地址,外出接口,还有其他一些信息。
3 mangle OUTPUT 在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦。
4 nat OUTPUT 这个链对从防火墙本身发出的包进行DNAT操作。
5 filter OUTPUT 对本地发出的包过滤。
6 mangle POSTROUTING 这条链主要在包DNAT之后(译者注:作者把这一次DNAT称作实际的路由,
虽然在前面有一次路由。对于本地的包,一旦它被生成,
就必须经过路由代码的处理,但这个 包具体到哪儿去,
要由NAT代码处理之后才能确定。所以把这称作实际的路由。),
离开本地之前,对包 mangle。有两种包会经过这里,
防火墙所在机子本身产生的包,还有被转发的包。
7 nat POSTROUTING 在这里做SNAT。但不要在这里做过滤,因为有副作用,
而且有些包是会溜过去的,即使你用了DROP策略。
8 离开接口
9 在线路上传输
-------------------------------------------------------------------------------------------------------
被转发的包
-------------------------------------------------------------------------------------------------------
Step Table Chain Comment
1 在线路上传输
2 进入接口(比如, eth0)
3 mangle PREROUTING mangle数据包,,比如改变TOS等。
4 nat PREROUTING 这个链主要用来做DNAT。不要在这个链做过虑操作,
因为某些情况下包会溜过去。稍后会做SNAT。
5 路由判断,比如,包是发往本地的,还是要转发的。
6 mangle FORWARD 包继续被发送至mangle表的FORWARD链,这是非常特殊的情 况才会用到的。
在这里,包被mangle(还记得mangle的意思吗)。
这次mangle发生在最初的路由判断之后, 在最后一次更改包的目的之前
(译者注:就是下面的FORWARD链所做的,因其过滤功能,
可能会改变一些包 的目的地,如丢弃包)。
7 filter FORWARD 包继续被发送至这条FORWARD链。只有需要转发的包才会走 到这里,
并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,
不管是外网到内 网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。
8 mangle POSTROUTING 这个链也是针对一些特殊类型的包(译者注:参考第6步,
我们可以发现,在转发包时,mangle表的两个链都用在特殊的应用上)。
这一步mangle是在所有更改包的目 的地址的操作完成之后做的,但这时包还在本地上。
9 nat POSTROUTING 这个链就是用来做SNAT的,当然也包括Masquerade(伪装)。
但不要在这儿做过滤,因为某些包即使不满足条件也会通过。
10 离开接口(比如: eth0)
11 又在线路上传输了(比如,LAN)
------------------------------------------------------------------------------------------------------- #IPTABLE 语法
语法:
iptables [-t table] command [match] [target/jump] table:
nat 网络地址转换
mangle 数据包修改 改变不同的包及包头的内容,比如 TTL,TOS或MARK
filter 数据包过滤 对包进行DROP、LOG、ACCEPT和REJECT等操作 command:
-A, --append 加 例: iptables -A INPUT ...
-D, --delete 删 例: iptables -D INPUT --dport 80 -j DROP || iptables -D INPUT 1
-R, --replace 替换 例: iptables -R INPUT 1 -s 192.168.0.1 -j DROP
-I, --insert 插入 例: iptables -I INPUT 1 --dport 80 -j ACCEPT
-L, --list 列出 例: iptables -L INPUT
-F, --flush 清空 例: iptables -F INPUT
-Z, --zero 链表归零 例: iptables -Z INPUT
-N, --new-chain 建立链表 例: iptables -N allowed
-X, --delete-chain 删除链表 例: iptables -X allowed
-P, --policy 设置默认的target 例: iptables -P INPUT DROP
-E, --rename-chain 重命名链表 例: iptables -E allowed disallowed match:
-p, --protocol 匹配协议 /etc/protocols 定义 ALL 指 TCP UDP ICMP 例: iptables -A INPUT -p tcp
隐含匹配:
TCP matches
--sport, --source-port TCP包的源端口来匹配包 例: iptables -A INPUT -p tcp --sport 22 || [22:80]
--dport, --destination-port TCP包的目的端口来匹配包 例: iptables -A INPUT -p tcp --dport 22
--tcp-flags 匹配指定的TCP标记:SYN,FIN,ACK SYN
--tcp-option 根据匹配包
UDP matches
--sport, --source-port 类似TCP
--dport, --destination-port 类似TCP
ICMP matches
--icmp-type
-s, --src, --source IP源地址匹配 取反 --source ! 192.168.0.0/24 例: iptables -A INPUT -s 192.168.1.1
-d, --dst, --destination IP目的地址匹配 类似 -s
-i, --in-interface 匹配进入网卡 取反 -i ! eth0 例: iptables -A INPUT -i eth0
-o, --out-interface 匹配出去网卡 取反 -i ! eth0 例: iptables -A INPUT -i eth0
-f, --fragment 匹配一个被分片的包
-m
显式匹配:
Limit match
--limit iptables -A INPUT -m limit --limit 3/hour
--limit-burst iptables -A INPUT -m limit --limit-burst 5
MAC match
--mac-source 还只能在PREROUTING,FORWARD 和INPUT链里使用 例: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
Multiport match 多端口
--source-port iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
--destination-port iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
--port iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
Owner match 包生产者匹配
--uid-owner 指定用户 例: iptables -A OUTPUT -m owner --uid-owner 500
--gid-owner 指定组
--pid-owner 指定进程
--sid-owner 会话ID
State match 包状态匹配
--state 例:iptables -A INPUT -m state --state RELATED,ESTABLISHED
TOS match TOS字段匹配
--tos 例: iptables -A INPUT -p tcp -m tos --tos 0x16
TTL match TTL值匹配
--ttl 例: iptables -A OUTPUT -m ttl --ttl 60 target/jump:
--jump 跳转到指定表 iptables -A INPUT -p tcp -j tcp_packets (前提:iptables -N tcp_packets)
ACCEPT target
-j ACCEPT 跳出以下匹配,通过IPTABLE
DNAT target
--to-destination 指定要写入IP头的地址,这也是包要被转发到的地方
例: iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10
DROP target
DROP 另一个方法 REJECT
LOG target 记录日志
--log-level 告诉iptables和 syslog使用哪个记录等级
--log-prefix 告诉iptables在记录的信息之前加 上指定的前缀
--log-tcp-sequence 把包的TCP序列号和其他日志信息一起记录下来
--log-tcp-options 记录TCP包头中的字段大小不变的选项
--log-ip-options 记录IP包头中的字段大小不变的选项
MARK target 只能在本地的mangle表
设置mark值,这个值是一个无符号的整数
MASQUERADE target
是颠倒IP头中的源目地址
QUEUE target
这个target为用户空间的程序或应用软件管理包队列
REDIRECT target
在防火墙所在的机子内部转发包或流到另一个端口 只能用在nat表的PREROUTING、OUTPUT链和被它们调用的自定义链里
--to-ports 例: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
REJECT target
REJECT和DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息
--reject-with 指定只针对某些协议返回错误 iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
RETURN target
它使包返回上一层,就是若包在子链 中遇到了RETURN,则返回父链的下一条规则继续,若在父链,被缺省的策略(一般是ACCEPT或DROP)操作
SNAT target
做源网络地址转换的,就是重写包的源IP地址,SNAT只能用在nat表的POSTROUTING链里
例: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
TOS target
TOS是用来设置IP头中的Type of Service字段的 利用包的头部来传递路由信息,TOS是唯 一的办法
TTL target
TTL可以修改IP头中Time To Live字段的值 TTL只能在mangle表内使用
例:iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64
ULOG target
ULOG可以在用户空间记录被匹配的包的信息,这些信息和整个包都会通过netlink socket被多播。
--ulog-nlgroup 指定向哪个netlink组发送包 例:iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-nlgroup 2
--ulog-prefix 使用方法和 LOG的prefix一样
--ulog-cprange 指定每个包要向“ULOG在用户空间的代理”发送的字节数 默认0 iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-cprange 100
--ulog-qthreshold 告诉ULOG在向用户空间发送数据以供记录之前 iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-qthreshold 10

数据包与IPTABLE关系的更多相关文章

  1. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  2. Linux内核--网络栈实现分析(七)--数据包的传递过程(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7545855 更多请查看专栏,地 ...

  3. Linux内核--网络栈实现分析(二)--数据包的传递过程(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7492423 更多请看专栏,地址 ...

  4. [转]SOCKET通信中TCP、UDP数据包大小的确定

    TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...

  5. 从数据包谈如何封杀P2SP类软件

    概述 1.1背景介绍 我们经常在用户的网络中发现大量的P2P应用,占用了网络中大量的宝贵带宽资源,用户的网络管理者也知道内网中存在这些应用,也采取了一些限制措施,但是效果并不一定理想.本文试着以数据包 ...

  6. Linux数据包路由原理、Iptables/netfilter入门学习

    相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...

  7. IP报文解析及基于IP 数据包的洪水攻击

    版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验 ...

  8. [转]TCP、UDP数据包大小的确定

       TCP.UDP数据包大小的确定   http://blog.163.com/jianlizhao%40126/blog/static/1732511632013410101827640/   U ...

  9. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的”(上 ...

随机推荐

  1. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  2. PRML读书笔记——2 Probability Distributions

    2.1. Binary Variables 1. Bernoulli distribution, p(x = 1|µ) = µ 2.Binomial distribution + 3.beta dis ...

  3. leetcode105:Construct Binary Tree from Preorder and Inorder Traversal

    题目: Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume t ...

  4. 开发环境中biztalk项目设置注意事项(转)

      适用版本:biztalk 2006 适用环境:开发测试环境 在开发过程中,在开发环境中,一定会是一个对项目不断的修改.编译.部署.测试,查看测试结果,发现有问题,然后回到开发环境再修改.编译.部署 ...

  5. Frag(匹配跟踪)

    ‘碎片’(Frag)跟踪是目标跟踪里的一种通过‘部分‘匹配识别的方法,其目标模板是通过图像多个碎片和块来描述.块是任意的,不基于目标模型的(与传统的基于’部分‘的方法不一样,比如人体的四肢与躯干的跟踪 ...

  6. WDR7500 花生壳问题

    新进一WDR7500 居然不能解析花生壳. 百度一番, 发现别人有同样的问题. 找来找去从别人的只言片语中发现需要升级固件. 好不容易加入一个群, 把固件下下来. 升级固件, 重新设置, 解析成功. ...

  7. 【转】PowerShell入门(八):函数、脚本、作用域

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/26/PoweShell_Function_Script_Scope.html 脚本所体现的是Powe ...

  8. C#写WPF程序,SQLSever2008 提示插入数据成功,却查询不到数据

    1.提示存储成功,但是数据库中没有数据.今天在用C#写一个wpf程序时,要向数据库Sql server2008 中插入数据,程序提示成功,但打开数据库却没有值; 经过查询发现,数据存储到默认路径下的数 ...

  9. map函数

    概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经 ...

  10. 亚马逊EC2 ubuntu下安装mysql远程无法连接问题o

    无法远程的原因有很多,我今天遇到的问题是通过navicat无法远程连接我在EC2上创建的实例. 1.通过命令" netstat -an|grep 3306 "检查一下3306端口对 ...