iptables初探
一,前言
本来想起个名字叫做“小白都是怎么学习iptables的?”或者“你为什么还不了解iptables?”等等,就像简书上的头条文章,虽然被说成“标题党”也是名副其实,但是的确能吸引别人去阅读,提升阅读量(那些大V也确实是这么干的)。不过转念一想,我这小白所写的文章,稚不成书,还是少些人看的好:)。。。故改名iptables初探。意在记录自己学习iptables的过程,轻喷!
首先,iptables是防火强的一种,防火墙分为三大类:包过滤、代理和状态检测防火墙。在linux系统中大都采用包过滤技术来做防火墙,根据发展的先后又分为静态防火墙和动态防火墙,静态防火墙修改规则后需要重新启动防火墙,而动态不需要,修改即生效。今天我所学习的iptables就属于静态防火墙的一种,在REHL7中新纳入的firewall防火墙就属于动态防火墙。在实际应用中,iptables可以用来封包过滤、封包重定向以及NAT隐藏背后真实的服务器,起到保护的作用。
二,iptables原理
1,简介:
iptables其实应该叫做netfilter/iptables,由netfilter和iptables两部分组成,netfilter也称为内核空间,用来存储策略及响应策略,iptables是存在于用户空间的一种工具,用来编写策略。
2,表与链:
整个iptables策略的编写围绕着表(tables)和链(chains)的分层结构来进行,一张表下可以包含多条链。目前内置于iptables中的表有mangle、nat和filter三张,而我们常用的就是nat和filter,所以我这里就主要学习这两张表。两张表与其各自的链的功能如下表所示:
|
表(tables) |
链(chains) |
解释(explanation) |
|
nat |
prerouting |
在路由决策前由这个链来处理 |
|
output |
从本地发送的数据由这个链处理 |
|
|
postrouting |
用于转发和送出数据包 |
|
|
filter |
input |
用于过滤进入本机的数据包 |
|
forward |
处理经过本系统的报文(转发、路由等) |
|
|
output |
用于过滤从本机发出的报文 |
当一个数据包需要来到配置有iptabls的主机时,会经过如下过程:
1) 路由决策前,经过NAT的prerouting来处理;
2) 判断此数据包是否发送给本机,如果是,则经过FILTER的input来过滤,如果否,则通过FILTER的forward来路由转发;
3) 对于发送给本机的数据包,通过处理后,进入NAT的output链进行再处理,然后进入FILTER链的output进行过滤出,最后经由NAT的postrouting链送出数据包;
4) 对于不是发送给本机的数据包,通过forwar链处理后,由postrouting链送出。
数据流向大致如下图所示:

所以我们做的就是在表和链这里设置一些规则,让数据包来匹配这些规则,规则从上到下是一个表的样式,而数据包会一条一条的过滤,直到符合匹配,就同行,否则就按照默认规则处理。
三,通过实验验证iptables命令
1) 在centos7.2上安装iptables
挂载镜像,编写yum源
yum install iptables-services
systemctl unmask iptables
请确保firewalld为关闭状态(会与iptables冲突)
2) 验证iptables相关命令
命令格式:iptables [-t 表名] 选项 [链名] [条件] [-j 策略]
对表名来说,本实验中就是filter和nat表,默认情况下是filter
对选项来说存在以下的常用选项:
|
-L |
iptables -L 查看当前规则策略,没有指定表时,默认filter表 |
|
-F |
iptables -F 清空指定链规则 |
|
-A |
iptables -A 在指定链后面添加一条新规则 |
|
-D |
iptables -D 1 删除指定链第一条规则 |
|
-R |
替换指定链中的规则 |
|
-Z |
清空指定链中的所有计数 |
|
-N |
自定义一条链 |
|
-X |
删除自定义链 |
|
-P |
设定默认策略(将整个链DROP等 |
|
-E |
修改链的名字(只能修改自己添加的链) |
|
-I |
在指定链某一条规则前插入一条新规则 |
对策略来说,有如下策略:
|
ACCEPT |
允许该包通过 |
|
DROP |
丢弃该包,不做任何操作 |
|
REJECT |
拒绝该包,并返回消息 |
|
DNAT |
目标地址转换 |
|
SNAT |
源地址转换 |
|
REDIRECT |
重定向到另一个端口 |
|
MASQUERADE |
地址伪装 |
|
LOG |
将封包信息记录到日志/var/log |
试验环境:
|
主机名 |
IP |
角色 |
|
01 |
192.168.1.2 |
公网IP |
|
02 |
192.168.1.1 192.168.2.1 |
防火墙,边缘路由 |
|
03 |
192.168.2.2 |
服务器 |
1)03上做了http服务,现在要求01不能访问03的web服务,在02上配置iptables:
iptables -A FORWARD -s 192.168.1.2 -d 192.168.2.2 -p tcp -dport 80 -j REJECT

