iptables是一个配置Linux内核防火墙的命令行工具,它基于内核的netfilter机制。新版本的内核(3.13+)也提供了nftables,用于取代iptables。

netfilter

netfilter是Linux内核的包过滤框架,它提供了一系列的钩子(Hook)供其他模块控制包的流动。这些钩子包括

  • NF_IP_PRE_ROUTING:刚刚通过数据链路层解包进入网络层的数据包通过此钩子,它在路由之前处理
  • NF_IP_LOCAL_IN:经过路由查找后,送往本机(目的地址在本地)的包会通过此钩子
  • NF_IP_FORWARD:不是本地产生的并且目的地不是本地的包(即转发的包)会通过此钩子
  • NF_IP_LOCAL_OUT:所有本地生成的发往其他机器的包会通过该钩子
  • NF_IP_POST_ROUTING:在包就要离开本机之前会通过该钩子,它在路由之后处理

iptables

iptables通过表和链来组织数据包的过滤规则,每条规则都包括匹配和动作两部分。默认情况下,每张表包括一些默认链,用户也可以添加自定义的链,这些链都是顺序排列的。这些表和链包括:

  • raw表用于决定数据包是否被状态跟踪机制处理,内建PREROUTING和OUTPUT两个链
  • filter表用于过滤,内建INPUT(目的地是本地的包)、FORWARD(不是本地产生的并且目的地不是本地)和OUTPUT(本地生成的包)等三个链
  • nat用表于网络地址转换,内建PREROUTING(在包刚刚到达防火墙时改变它的目的地址)、INPUT、OUTPUT和POSTROUTING(要离开防火墙之前改变其源地址)等链
  • mangle用于对报文进行修改,内建PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING等链
  • security表用于根据安全策略处理数据包,内建INPUT、FORWARD和OUTPUT链
Tables↓/Chains→ PREROUTING INPUT FORWARD OUTPUT POSTROUTING
(routing decision)
raw
(connection tracking enabled)
mangle
nat (DNAT)
(routing decision)
filter
security
nat (SNAT)

所有链默认都是没有任何规则的,用户可以按需要添加规则。每条规则都包括匹配和动作两部分:

  • 匹配可以有多条,比如匹配端口、IP、数据包类型等。匹配还可以包括模块(如conntrack、recent等),实现更复杂的过滤。
  • 动作只能有一个,通过-j指定,如ACCEPT、DROP、RETURN、SNAT、DNAT等

这样,网络数据包通过iptables的过程为

其规律为

  1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,在PREROUTING链中我们有机会修改数据包的DestIP(目的IP),然后内核的"路由模块"根据"数据包目的IP"以及"内核中的路由表"
    判断是否需要转送出去(注意,这个时候数据包的DestIP有可能已经被我们修改过了)
  2. 如果数据包就是进入本机的(即数据包的目的IP是本机的网口IP),数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它
  3. 本机上运行的程序也可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROTING链输出(注意,这个时候数据包的SrcIP有可能已经被我们修改过了)
  4. 如果数据包是要转发出去的(即目的IP地址不再当前子网中),且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出(选择对应子网的网口发送出去)

iptables示例

查看规则列表

iptables -nvL

允许22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许来自192.168.0.4的包

iptables -A INPUT -s 192.168.0.4 -j ACCEPT

允许现有连接或与现有连接关联的包

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

禁止ping包

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

禁止所有其他包

iptables -P INPUT DROP
iptables -P FORWARD DROP

MASQUERADE

iptables -t nat -I POSTROUTING -s 10.0.0.30/32 -j MASQUERADE

NAT

iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT   -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I OUTPUT -d 55.55.55.55/32 -j DNAT --to-destination 10.0.0.30
iptables -t nat -I PREROUTING -d 55.55.55.55/32 -j DNAT --to-destination 10.0.0.30
iptables -t nat -I POSTROUTING -s 10.0.0.30/32 -j SNAT --to-source 55.55.55.55

端口映射

iptables -t nat -I OUTPUT -d 55.55.55.55/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.3:80
iptables -t nat -I POSTROUTING -m conntrack ! --ctstate DNAT -j ACCEPT
iptables -t nat -I PREROUTING -d 55.55.55.55/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.3:80

重置所有规则

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

参考文档

  • A Deep Dive into Iptables and Netfilter Architecture
  • http://www.netfilter.org/
  • Linux数据包路由原理、Iptables/netfilter入门学习

