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

Linux入门攻坚——37、Linux防火墙-iptables-3

私网地址访问公网地址的问题,请求时,目标地址是公网地址,可以在公网路由器中进行路由,但是响应报文的目的地址是私网地址,此时在公网路由器上就会出现问题。公网地址访问私网地址的问题,需要先访问一个公网的地址,由公网地址在转换为私网地址。解决的方法有:nat和proxy。

NAT:Network Address Translation,此技术最初是为了安全性,隐藏本地网络主机。网络层+传输层;
proxy:代理,应用层;

NAT:
  SNAT:只修改请求报文的源地址;
  DNAT:只需改请求报文的目标地址;

iptables中的nat表三个链:
  PREROUTING:DNAT在这个链上,否则目标地址是nat服务器本身,直接到INPUT去了,所以一进入就要进行地址转换。
  OUTPUT:
  POSTROUTING:只有确定了路由后,才进行地址转换(如果是访问NAT服务器本身,则不需要转换),所以SNAT在这个链上。

关于SNAT与DNAT:


SNAT是源地址转换,DNAT是目标地址转换,都是从请求报文方面来说的,因为对于一个SNAT,都会对应一个响应报文的DNAT,对于一个DNAT,都会有一个响应报文的SNAT。上图中实线是请求报文流,虚线是响应报文流。

对于SNAT,主要用于内网主机访问外网服务器,从上图可以看出,如果不经过地址转换,请求报文是可以到达外网服务器的,但是外网服务器的响应报文,因为其目的地址是内网地址CIP,所以是无法在外网中路由的,无法返回响应报文,这就是需要SNAT的原因;另一个关键问题是对于防火墙来说,这个地址转换的位置在哪?如果是在PREROUTING转换,那如果这个请求报文就是给NATServer本身的,就会出现问题,此时根本不需要转换,都在一个内网中,所以,SNAT是在路由之后,在发出报文前进行地址转换,即在POSTROUTING将CIP转换为NATServer的外网地址FIP;此时的响应报文,其目的地址就是转换后的源地址FIP,可以到达NATServer,在到达NATServer后,第一步要进行目的地址转换,将FIP转换为CIP,即在PREROUTING转换,否则,进行路由后在转换,路由的结果可能就是错误的。

对于DNAT,主要用于内网主机提供服务的情景,外网主机访问内网主机服务器,从上图可以看出,内网主机提供的服务是映射在NATServer上,外网主机访问NATServer,如果不进行目的地址转换,请求报文达到NATServer后,NATServer根本就没有这个服务,请求失败,所以要在请求报文达到NATServer时,根据转换规则,先进行目的地址转换,即将请求报文的目的地址FIP转换为CIP,转换位置在PREROUTING上,然后通过路由达到内网主机CIP,而响应报文,其源地址是内网主机的地址CIP,在路由之后,响应报文发出NATServer前,要进行源地址的转换,由CIP转换为FIP,如果不转换,响应报文是能够到达外网主机的,但是因为其响应报文的源地址是CIP,外网主机根本没给这个地址发过请求,这个响应报文会被作为异常报文,可能就丢弃了。

所以,源地址转换都是在POSTROUTING,目的地址转换都是在PREROUTING。

proxy:代理,工作于应用层,获取客户端的请求报文,完全拆解报文后,获取请求内容,在自己构建一个请求,发送给服务器,然后接收服务器的响应报文,拆解报文,在重新构建一个响应报文给客户端。

NAT实现方式:
还是使用前面的拓扑:

SNAT实现:
F2上有httpd服务器,将其假设为外网服务器,F1为内网主机,F1要访问F2上的服务。
F1(内网主机)上的路由:

7.9(NATServer)上的路由:

F2(外网服务器)上的路由:

从F1访问F2的WEB服务,在F2上抓包:
访问的结果是在F1上无法访问F2上的httpd服务的页面:

