iptables随记

原理

写代码的人都知道,在写一个系统的时候,为了保持这个系统的灵活性和可扩展性,我们经常会在系统的某些地方留个坑,换句话说就是留一些钩子,让别人在这钩子里干一些事情,扩展整个系统的功能。iptables 实际上是对 Linux 网络栈钩子里实现的逻辑。

iptables原理图

官网的Iptables架构图:


官网的图

更加详细的图:


更加详细的图

最完整的一张原理图


最完整的iptables链路图

一个数据包进来,首先会经过 PREROUTING 链,PREROUTING 链最重要的一个功能就是可以修改数据包目的地址和端口。过了 PREROUTING 之后,内核会根据数据包的目的地址来决定该数据包是进入 INPUT 链还是 FORWARD 链。发送给本机的数据包经过 INPUT 链之后就直接交给本地的进程处理了;至于非本机的数据包就会根据 FORWARD 的规则来判断是否需要转发该数据包。所有从本机出去的数据包最后都需要经过 POSTROUTING 链,POSTROUTING 链的最重要的一个作用是修改数据包的源地址。

层级调用关系

These chains have no policy; if a packet reaches the end of the chain it is returned to the chain which called it

换句话说,iptables 有类似于函数调用的层级关系!

NAT

SNAT

SNAT 发生在 postrouting 阶段,将本机产生的所有的数据的源地址进行相应的修改。如果要启用 SNAT,只需在 iptables 规则链中添加-j SNAT--to-source指定数据包的 IP 地址即可,下面是几个例子:

# 将数据包的源地址修改为1.2.3.4。
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
# 将数据包的源地址修改为1.2.3.4至1.2.3.6中的任意一个。
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
Masquerading

有的时候 IP 地址可能会动态的发生变化,因此,如果像上面的例子那样指定死了 IP 地址的话,当 IP 地址一发生变化,就需要重新修改规则了。为了省去这样的麻烦,你可以使用-j MASQUERADE-j MASQUERADE告诉 iptables 总是将数据包的源地址修改为网络接口的 IP 地址(如果从 eth0 出去,就使用 eth0 的地址,如果从 eth1 出去,就使用 eth1 的地址)。下面是一个例子:

# 将所有从ppp0出去的数据包的源地址修改为ppp0的IP地址
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

DNAT

DNAT 是在 PREROUTING 链中修改数据包的目的地址,你可以在规则中使用-j DNAT--to-destination来使用 DNAT--to-destination是指定数据包的目的地址是什么。下面是 iptables 的一些例子:

# 将来自eth0的数据包的目的地址修改为5.6.7.8
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8
# 指定随意选用一段IP地址
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8-5.6.7.10
## Change destination addresses of web traffic to 5.6.7.8, port 8080.
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 5.6.7.8:8080

一些心得

PREROUTINGPOSTROUTING 两条链是游离在 Linux 系统之外的,所有一些修改数据包的逻辑可以放在这里面做。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含iptables的功...
    随风化作雨阅读 4,737评论 1 16
  • 1.安全技术 (1)入侵检测与管理系统(Intrusion Detection Systems): 特点是不阻断任...
    尛尛大尹阅读 2,459评论 0 2
  • iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防...
    yshenhn阅读 112,201评论 2 78
  • 我有过一次获奖经历,那是一次我永远也忘不掉的记忆。 那天晚上正在上语文课的时候,突然老师让我们全部都停笔,我不知道...
    码头小学刘宇恒阅读 176评论 0 0
  • 孔子说“唯小人与女子难养也”,那么或许对男人来说:“唯寂寞和真爱难融也”,影片开头,就用极其多旁观者客套和恭维,一...
    黄小骨阅读 630评论 0 3