iptables防火墙(三)

第十三章 iptables防火墙(三)

13.3 iptables实现NAT

13.3.1 SNAT配置

NAT(net address translation)网络地址转换,功能是为了实现内网访问公网的。我们知道,IPv4由于可用ip数量有限,不能满足于全球主机网络通信的需求,所以人们设计了内、公网分类的方式。即有些IP仅允许在企业内部局域网使用,不同企业的局域网允许使用相同的IP段。这些IP我们称之为内网IP,内网IP共有以下三大段:

A类:10.X.X.X 共一个

B类:172.16.X.X -- 172.31.X.X 共32个

C类:192.168.0.X– 192.168.255.X 共255个

除了这些内网IP外,其他IP都属于公网ip。公网上的路由器,内部都做了一个规则,审核所有经过的数据包,如果数据包中的源ip或目的ip中出现了内网ip,则立即会被路由器丢弃,无法到达接收方。所以,内网ip只能在内部局域网内使用,是不允许上公网的,公网上只支持公网ip间的通信。因此,内网主机为了能够访问公网,必须在局域网的网关路由器上开启nat功能。具体原理先参看下图:

如图,客户机B访问web网站时,封装的数据包中源port 2000、目的port 80、源ip 10.2、目的ip 202.0.0.1,因为源ip是内网地址,所以会被公网屏蔽,所以必须由路由做nat转换。数据包传递给路由器后,路由器开启一个nat代理进程(假设端口是3000),并以自己外网卡的身份代替主机B上网,会把数据包中的源port、源ip改为自己的代理信息,则数据包可以在公网传输了。同时将转换信息记录到缓存中,公网服务器回复时,会回复到路由器外网卡上,目的port也是nat代理进程的端口(即3000),路由器再查找缓存,找到对应的内网主机,转发给主机B,则内网主机上网成功。若同时有内网其他主机也请求访问公网,则路由器会新开启一个nat进程,端口也是新号(如3001),通过不同的端口号,对应不同的内网客户端。同一客户端的多个进程,路由器也会开多个nat进程,使用不同端口,一一对应,完成代理访问。因为,代理时是对数据包中的源地址做转换的,所以又称为SNAT功能。

iptables中还有两个链:POSTROUTING、PREROUTING,负责代理。iptables –L时是看不到这两个链的,需要在命令后加-t nat参数,表示专项查看nat链。下面来看一下具体命令:

iptables -F

iptables -L -t nat ---查看nat链

iptables -F -t nat ---清空nat链

iptables -t nat -A POSTROUTING -o ens33 -s 192.168.10.0/24 -j SNAT --to-source 202.0.0.2 --- 开启源地址代理snat

注: POSTROUTING是snat的专用链 -o 指定外网卡 -s 指定代理的内网段 -j SNAT 表示做源地址代理转换 --to-source 指定数据包中源ip转化成的ip,即外网卡ip。

iptables -L -t nat ---再次查看nat链,可见加入的代理规则了

现在内网客户端可访问web网站了。访问后,在客户端B上我们使用netstat -n 查看正在通信的连接可见到连接信息:

图中可见,源地址、目的地址的信息,即是数据包中封装信息。

然后到web服务器端,同样使用netstat–n命令查看访问:

可见,服务器收到的是路由器的请求。

注:两张图中,会发现客户端的端口都是1036,其实这只是路由器的默认设置:路由器为了便于对应,nat进程默认都使用与客户端进程的相同进程号,但是如果进程号已被占用,则会再使用另一个端口号,也就是说并不是必须要和客户端进程号一致。

PS:为了方便演示,我这里使用的是windows的客户端与web服务器,读者也可以使用Linux系统,效果是一样的。

13.3.2 DNAT端口映射

上个实验,是服务器在公网上,客户端在内网。但是如果反过来,如果web服务器在内网,想让公网的客户端访问呢?由于内网在公网上是被屏蔽的,所以公网客户端是无法直接访问内网服务器,那同样也需要路由器做代理。

可以想象,公网客户端最远能够访问到路由器的外网卡,所以可以借助于nat,在外网卡上,手动开启一个端口,假设8000,并设置8000端口被访问时,引导到内网的web服务器上。这种引导被称为端口映射。

端口映射的封装如图所示,可见路由器这时是做的目的地址的转换,因此又称为DNAT。命令如下:

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 8000 -j DNAT --to-destination 192.168.10.2:80

注:PREROUTING是dnat的专用链 -i 指定外网卡 -p tcp --dport 指定映射端口 -j DNAT表示目的地址转换 --to-destination 指定内网服务器及其端口。

映射开启后,公网客户端的浏览器地址栏输入:http://202.0.0.2:8000即可访问内网web服务器成功。访问成功后,我们仍可以在双方运行netstat -n 查看各自的连接信息。

但是,这样使用8000作为映射口的话,公网客户访问时还需要特殊指定端口,很不方便,所以我们可以把映射口设定与内网web服务器相同的端口号,即80,则客户端访问就方便多了。

