当前位置: 首页 > news >正文

iptables防火墙 --Linux详解

在实际运维工作中,哪里还有单纯的服务器执行工作的,一般都是服务器提供一定的网络服务来让一些客户机进行访问。那么,这时候网络问题是不是就显得尤为重要了呢???

既然服务器暴露在互联网上,我们是不是要防止服务器被攻击?是不是要限制访问服务器的客户端用户?是不是要设置一定的规则来管理我们的访客呢?没错,这就用到了我接下来要讲解的一项Linux运维人员不得不知的技术--iptables防火墙。

wKioL1hBI8SiC9PAAAAkW0_6_LA524.png


如上图所示:防火墙分为软件防火墙和硬件防火墙两种,其中,硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙内的操作系统主要用于过滤数据包并将其他不必要的功能拿掉。因为是单纯的物理防火墙,因此数据包过滤效率最高。而我们平时工作中最长敲的那个命令iptables其实是软件防火墙,很多资料上面说的都特么太难理解了,其实防火墙说白了就是一种保护机制,用于过滤进入主机的数据包。

下面我介绍一下应用最多的一种软件防火墙--Netfilter。

其原理就是Linux内核通过Netfilter模块来实现网络访问控制。

iptables就是通过调用这种Netfilter模块来实现网络访问控制功能,大家需要知道的是iptables的组成:

四张表 + 五条链 + 匹配属性 + 规则

这里我们主要讲解最长用的两张表:filter和NAT

五条链(过滤点)分别是:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING

规则分别是:ACCEPT、REJECT、DROP

注意:REJECT和DROP都是拒绝访问的意思,但是REJECT会返回一个提示信息,而DROP则是对数据包直接丢弃。


wKioL1hBLMGRdhU4AAJNy-_UDpY903.png


注释:

① INPUT :入向的数据包

② OUTPUT :发出的数据包

③ FORWARD :数据包转发

④ PREROUTING :路由前修改目标IP地址

⑤ POSTROUTING :路由后修改源IP地址


实际流程图如下:

wKiom1hBLfDwj1uvAAGIX8b4xlw733.png



下面介绍下iptables的常用功能:

⑴ 做为服务器使用:

过滤发送到本机的数据包:INPUT链、filter表

过滤从本机发出的数据包:OUTPUT链、filter表


⑵ 做为路由器使用

过滤转发的数据包:FORWARD链、filter表

对数据包的源、目标IP地址进行修改(NAT功能):PREROUTING链和POSTROUTING链、NAT表



其规则如下:

wKiom1hBL5DAGBFTAANChs_SU0E347.png

还有三点注意事项:

1.没有指定规则表则默认指filter表。

2.不指定规则链则指表内所有的规则链。

3.在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理。


iptables命令用于管理防火墙的规则策略,格式为:“iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]”。

表格为读者总结了几乎所有常用的iptables参数,不用记朋友,忘记了就来查就行了。记住,我们做运维的只要能解决问题就行。


参数

作用

-P

设置默认策略:iptables -P INPUT (DROP|ACCEPT)

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I num

在规则链的头部加入新规则

-D num

删除某一条规则

-s

匹配源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i 网卡名称

匹配从这块网卡流入的数据

-o 网卡名称

匹配从这块网卡流出的数据

-p

匹配协议,如tcp,udp,icmp,icmp就是控制ping这个命令的。

--dport num

匹配目标端口号

--sport num

匹配源端口号


下面我给你们来几个实例操作一下:

模拟训练A:仅允许来自于192.168.10.0/24域的用户连接本机的ssh服务。

wKiom1hBOxqCUwqSAAAdB8R1XTY783.png

模拟训练B:不允许任何用户访问本机的12345端口。

wKiom1hBO7nirJokAAAfssE6J3U392.png

模拟实验C(答案模式):拒绝其他用户从”eno16777736“网卡访问本机http服务的数据包。

