linux iptable 使用指南

Author: 北方人 LastUpdate : 2012-03-02 12:12:02


linux系统中,防火墙(Firewall),网址转换(NAT),数据包(package)记录,流量统计,这些功能是由Netfilter子系统所提供的,而iptables是控制Netfilter的工具.
iptables将许多复杂的规则组织成成容易控制的方式,以便管理员可以进行分组测试,或关闭、启动某组规则。

iptable能够为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。
iptable只读取数据包头,不会给信息流增加负担,也无需进行验证。

1. 术语解释

DNAT
Destination Network Address Translation 目标网络地址转换。 DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对同一个ip地址分配不同的端口,来决定数据的流向。
SNAT
Source Network Address Translation源网络地址转换。这是一种改变数据包源ip地址的技术, 经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解 决这个问题。

2. iptable 概述

2.1. iptable的链和表结构

如上图可以看出,iptable总体结构.

2.2. 5个链(chain)

PREROUTING
在数据包进入防火墙之后、路由判断之前对数据包进行修改
INPUT
在数据包被路由到本地之后,但在用户空间程序看到它之前对数据包进行修改
OUTPUT
用户空间程序处理数据包后,由本地发出,再次被路由之前更改数据包
FORWARD
在最初的路由判断之后、最后一次更改包的源地址之前对数据包进行修改
POSTROUTING
在所有路由判断之后,对数据包进行修改

注意: 链 是每个数据包流需要经过的不同环节,你可以在不同的环节根据需要设置不同的过滤策略,每个链的默认策略都是Accept

2.3. 4个表(table)

Mangle表
这个表主要用来mangle包,你可以使用mangle匹配来改变包的一些属性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(后续流量控制TC等)
Nat表
此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个 包会被这个链匹配,其后的包会自动被做相同的处理(DNAT,SNAT,MASQUERADE)
Filter表
此表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的.
iptalbe中,要用 -t 参数指定要操作哪个表,如果没有 -t 参数,就默认对filter表操作.
Raw表
优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

注意: 表 是规则的集合组,每个表中的规则条目是按顺序匹配的,你可以在数据包经过的不同环节设置规则,表的处理优先级:raw > mangle > nat > filter

2.4. 详细的数据包流程

从上图可以看出,数据包流环节和表的配合使用方法

3. iptable应用场景

上图是应用场景的简单拓扑描述,下面的应用场景举例,都以上图为参考.
系统启动的时候所有的默认策略都是ACCEPT,在下面的场景举例中,我们都是在这种前提下设定iptable的
下面每个场景举例都是独立的,没有相关联性的

3.1. 网关服务器安全策略

目标 : 网关服务器系统自生安全策略,只对内网用户开放22端口(sshd服务)

  #清空 filter table[root@localhost]# iptables -F -t filter[root@localhost]# iptables -X -t filter[root@localhost]# iptables -Z -t filter#清空 nat table[root@localhost]# iptables -F -t nat[root@localhost]# iptables -X -t nat[root@localhost]# iptables -Z -t nat#设置默认策略(INPUT链默认为DROP)[root@localhost]# iptables -t filter -P INPUT DROP[root@localhost]# iptables -t filter -P OUTPUT ACCEPT[root@localhost]# iptables -t filter -P FORWARD ACCEPT#回环接口(lo),默认accept[root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT#只对内网用户开放sshd服务[root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

说明: 防火墙的策略顺序一般都是 从 非信任 ==> 信任,默认关闭所有访问权限,然后按照需要逐条开放访问权限.

3.2. 共享上网(nat)