此时,01不能访问03的WEB服务,其他服务正常
2)我们想做一个源地址的转换, 内网多个客户端共用一个外网IP去访问服务器:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.1.0/24 -j SNAT --to-source 192.168.1.1

此时,再用01去访问03时,在03的httpd访问日志中,显示的不是01的地址,而是通过已经转换的192.168.1.1:

3) 目标地址转换,通常用于隐藏内部服务器的IP地址。比如在本例中,03是内部服务器,现在想实现的目标是用户通过02上的192.168.2.1来访问03的web服务,在02上配置NAT:
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d 192.168.2.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2

此时:elinks 192.168.2.1就是访问03的192.168.1.2这台服务器了。很好的将03进行隐藏。
【注】源地址转换必须在POSTROUTING上做,目标地址转换必须在PREROUTING上做。
四,结语
在企业中,会经常用到iptables来做NAT,已达到内网安全的目的。在本篇中,学到了iptables的命令格式及SNAT和DNAT的用法。在后续的文章中,会继续学习其他用法,并分析各种用法的原理。
iptables初探的更多相关文章
- iptables nat及端口映射
iptables nat及端口映射 发布: 2010-6-11 15:05 | 作者: admin | 来源: SF NetWork 门户网站 iptables 应用初探(nat+三层访问控制) ip ...
- OSSEC初探
OSSEC初探 概念: OSSEC是一款开源的基于主机的入侵检测系统(HIDS),它可以执行日志分析.完整性检验.windows注册表监控.隐匿性检测和实时告警.它可以运行在各种不同的操作系统上,包括 ...
- Snort初探
Snort初探 概念: Snort是一款开源的网络入侵防御系统(IPS),可以实时分析和记录网络数据包,你可以通过执行协议分析.内容搜索和匹配,从而发现各种网络攻击和可疑的探测.例如,缓冲区溢出.端口 ...
- 初探Docker CentOS 7.9 2009 Mini 操作系统环境初始化 和Docker初始化
初探docker 什么是docker?docker就是一种虚拟化技术,将一个服务虚拟化成一个拥有操作系统内核作为基石的快速使用服务.不用担心环境不同服务效果 不同. docker 官网可以从中央仓库中 ...
- iptables 及容器网络分析
本文独立博客阅读地址:https://ryan4yin.space/posts/iptables-and-container-networks/ 本文仅针对 ipv4 网络 iptables 提供了包 ...
- iptables
一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
随机推荐
- CQOI2015 解题报告
CQOI2015终于全做完了~~~,讲一下题吧 首先这套题比起其他省选还是比较水的,就是5道题比较蛋疼 T1:[CQOI2015]选数 这道题还是比较神的. 首先给个比较神的题解:popoqqq大神的 ...
- nginx负载均衡2
负载均衡2 网站是发展初期,nginx只代理了后端一台服务器,但由于网站名气大涨访问的人越来越多一台服务器实在是顶不住,于是我们加了多台服务器,那么多台服务器又怎么配置代理呢,这里以两台服务器为案例, ...
- 微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)
网上火热的“微软.NET年芳15”文章,我也得写点什么嘛,毕竟我还是现任的微软MVP. 摘录网上的“.NET 15周年”信息如下: 微软的 .NET 框架本周迎来了 15 岁生日..NET 的第一个版 ...
- ajax跨域请求时,sessionId不一样,导致无法记住登陆状态
遇到这样一个场景,就是前端的域是dev,请求接口时,接口的域是beta,即使在服务端设置了cookie存放的域,'COOKIE_DOMAIN' => '.roboming.com',虽然c ...
- 使用docker-compose 大杀器来部署服务 上
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- Java的容器类小结
Java的容器类其实就是集合类,只是为了不与Collection接口混淆,国内基本翻译为容器类. 容器类分为两种:独立元素序列的Collection和键值对的Map. Collection主要有如下几 ...
- vs2017 .net core WebApp 去掉ApplicationInsights
vs2017新建的 .net core WebApp都内置了这个遥测中间件进去,嗯,用AZURE的话是不错能无缝支持.但不用AZURE就没什么用了. 为了不占地方和提高一点点初始启动的速度,对新建的项 ...
- Jenkins+Git 持续集成
持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...
- 【Javascript】搞定JS面试——跨域问题
什么是跨域? 为什么不能跨域? 跨域的解决方案都有哪些(解决方法/适用场景/get还是post)? 一.什么是跨域? 只要协议.域名.端口有任何一个不同,就是跨域. ...
- iOS回顾笔记(06) -- AutoLayout从入门到精通
iOS回顾笔记(06) -- AutoLayout从入门到精通 随着iOS设备屏幕尺寸的增多,当下无论是纯代码开发还是Xib/StoryBoard开发,自动布局已经是必备的开发技能了. 我使用自动布局 ...