wKioL1hBPFqBLsr5AAAO9ZMfasE232.png

模拟训练D:禁止用户访问www.abc.com

wKiom1hBPUmTfvuzAAAMZRGCNR0413.png


模拟训练E:禁止IP地址是192.168.10.10的用户上网

wKioL1hBPbiQjR2cAAAT3BD3nUM987.png




下面我来给大家讲解一下如何进行NAT的设置:

NAT即网络地址转换,其作用就是用来修改数据包的IP地址的。

NAT分为两种:

① SNAT:源地址转换,伪装内部真实的地址(我们一般经常提到的NAT方式就是这一种)。SNAT技术可以让多个内网用户通过一个公网IP进行上网,也就是把原来的内网地址伪装成公网IP。

SNAT搭配的链是POSTROUTING

② DNAT:目标地址转换,一般用于跳转。简单的说,假如说我们有一个www服务器对外提供服务,但是这个服务器的IP是假的,我们只是为了通过这个服务器进行跳转到另外一台真正的www服务器上,以达到保护真正服务器的目的,这时候就会用到DNAT技术。

DNAT搭配的链是PREROUTING



我们先来看一下SNAT的用法:

操作一:动态伪装源IP地址

wKioL1hCfHbiyCDuAAAMWN3jtGU571.png

其中,MASQUERADE是动态伪装的意思。


操作二:隐藏源IP地址为1.2.3.4

wKiom1hCfQbAAwnkAAALr1AKVmo391.png



接下来是DNAT的用法:

前面已经说过DNAT是目标地址转换,也就是修改数据包的目标IP地址的意思。OK,我们接下来做个实例:

操作一:跳转到网页服务器192.168.1.10上

wKioL1hCbq7jeeZWAAAQrhR6zvw999.png



最后再来介绍最后一种技术:外流量均衡技术。

比如将一台主机作为网站的前端服务器,将访问流量分流至内网中3台不同的主机上。

① iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.10:80


② iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.11:80


③ iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.10.12:80



本文转自 Super康 51CTO博客,原文链接:http://blog.51cto.com/zhengkangkang/1879175,如需转载请自行联系原作者

相关文章:

  • CentOS 7.2 安装图解教程
  • MongoDB主从
  • Linux系统使用lvm扩展根分区
  • 【人工智能】 火爆的机器学习和人工智能,为何在金融业四处碰壁?
  • 定制你的敏捷方法:以结果为导向
  • Java并发编程(六)发布与逸出
  • linux 查看网卡流量的方法
  • 自己制作 XP With SP3 系统光盘 包括驱动SATA集成AHCI驱动
  • 使用Maven运行单元测试
  • 创建服务
  • python01 用户交互程序
  • Mongodb 3.2 Manual阅读笔记:CH9 存储
  • 第101天:CSS3中transform-style和perspective
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • RxJS: 简单入门
  • [case10]使用RSQL实现端到端的动态查询
  • [nginx文档翻译系列] 控制nginx
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android系统模拟器绘制实现概述
  • axios 和 cookie 的那些事
  • E-HPC支持多队列管理和自动伸缩
  • Git同步原始仓库到Fork仓库中
  • gulp 教程
  • Iterator 和 for...of 循环
  • Java-详解HashMap
  • node入门
  • Redis学习笔记 - pipline(流水线、管道)
  • Spark RDD学习: aggregate函数
  • spark本地环境的搭建到运行第一个spark程序
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 初识 webpack
  • 从0实现一个tiny react(三)生命周期
  • 大型网站性能监测、分析与优化常见问题QA
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 配置 PM2 实现代码自动发布
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Semaphore
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​Python 3 新特性:类型注解
  • #宝哥教你#查看jquery绑定的事件函数
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)c52学习之旅-中断实验
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (译)2019年前端性能优化清单 — 下篇
  • (转)EOS中账户、钱包和密钥的关系
  • (转)大型网站的系统架构
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载