也就是以上命令中设置 -p tcp --dport 80 就行了。

注:若路由器上开启的映射端口为80,则路由器本身的80口必须未被占用,即路由器上没有配置web服务。

另外,当路由器开启了SNAT或DNAT功能后,我们可以想象到,对于公网来讲,内网是完全屏蔽在内的,通信时公网主机传输的数据中的目的ip都是路由器的外网卡ip,所以可以说通信的目的都是路由器,则若增加常规的规则,都需要加到INPUT链中,不可以加到FORWARD链中。

PS:其实在实际生产环境中,企业内的服务器都是不是在内部局域网的,也都是采用这种端口映射的方式让公网访问的。不同服务只需要映射不同的端口即可,如:DNS服务可以映射UDP 53端口(注:路由器外网卡需要开启的映射口是UDP协议的53),FTP服务可以映射TCP 21 20端口等。

13.4 设置永久规则

iptables的命令与之前的所有服务一样,都有重启失效的问题。我们设置完毕规则后,可以使用如下两种操作实现重启生效:

方式一:

service iptables save ---永久保存当前防火墙设置

这种做法实质上是把当前的各规则链设置保存到/etc/sysconfig/iptables文件中,可以vi这个文件看看,会有如下信息,即我们手动输入的命令信息。

保存后,每次重启iptables服务都会自动生效了。

方式二:

iptables-save ---查看当前所有链的信息

注:该命令显示的信息是按照配置文件的格式显示的

所以我们可以将该命令的结果直接导入到/etc/sysconfig/iptables配置文件

中即可实现重启生效了。

本文分享自微信公众号 - 教主小筑(gh_e0879483602d),作者:教主小筑

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux防火墙iptables(三)

    我们前面两篇已经把iptables介绍的比较充分了,今天来说一个iptables对layer 7的实践。我们说过iptables/netfilter工作在内核空...

    用户2645267
  • Iptables防火墙

    1、简介 iptables是linux/unix自带的一款开源基于包过滤的防火墙工具,使用非常灵活,对硬件资源需求不是很高,是在内核中集成的服务,主要工作在OS...

    用户1173509
  • 防火墙(iptables)

    防火墙(iptables)基于Netfilter实现,它在Linux内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包...

    研究僧
  • 防火墙iptables

    INPUT链中,从上到下读取规则。如果要只允许访问某端口,则要先禁止所有,再开启。这样匹配时,最先匹配的是允许,最后匹配时禁止。

    陈不成i
  • 第十三章 iptables 防火墙(一)

    防火墙(firewall)一词本是建筑用于,本意是为了保护建筑物不受火灾侵害的。被借鉴到了在网络通信领域中,表示保护局域网或主机不受网络攻击的侵害。

    晓天
  • 第十三章 iptables 防火墙(二)

    当然,iptbales不只可以设置默认规则,还可以手动加入很多规则。首先我们来看一下路由器的网卡配置:

    晓天
  • Linux防火墙iptables(二)

    上一篇文章我们说了一些iptables/netfilter的基础知识,本文我们来介绍一下iptables的规则编写。Iptables的规则可以概括的分为两个方面...

    用户2645267
  • iptables与firewalld防火墙

    版权声明:欢迎交流,菲宇运维!

    菲宇
  • 防火墙(3)——iptables(1)

    in和out分别表示匹配到的流入的接口,*表示的是任意的接口,out表示出去的接口。 (4)iptables -S/ -save 打印出来防火墙的编写命...

    gzq大数据
  • 企业防火墙之iptables

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

    惨绿少年
  • Iptables防火墙(SNAT和DNAT)

    L宝宝聊IT
  • ubuntu iptables防火墙指南

    netfilter/iptables是内核集成的,不存在start/stop或者禁用的说法。可以用iptables命令创建过滤规则。(现在较新的内核中已经默认集...

    羽翰尘
  • CentOS7安装iptables防火墙

    1.首先在/etc/sysconfig/iptables-config中修改或者添加以下内容

    拓荒者
  • Linux防火墙-iptables filter表

    环境: A机器两块网卡ens33(192.168.8.125)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机...

    阿dai学长
  • CentOS 7.0关闭默认防火墙启用iptables防火墙

    Java学习123
  • Iptables防火墙 基础知识

    Iptables防火墙 基础知识 位置 使用vim /usr/sysconfig/iptables 启动、关闭、保存 service iptables stop...

    小小科
  • 包过滤型防火墙iptables

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • Linux防火墙-SELinux、netfilter、iptables、ifconfig

    应用环境:更改单个指定网卡配置后需要重启才能生效,为了避免关闭或重启所有网卡可以对单个网卡执行该命令。 注: 如果网卡正在使用中,不要单独使用ifdown命令...

    阿dai学长
  • Linux 防火墙 iptables 规则 原

    用户2836074

扫码关注云+社区

领取腾讯云代金券