F2上的抓包:

从抓包的结果可以看到,F1的请求报文到达了F2,F2也向F1发送了响应报文,但是因为F2没有F1的路由,即没有192.168.61.0的路由,送给了默认网关192.168.147.2,响应报文无法返回。这里要注意的是请求报文的源地址是192.168.61.129,响应报文的目的地址是192.168.61.129。

想要能够访问,需在F2上增加路由:
route add -net 192.168.61.0/24 gw 192.168.147.128
此时访问成功。

从F2的httpd日志中也能看到请求访问的主机地址:

现在将F2上的路由去掉:route del -net 192.168.61.1/24 gw 192.168.147.128

此时,F1又无法访问了,请求报文能够到达F2,F2的响应报文无法返回。

在7.9上(NATServer),做SNAT:
 iptables -t nat -A POSTROUTING -s 192.168.61.0/24 ! -d 192.168.61.0/24 -j SNAT --to-source 192.168.147.128
此时,在F1上又可以访问F2的WEB服务了,但是在F2上抓包:

访问的源地址变为NATServer的地址192.168.147.128,而不是F1的地址,响应报文的目的地址也变为192.168.147.128,而不是F1的地址。这就是SNAT。

DNAT测试:
清空nat表规则:

现在假定F2是内网的主机,提供web服务,而外网的主机F1要访问内网的服务,F1是无法通过内网的IP地址直接访问F2的服务。此时需要进行目的地址转换,即DNAT。
在网关上,即NATServer上声明
iptables -t nat -A PREROUTING -d 192.168.61.128 -p tcp --dport 80 -j DNAT --to-destination 192.168.147.129

在F2上增加默认路由,route add default gw192.168.147.128
此时,F1可以访问F2的服务,即外网访问内网的服务。curl http://192.168.61.128,在F2上抓包:

可以看到,访问的目的地址是192.168.147.129,而不是192.168.61.128。这就是DNAT,目的地址转换。

因为我们只是对80端口进行了转换,所以如果F1上访问ssh服务:ssh 192.168.61.128,则访问的是NATServer本身:

将22端口进行转换:
iptables -t nat -A PREROUTING -d 192.168.61.128 -p tcp --dport 22 -j DNAT --to-destination 192.168.147.129
再次访问:

这个应该是安全的原因,类似中间人攻击。在F2上抓包:

目的地址已经进行了转换。
端口转换:将第一条规则修改为192.168.61.128转换为192.168.147.129:8080
iptables -t nat -R PREROUTING 1 -d 192.168.61.128 -p tcp --dport 80 -j DNAT --to-destination 192.168.147.129:8080

对于源地址转换,有时候外网的地址经常变动,如ADSL拨号上网,此时可以使用MASQUEREAD,进行地址伪装,此时NATServer会找到合适的IP地址进行源地址转换:
iptables -t nat -A POSTROUTING -s 192.168.147.0/24 !-d 192.168.147.0/24 -j MASQUEREAD

自定义规则链及其使用,以及常用的一些规则:

iptables -N  clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 192.168.255.255 -p icmp -j DROP
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -d 192.168.147.128 -j RETURN

iptables -A INPUT -d 192.168.147.128 -j clean_in
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP

iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT

tcp_wrapper:tcp包装器

对基于tcp协议开发并提供服务的应用程序,提供的一层访问控制工具;tcp_wrapper是基于库调用实现其功能:libwrap库。

只能对本机内部程序(服务)进行访问控制。

判断服务是否能够由tcp_wrapper进行访问控制:
  1)动态编译:ldd命令;
  2)静态编译:strings命令查看应用程序文件,其结果中如果出现:hosts.allow和hosts.deny


在配置文件在为各服务分别定义访问控制规则实现访问控制:
  /etc/hosts.allow
  /etc/hosts.deny

先检查hosts.allow,后检查hosts.deny;