目标:使局域网的用户都可以访问外网的服务器

  [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

说明: SNAT 和 MASQUERADE 区别

SNAT : 不管是几个地址,必须明确的指定要SNAT的ip,适合网关服务器有固定地址或者是固定地址范围. MASQUERADE : 是针对ADSL动态拨号这种场景而设计,从服务器的网络接口上,自动获取当前ip地址来做NAT,这样就实现了动态SNAT地址转换

3.3. 内网的服务器对外服务(端口映射)

目标:使外网用户可以访问到局域网192.168.138.21这台HTTP服务

  [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward[root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

3.4. 在网关服务器进行透明代理

目标: 使局域网用户,访问外网web服务时,自动使用squid作web透明代理服务器。

  [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.138.1[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128 [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

linux iptable 使用指南相关推荐

  1. Linux 汇编语言开发指南

    Linux 汇编语言开发指南 肖文鹏 (xiaowp@263.net), 北京理工大学计算机系硕士研究生 本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究 ...

  2. Linux 桌面玩家指南:17. 在 Ubuntu 中使用 deepin-wine,解决一些依赖 Windows 的痛点问题

    Linux 桌面玩家指南:17. 在 Ubuntu 中使用 deepin-wine,解决一些依赖 Windows 的痛点问题 参考文章: (1)Linux 桌面玩家指南:17. 在 Ubuntu 中使 ...

  3. linux日志使用方法,Linux 日志终极指南

    原标题:Linux 日志终极指南 (点击上方公众号,可快速关注) 译者:伯乐在线 - 道法子 Linux 日志分析 虽然提取的时候,不总是和你想的一样简单,但是日志中有大量信息在等着你.在这部分,我们 ...

  4. linux调度全景指南

    | 导语 本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优 ...

  5. Linux 桌面玩家指南:09. X Window 的奥秘

    Linux 桌面玩家指南:09. X Window 的奥秘 原文:Linux 桌面玩家指南:09. X Window 的奥秘 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 Math ...

  6. linux epoll 开发指南-【ffrpc源码解析】

    linux epoll 开发指南-[ffrpc源码解析] 摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了.Epoll主要在服务器编程中使用,本 ...

  7. 对《RHCSA/RHCE Red Hat Linux认证学习指南(第6版):EX200 EX300》的评价

    近期看了清华大学出版社出版的一本Linux认证指导书--<RHCSA/RHCE Red Linux认证学习指南(第六版)>,推荐下. 首先这本书介绍的比较全面,既可以最为入门,也可以作为技 ...

  8. 数据简化社区Google和Linux代码风格指南(附PDF公号发“代码风格”下载)

    数据简化社区Google和Linux代码风格指南(附PDF公号发"代码风格"下载) 秦陇纪2019代码类 数据简化DataSimp 昨天 数据简化DataSimp导读:数据简化社区 ...

  9. Linux 桌面玩家指南:02. 以最简洁的方式打造实用的 Vim 环境

    原文:Linux 桌面玩家指南:02. 以最简洁的方式打造实用的 Vim 环境 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标 ...

  10. Linux内核模块编程指南(一)(转)

    Linux内核模块编程指南(一)(转) 当第一个原始的程序员在最开始的窑洞计算机之墙上凿过第一个程序时,那是一个在羚羊图案上画上"Hello, world"的程序.罗马人的编程书籍 ...

最新文章

  1. 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析
  2. ocp linux 基础要点
  3. 成都软件工程师python_为什么每个软件工程师都应该学习Python?
  4. 万级规模 K8s 如何管理?蚂蚁双11核心技术公开
  5. Dubbo入门之hello world(zookeeper做注册中心)
  6. PostgreSQL源码学习(1)--PG13代码结构
  7. (17)VHDL实现编码器
  8. linux vim 删除 h,Linux VIM 的使用快捷键之删除, 复制, 粘贴
  9. 2019中国旅游与酒店风云榜酒店业榜单公布
  10. 深度学习入门必看-手写数字识别
  11. 前端轻量级的toolTip插件-Tippy.js
  12. php 获取农历,PHP获取农历、阳历转阴历
  13. Syntactic sugar Syntactic salt
  14. excel文件损坏修复绝招_Excel被删除并清空,会计别哭,一招拯救!
  15. 如何编写高质量的Java代码
  16. CF31D Chocolate 解题报告 *
  17. linux视频处理速度,Linux下视频处理
  18. 关于麒麟系统的兼容性问题
  19. arduion控制42步进电机
  20. 【190223】基于MWP的VC++所播放器源程序源代码

热门文章

  1. android自动画廊,Android3D画廊效果与自动轮播Banner
  2. windows强制删除文件或者程序
  3. 介绍两种简单实用的信道编码——CRC校验和汉明码
  4. linux下Js加载so,JavaScript文件加载器LABjs API详解
  5. 一文搞定权限设计模型(RBAC,ABAC)超详细图文解析
  6. 智慧体检中心管理系统降低管理成本提高管理效率
  7. 什么表示计算机的存储容量,存储容量
  8. 认识智慧城市顶层设计的MCS模式
  9. 计算机网络---网络编程套接字(二)
  10. 图算法(十一):紧密中心度算法(Closeness Centrality)【适用场景:社交网络中关键节点发掘】【计算一个节点到所有其他可达节点的最短距离的倒数再累积归一化】【值越大,节点越靠近图中心】