iptables/netfilter相关推荐

  1. Linux系统中的防火墙的实现:iptables/netfilter

    防火墙:包括软件防火墙(基于iptables/netfilter的包过滤防火墙)和硬件防火墙,在主机或网络边缘对经由防火墙的报文以一定条件进行检测过滤的一系列组件. Linux系统中的防火墙的实现: ...

  2. Linux网络架构: XDP, iptables/netfilter和iproute2/tc/ip/Qdiscs

    本文目录 1.架构框图 2.网络架构分成三大块 3.网络架构-----对应的配置工具-----对应的原理与概念 说到Linux的网络架构,就离不开谈...这些东西.这几个概念很容易混淆起来,但如果仔细 ...

  3. 深入浅出Linux内核网络协议栈|结构sk_buff|Iptables|Netfilter丨内核源码丨驱动开发丨内核开发丨C/C++Linux服务器开发

    深入浅出Linux内核网络协议栈 视频讲解如下,点击观看: 深入浅出Linux内核网络协议栈|结构sk C/C++Linux服务器开发高级架构师知识点精彩内容包括:C/C++,Linux,Nginx, ...

  4. Linux Kernel TCP/IP Stack — L3 Layer — netfilter/iptables 防火墙

    目录 文章目录 目录 iptables/netfilter 框架 iptables-service iptables 指令应用 查看规则 添加规则 删除规则 修改规则 保存和加载规则 常规初始化配置 ...

  5. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)

    文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...

  6. Linux网络防火墙:iptables与netfilter

    目录 netfilter iptables iptables示例 nftables 参考文档 iptables是一个配置Linux内核防火墙的命令行工具,它基于内核的netfilter机制.新版本的内 ...

  7. netfilter/iptables

    参考:tcp/ip协议 1.Linux框架概念 1.1.工作流程图 1.2.功能: ①过滤(filter) ②修改源ip.目标ip(nat) ③拆解报文.修改报文标记.重新封装(mangle) ④关闭 ...

  8. 企业防火墙之iptables

    1.1 企业中安全优化配置原则 尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务. 大并发的情况,不能开iptables,影响性能, ...

  9. Linux iptables防火墙设置与NAT服务配置

    Linux iptables防火墙设置与NAT服务配置 - 摘要: linux教程,NAT服务器,iptables防火墙设置与NAT服务配置, 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组 ...

最新文章

  1. 关于网站下拉导航的设置
  2. 盘点我跳过的科研天坑,进坑就是半年白干
  3. TypeError: __init__() got an unexpected keyword argument #34serialized_options #34
  4. 知识图谱(二)——知识表示
  5. 不要把异常当做业务逻辑,这性能可能你无法承受
  6. equals和== 的用法
  7. MySQL课堂练习 20162315
  8. SQL数据库“单个用户”不能访问,设置为多个用户的解决方法
  9. redis作用_Java高级架构笔记——实现故障恢复自动化:详解Redis哨兵技术
  10. 手机12306买卧铺下铺技巧_12306订下铺有什么技巧?
  11. 轻松让Ubunt虚拟机访问windows宿主机(本地硬盘)
  12. 微信公众号模板消息内容key提取代码
  13. 在学校计算机上填报志愿,广州小升初电脑派位如何填报志愿?
  14. 苹果7p最佳系统版本_苹果代码中发现, iPhone12 刘海没了!
  15. java接口可以写方法体吗_JDK1.8接口中可以写方法体
  16. 归并排序 - 维基百科,自由的百科全书
  17. winform中TreeView显示树状图
  18. 专家呼吁禁止杀手机器人
  19. Node.js中使用百度统计API统计站点的访问量、访客数、IP数相关信息
  20. Java 输入两个日期,计算出期间的周数

热门文章

  1. error: identifier “AT_CHECK“ is undefined
  2. 机器学习算法---微积分与矩阵
  3. 2022新PHP赞/易支付系统源码+全新UI界面
  4. SPSS Modeler18.0数据挖掘软件教程(三):逻辑回归分析
  5. 简便的日语手写输入工具(免安装版)
  6. QGIS基本功 | 13 地球的形状及数学模型
  7. 【姿态估计】PCK(Percentage of Correct Keypoints)指标及代码实现
  8. chrome如何查看页面内存占用率内存泄漏情况
  9. 坐标系转换工具类Java版Js版
  10. java编程计算器程序代码_即将步入大学的同学们注意了,初学编程,这些你需要认真铭记...