服务检查逻辑:
  client --> /etc/hosts.allow --> (Y) --> ALLOW
  client --> /etc/hosts.allow --> (N) --> /etc/hosts.deny --> (Y) --> DENY
                                                                                     --> (N) --> ALLOW

配置文件语法:
  daemon_list:client_list [:options]

  daemon_list:
    应用程序的文件名称,而非服务名;
    用用程序文件名称列表,彼此间使用逗号分隔;
      例如:sshd,vsftpd;  ALL表示所有服务;
  client_list:
    IP地址;
    主机名;
    网络地址:必须使用完整格式的掩码,不使用前缀格式掩码;类似192.168.0.0/16不合法;
    简短格式的网络地址:如192.168.  表示192.168.0.0/255.255.0.0
    ALL:所有主机;
    KNOWN
    UNKNOWN
    PARANOID

例如:vsftpd服务不允许192.168.147.129访问:在/etc/hosts.deny中,
vsftpd:192.168.147.129

在hosts.allow中匹配到的,允许访问,没有匹配到的,默认拒绝,然后在hosts.deny中进行匹配,deny中匹配到,则拒绝,否则,允许访问,即默认允许。

EXCEPT:除了
  hosts.allow
    vsftpd:172.16. EXCEPT 192.16.100.1
    vsftpd:172.16. EXCEPT 172.16.100.0/255.255.255.0 EXCEPT 172.16.100.1

[:options]
  deny:拒绝,主要用于hosts.allow文件中,实现deny的功能
  allow:允许,用于hosts.deny文件中,实现allow的功能
  spawn:启动额外应用程序;
vsftp:ALL :spawn /bin/echo `date` login attempt from %c to %s,%d >>/var/log/vsftpd.log
    %c:client ip  、%s:server ip 、%d:daemon name

对于telnet服务,因为在CentOS6上,是xinetd超级服务控制的,使用的deamon即不是xinetd,也不是telnetd,而是in.telnetd,是程序名。

相关文章:

Linux入门攻坚——37、Linux防火墙-iptables-3

私网地址访问公网地址的问题,请求时,目标地址是公网地址,可以在公网路由器中进行路由,但是响应报文的目的地址是私网地址,此时在公网路由器上就会出现问题。公网地址访问私网地址的问题,需要先访问一个公网…...

微服务架构面试内容整理-安全性-Spring Security

Spring Security 是 Spring 框架中用于实现认证和授权的安全模块,它提供了全面的安全解决方案,可以帮助开发者保护 Web 应用、微服务和 API 免受常见的安全攻击。以下是 Spring Security 的主要特点、工作原理和使用场景: 主要特点 1. 身份认证与授权: 提供多种认证方式,…...

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了,我基本上都是通过docker去管理一些容器如:mysql、redis、mongoDB等之类的镜像,还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…...

深度学习:广播机制

广播机制(Broadcasting)是 PyTorch(以及其他深度学习框架如 NumPy)中的一种强大功能,它允许不同形状的张量进行逐元素操作,而不需要显式地扩展张量的维度。广播机制通过自动扩展较小的张量来匹配较大张量的…...

音视频入门基础:FLV专题(25)——通过FFprobe显示FLV文件每个packet的信息

音视频入门基础:FLV专题系列文章: 音视频入门基础:FLV专题(1)——FLV官方文档下载 音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件 音视频入门基础:FLV专题…...

Openstack7--安装消息队列服务RabbitMQ

只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…...

day55 图论章节刷题Part07([53.寻宝]prim算法、kruskal算法)

前言:使用最小生成树的方法解决将所有节点连接起来所需的最小路径问题。 prim算法 Prim算法是一种贪心算法,从任意一个顶点开始构建最小生成树。每次选择当前已加入生成树的顶点中,距离最近的尚未加入生成树的顶点,直到所有顶点…...

LeetCode 93-复制 IP地址

