iptsbles系列一

iptables系列之基础原理

linux:网络防火墙 
  netfilter:frame 框架 网络过滤器 
   iptables:数据报文过滤,NAT,mangle等规则生成的工具。


网络知识:
   IP报文首部
   tcp报文首部

 ip:tcp:http

IP报文首部:
  版本号4 头部长度4 服务类型8 总长度16 
  段标识符16    R1 DF1 MF1 片偏移13
  TTL8  协议8    首部校验和
           源ip32
           目的ip32
          可选
          数据
分段和重组
DF:don't fragment 
MF:more fragment
片偏移:8的整数倍
协议:封装的报文的协议
icmp:3层协议直接使用IP
       udp 17 tcp 69
       
端口号:0--65535 
 0---1023 系统
 >=5000用户 


tcp:有状态的协议,三次握手

TCP首部

      源端口16     目的端口16
             序列号32
             确认号32
头部长度4 R6 URG1 ACK1 PSH1 RST1 SYN1 FIN1     窗口大小16 
校验和16      紧急指针 
         选项    
        数据   
             
             
             
注意:数据的流向
序列号:发送方告诉接受方发送的数据的编号
确认号:接受方期望接受下一个序列的第一个序号。
流控:滑动窗口。
重传;计时器
URG:紧急指针是否有效
ACK:说明确认号是否有效
PSH:推送,要优先处理的数据
RST:重置 
SYN:同步请求,建立连接 
FIN:断开连接

转换为能够通过网络发送的数据格式 
  文本
  二进制
  
TCP的三次握手 
TCP的四次断开

被动打开:closed---->listen 
主动打开:closed---->syn_sent 

listen--->SYN_RCVD---->established 
closed---->syn_sent---->established

三次握手 四次断开

TCP的有限状态机

TCP的状态转移:
主动关闭方:
established--->fin-wait-1----->fin-wait-2---->time-wait---->closed 
被动关闭方:
established---->closed-wait---->last-ack------>closed 

2MSL:最长报文段寿命 

fin-wait-1---->closing--->time-wait--->closed 

防火墙

工作在主机或网络的边缘,对进出主机或网络的数据报进行检查与监控,并且根据事先定义的规则,匹配其规则,采取定义的处理的动作进行操作的组件。

防火墙:硬件,软件,规则(匹配标准,处理办法)
framework:框架  (不防家贼)

默认规则:
   开放:堵
   关闭:通 
服务器:默认允许已知,拒绝未知    
规则:匹配标准 
   IP:源ip,目标ip  
   TCP/UDP:sport,DPORT,URS,ACK,PSH,RST,SYN,FIN 
   ICMP:icmp-type 控制消息报文协议 报文类型 
   
数据报文过滤:
      
网络功能:是内核空间实现的

内核中为用户空间中命令预留一些空间
在内核中TCP/IP的模块上开放一些位置,只是开放给用户空间可以编写防火墙规则的命令。可以实现用户中的命令可以直接操控内核空间的。
内核中的工作框架,用户空间中的管理工具。
syscall:可以和内核直接打交道。

linux2.0 
   ipfw/firewall 
   
linux2.2 
    ipchain/netfilter,firewall 
 
linux2.4 
    iptables(用户空间中可以写规则的用户空间中的应用,规则生成器)/netfilter(内核中可以放置的空间)   
内核中netfilter

       TCP/IP模块
网卡(拆帧)--->IP---本机->进程--->
                 |----->转发--->网卡
IP---->网卡--->用户 

报文的流向类型:(取决于IP)

1.从外面进入主机内部到达进程
2.本机内部出去的报文
3.通过主机进行转发的

检查路由表 ,路由决策

路由决策发生在数据包文件被网卡接受后进入主机后,进入TCP/IP协议栈模块时进行路由决策。

上述的三个位置是内核空间让iptables在内核空间中放置规则的地方。

进,出,转发

/proc/sys/net/ipv4/ip_forward 

-s 0.0.0.0 -d 172.16.100.7 reject 

hook function:钩子函数
netfilter设计者放在TCP/IP上的钩子函数。

自上而下,挨个检查,匹配前一个了,就不检查下面的了。

规则定义技巧:
 若两条规则不相关,就将范围大的规则放在上面,匹配的可能性大。(http访问频繁的放在上面。)
 若两条规则相关,则将范围小的规则放在上面,防止规则覆盖与疏漏。

hook function:5个
路由之前的位置
报文在即将转发之前的位置 做地址转换的

通俗的说,netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)。

IP层的五个HOOK点的位置
[1]:NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验
和等检测), 目的地址转换在此点进行;
[2]:NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行;
[3]:NF_IP_FORWARD:要转发的包通过此检测点,FORWARD包过滤在此点进行;
[4]:NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的源地址转换功能(包括地址伪装)在此点进行;
[5]:NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。

netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

框架

netfilter提供了一个抽象、通用化的框架[1],作为中间件,为每种网络协议(IPv4、IPv6等)定义一套钩子函数。Ipv4定义了5个钩子函数,这些钩子函数在数据报流过协议栈的5个关键点被调用,也就是说,IPv4协议栈上定义了5个“允许垂钓点”。在每一个“垂钓点”,都可以让netfilter放置一个“鱼钩”,把经过的网络包(Packet)钓上来,与相应的规则链进行比较,并根据审查的结果,决定包的下一步命运,即是被原封不动地放回IPv4协议栈,继续向上层递交;还是经过一些修改,再放回网络;或者干脆丢弃掉。

NAT:network address transfer

sip:172.16.100.6 dip:100.2.2.1------>sip:12.1.1.6 dip:100.2.2.1 数据报文出去修改地址  源地址转换 
返回的响应的报文:
   sip:100.2.2.1 dip:12.1.1.6 ----->sip:100.2.2.1 dip:172.16.100.6  
   目标地址转换
注意:主机内部维护着一张地址映射表。

源地址转换是在报文即将离开网卡的时候修改源地址。
目标地址转换是在报文刚刚进入网卡的时候修改目标地址。

SNAT:
DNAT:

NAT
静态转换
动态转换 
端口多路复用(PAT)
ALG(Application Level Gateway),即应用程序级网关技术
hook function:钩子函数
   prerouting
   input
   output
   forward
   postrouting
规则链:
    PREROUTING
    INPUT 
    OUTPUT 
    FORWARD 
    POSTROUTING 
filter(过滤): 表
    INPUT 
    OUTPUT 
    FORWARD
nat(地址转换):表
  PREROUTING
  OUTPUT   
  POSTROUTING 
mangle(修改报文首部,拆开,修改,封装):表
      PREROUTING 
      INPUT 
      OUTPUT 
      FORWARD
      POSTROUTING 
raw():
     PREROUTING 
     OUTPUT 
     
注意:不同功能的不能放在一起。
  iptables: 

数据包过滤顺序:
raw:PREROUTING 
mangle:PREROTING
nat:PREROUTING -------|
                     \|/
       |--------  路由选择--------------|
      \|/                              \|/                   
magle:INPUT                         mangle:FORWARD
filter:INPUT                        filter:FORWARD 
       \|/                                |
       路由选择                           |
        \|/                               |
raw:  OUTPUT                              | 
mangle:OUTPUT                             |
nat:OUTPUT                                | 
filter:OUTPUT                             |
        |                                 | 
        |                                 | 
        |------->  mangle:POSTROUTING <---| 
                   nat: POSTROUTING
iptables:
   四个表五个链
   表:raw,mangle,nat,filter 
   链:PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING 

  itables:
   可以使用自定义链:
  一个钩子函数hook function就是一个链。
自定义链只有被默认链调用才可以使用。
自定义
自定义链是为了精简链,调高链的效率。

可以使用自定义链,但是在被调用是才能发挥作用,而且如果没有自定义链中任何规则匹配,还应该有返回机制:

  用户可以删除自定义空链
  不可以删除默认链
  
每条规则都有两个内置计算器
    被匹配到的报文个数。
    被匹配的报文大小之和。
规则:匹配标准,处理动作
iptables [-t table] subcommand CHAIN [num] 匹配标准 -j 处理办法
匹配标准:
  通用匹配
  扩展匹配(使用扩展模块,依赖于模块进行匹配)
           隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}
           显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能。
           
 匹配标准: 
   通用匹配:
     -s,--src :指定源地址
     -d,--dst :指定目标地址
     -p {tcp|udp|icmp}:指定协议
     -i interface:指定数据报文流入的接口
          可用于定义标准的链:PREROUTING,INPUT,FORWARD 
     -o interface:指定数据报文流出的接口
        可用于定义标准的链:OUTPUT,POSTROUTING,FORWARD 

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 1 前言 防火墙(Firewall),就是一个隔离工具,工作于主机或者网络的边缘,对于进出本主机或本网络的报文,根...
    魏镇坪阅读 6,954评论 1 23
  • Teredo 原理概述 http://www.ipv6bbs.cn/thread-144-1-1.html (出处...
    我是叶问小盆友阅读 1,959评论 0 1
  • 1.安全技术 (1)入侵检测与管理系统(Intrusion Detection Systems): 特点是不阻断任...
    尛尛大尹阅读 2,461评论 0 2
  • 防火墙的概念iptables的简介iptables命令网络防火墙NATfirewalld服务 一、防火墙的概念 (...
    哈喽别样阅读 1,816评论 0 1