文档章节

iptables学习笔记

hiwill
 hiwill
发布于 2015/11/16 16:27
字数 1408
阅读 92
收藏 6
点赞 0
评论 0

iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链处理,然后到达POSTROUTING链输出。 
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

1. 表:
   mangle: 拆开报文,改变包的(TOS/TTL/MARK)标志位。建议不加任何过滤,也只是建议哈。
   nat: 用于转换包的源地址和目标地址。流的第一个包会进行匹配,后面的包会做按第一个包一样处理。包括DNAT/SNAT/MASQUERADE。
   filter: 用于过滤,对包的抉择ACCEPT或者DROP。
   raw:状态追踪,列外放行。
规则表之间的优先顺序:
Raw——mangle——nat——filter

2. 链:
   PREROUTING: 所有进入的包最先进入的链
   POSTROUTING: 所有发送包最后通过的链
   INPUT: 进入本地的链,过滤所有目的地址是本机地址的数据包
   OUTPUT: 本地发送出去的链,过滤源地址是本机地址的数据包
   FORWARD: 转发的链,不进入本地

   通常有三种状态:
   a) 进入本地的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)INPUT-->(filter)INPUT-->
   b) 从本地发出的包:-->(mangle)OUTPUT-->(nat)OUTPUT-->(filter)OUTPUT-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK
   c) 路由的包:NETWORK-->(mangle)PREROUTING-->(nat)PREROUTING-->-->(mangle)FORWARD-->(filter)FORWARD-->(mangle)POSTROUTING-->(nat)POSTROUTING-->NETWORK

filter表——三个链:INPUT、FORWARD、OUTPUT
Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
Raw表——两个链:OUTPUT、PREROUTING

3. 状态防火墙:所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的。

4. 状态记录表:/proc/net/ip_conntrack
   [UNREPLIED]连接还没有收到回应
   [ASSURED]两个方向已无流量
   当记录表慢的时候,没有[ASSURED]标记的记录将被删除。
   记录条数目可以设置:/proc/sys/net/ipv4/ip_conntrack_max

5. 数据包的四种状态:
   NEW: conntrack看到的某个连接的第一个包,并没有收到对方的应答。
   ESTABLISHED: 数据已经在两个方向进行了传输。有应答就算,比如ICMP的错误返回包。
   RELATED: 当和ESTABLISHED状态又发生新连接时候。比如ftp-data和ftp-control。
   INVALID: 无效,通常DROP。

语法: iptables [-t table] command [match] [target/jump]
   table 对哪个表的操作,默认是filter表
   match 根据什么对包进行匹配
   target 匹配到的数据包如何处理

1. command 可以见iptables的帮助 iptables -h
2. match. -p 匹配协议。协议在/etc/protocols中定义。默认的是tcp,udp,icmp。
3. match. -s,-d 匹配源地址和目的地址。可以是单个IP,也可以是网络地址。192.168.0.0/24
4. match. -f 匹配被分片的包的第二片和后面的所有片。
5. match. -m multiport --source-port 22,110 多端口匹配
6. match. -m owner --pid-owner 78 对某个进程匹配(另外如--uid-owner,--sid-owner)
7. DNAT target 改写目的IP地址,只能用在nat表中的PREROUTING链和OUTPUT链中。
   SNAT target 改写源IP地址,只用于nat表中的POSTROUTING链中。
   iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.9
   # 将所有的访问15.45.23.67:80端口的数据做DNAT发到192.168.1.9:80
   如果和192.168.1.9在同一内网的机器要访问15.45.23.67,防火墙还需要做设置,改变源IP为防火期内网IP 192.168.1.1。否则数据包直接发给内网机器,对方将丢弃。
   iptables -t nat -A POSTROUTING -p tcp --dst 15.45.23.67 --dport 80 -j SNAT --to-source 192.168.1.1
   # 将所有的访问15.45.23.67:80端口的数据包源IP改为192.168.1.1
   如果防火墙也需要访问15.45.23.67:80,则需要在OUTPUT链中添加,因为防火墙自己发出的包不经过PREROUTING。
   iptables -t nat -A OUTPUT --dst 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.9
8. MASQUERADE target
 和SNAT target类似。不使用--to-source,因为伪装的,不需要指定源IP,只可选用--to-ports指定端口。对于静态IP,通常使用SNAT,保留连接跟踪,对于动态IP,通常使用MASQUERADE,不保留连接跟踪,但会占用更多的开销。
9. MIRROR target
 颠倒IP头中的源地址与目的地址,再转发。
10. REDIRECT target
 在防火墙内部转发包到另外一个端口,只用在nat表的PREROUTING链和OUTPUT链中。常用在透明代理中。
   iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8090
11. REJECT target
 和DROP基本一样。但是DROP不返回错误信息,REJECT可以指定返回的错误信息。
   iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable
12. RETURN target
 返回上一层,顺序是:子链——>父链——>缺省的策略。
13. TTL target
 用来更改包的TTL,有些ISP根据TTL来判断是不是有多台机器共享连接上网。
   iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64
   iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1
   # 离开防火墙的时候实际上TTL已经-2了,因为防火墙本身要-1一次。
   iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1
   # 离开防火墙的时候不增不减,tracert就不好用了,呵呵。
14. LOG target
 在内核空间记录日志,dmesg等才能看。
15. ULOG target
 在用户空间记录日志。

打开转发IP功能(IP forwarding):
echo "1" > /proc/sys/net/ipv4/ip_forward
如果使用PPP、DHCP等动态IP,需要打开:
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

 

© 著作权归作者所有

共有 人打赏支持
hiwill
粉丝 11
博文 113
码字总数 70253
作品 0
朝阳

暂无相关文章

vuex学习

1、getters基本用法: 在store.js里面用const声明我们的getters属性。 const getters={ count:function (state) { return state.count +=100; }} export default new Vuex.S......

大美琴 ⋅ 36分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 48分钟前 ⋅ 0

G6 关系数据可视化图形库 简单使用

官网 https://antv.alipay.com/zh-cn/g6/1.x/index.html 效果 首先生成给定数目的小球,并设置随机的颜色 按照顺序,设置小球的角度以及坐标 设置定时器,每隔一定的时间修改小球的角度和坐标...

阿豪boy ⋅ 50分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 59分钟前 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

桥接设计模式

1、概述: 将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化 如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构 桥接模式将继承模式转化成关联关系,他降...

职业搬砖20年 ⋅ 今天 ⋅ 0

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 今天 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 今天 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部