题目链接&#xff1a;LeetCode93 欢迎留言交流&#xff0c;每天都会回消息。 class Solution {//定义结果集&#xff0c;返回最终结果List<String> rs new ArrayList<>();public List<String> restoreIpAddresses(String s) {//将字符串包装为可变长度的字…...

海底捞点单

单点锅底推荐&#xff1a; 番茄锅底通31 牛油麻辣通44 清汤麻辣备44 菌汤锅底通31 小吃&主食&#xff1a; 捞派捞面一黄金小馒头一茴香小油条 红糖枇杷一小酥肉 DIY锅底推荐&#xff1a; 1.寿喜锅&#xff1a;海鲜味酱4勺陈醋1勺蚝油2勺盐适量白糖7勺 芹菜1勺 2.麻辣锅底…...

It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models

翻译&#xff1a; 摘要 本文揭示了草图在扩散模型中的潜力&#xff0c;解决了生成式人工智能中直接草图控制的虚假承诺。我们重要的是使这个过程更加普及&#xff0c;让业余的草图也能生成精确的图像&#xff0c;真正实现“你画的就是你得到的”。一项初步研究强调了这一研究的…...

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…...

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的&#xff0c;用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式&#xff1a; npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…...

深度学习:nn.Linear

nn.Linear 是 PyTorch 中的一个线性层&#xff08;全连接层&#xff09;&#xff0c;用于将输入张量从一个维度空间映射到另一个维度空间。具体来说&#xff0c;nn.Linear 执行以下操作&#xff1a; outputinputweightTbias 其中&#xff1a; input 是输入张量。 weight 是权重…...

大数据新视界 -- 大数据大厂之 Impala 性能提升:高级执行计划优化实战案例(下)(18/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

常用的Anaconda Prompt命令行指令

一、环境管理 查看已安装的环境 conda env list 或 conda info --envs&#xff1a;列出所有已安装的Anaconda环境。 创建新环境 conda create -n env_name pythonx.x&#xff1a;创建一个名为env_name的新环境&#xff0c;并指定Python版本为x.x。 激活环境 conda activate env…...

如何低成本、零代码开发、5分钟内打造一个企业AI智能客服?

传统客服因员工效率低、时段需求波动大、数据管理费时费力等管理难题&#xff0c;导致难以满足用户需求&#xff0c;无法深入挖掘客服数据价值&#xff0c;造成客源流失。而智能体搭建的“智能客服”能借助大模型和知识库知识&#xff0c;助力实现数字化运营&#xff0c;破解企…...

全网最全最新最细的MYSQL5.7下载安装图文教程

一、MYSQL两种安装包格式 MySQL安装文件分为两种&#xff0c;一种是msi格式的&#xff0c;一种是zip格式的。zip格式相当于绿色版&#xff0c;不需要安装&#xff0c;只需解压缩之后就可以使用了&#xff0c;但是要进行配置。msi格式是安装版。 二、MYSQL官网下载 1.官网地址…...

NoSQL数据库与关系型数据库的主要区别

NoSQL数据库与关系型数据库在多个方面存在显著区别&#xff0c;以下是对这些主要区别的详细描述&#xff1a; 一、数据存储模型 关系型数据库&#xff1a;使用表格形式存储数据&#xff0c;每个表格由行和列组成&#xff0c;行表示记录&#xff0c;列表示字段。数据之间的关系…...

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天&#xff0c;好难过&#xff5e; 官方教程&#xff1a;https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述&#xff1a;https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…...

Oracle 11g rac 集群节点的修复过程

Oracle 11g rac 集群节点的修复过程 目录 Oracle 11g rac 集群节点的修复过程一、问题的产生二、修复过程1、执行 roothas.pl 命令2、执行 root.sh 命令3、查看集群信息4、查看节点2的IP地址5、查看节点2的监听信息 一、问题的产生 用户的双节点 Oracle 11g rac 集群&#xff…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…...