iptables 详解
前言
最近在看Docker的一些知识,其中在Docker 容器内联或容器访问外部或外部访问容器章节,处处涉及到了iptables的一些知识。不甚了解,所以记录一下,全当作自己的学习笔记了。
iptables简介
iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。【来自百度百科】
在Linux的包过滤系统,也就是Linux防火墙,包含两部分,由netfilter 和 iptables 两个组件组成。
其中,netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
另外,iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables组成
iptables -> Tables -> Chains -> Rules
iptables将若干规则组成Chain,应用于网络包上。又因为不同的Chain处理的场景不同,又将这些Chain划分到不同的集合中,这些集合称之为table。
Linux提供了四种处理不同场景的table,它们分别是:filter,nat,mangle,raw。
iptables 四种table介绍
1 . filter
filter是默认的表。它包含三种Chain:INPUT , OUTPUT ,FORWARD,处理的数据,都是和本机有关的数据。
INPUT:处理流向本机的数据
OUTPUT:处理流出本机的数据。
FORWARD:将数据通过本机转发到本机的其他设备。
2 . nat
与本机无关。主要处理源与目的地址IP和端口的转换,它包含四种Chain(有文章说是三种,没有INPUT。本文作者使用阿里云centos 6.5): PREROUTING,INPUT,OUTPUT,POSTROUTING
3 . mangle
用于高级路由信息包,如包头内有更改(如tos改变包的服务类型,ttl包的生存时间,mark特殊标记)。包含五种Chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
4 . raw
Raw表用于处理异常,它具有2个Chain:PREROUTING ,OUTPUT。
上述五种Chain的介绍:
1、PREROUTING:进入netfilter后的数据包在进入路由判断前执行的规则。改变包内容(通常是改变D-IP)。
2、INPUT:当经过路由判断后,要进入本机的数据包执行的规则。
3、OUTPUT:由本机产生,需向外发的数据包执行的规则。
4、FORWARD:经过路由判断后,目的地不是本机的数据包执行的规则。与nat 和 mangle表相关联很高,与本机没有关联。
5、POSTROUTING:经过路由判断后,发送到网卡接口前。即数据包准备离开netfilter时执行的规则(通常是改变S-IP)。
iptables中的rules
Chain中的规则的格式,可以分为5个字段:
target prot opt source destination
总的来说,后面四个是判断一条规则的条件,只有在条件满足的情况下才可以执行target,否则将会执行下面的一条规则。
- Rules包括一个条件和一个目标(target)
- 如果满足条件,就执行目标(target)中的规则或者特定值。
- 如果不满足条件,就判断下一条Rules。
目标值(Target Values)
- ACCEPT – 允许防火墙接收数据包
- DROP – 防火墙丢弃包
- QUEUE – 防火墙将数据包移交到用户空间
- RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
【参考】
1 . http://drops.wooyun.org/tips/1424 比较详细的介绍了iptables 中的一些命令的使用
2 . http://blog.chinaunix.net/uid-26000296-id-4111127.html 从访问流程上介绍了iptables的作用。
3 . http://www.open-open.com/lib/view/open1410922014555.html 原理性知识(存在少许的问题)