作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主,而云服务器基本上就不会使用系统自带的防火墙,而是使用安全组来代替了防火墙的功能,可以简单理解安全组就是web版的防火墙,我们主要从以下几个方面来讲解Linux防火墙:
Linux防火墙-什么是防火墙
Linux防火墙-4表5链
Linux防火墙-filter表
Linux防火墙-nat表(本章节)
Linux防火墙-常用命令
Linux防火墙-案例(一)
Linux防火墙-案例(二)
Linux防火墙-小结
上一小节,我们介绍了filter表,主要功能就是作为服务器入口,主要功能就是限制或者屏蔽服务器的端口,确保服务器的安全,今天就来介绍下nat表,实际上nat表和我们家庭的路由器有相似的功能。
nat
NAT (Network Address Translation) 表在 iptables 中用于实现网络地址转换的功能。NAT 表允许您修改 IP 数据包中的源地址或目的地址,这对于私有网络与公共互联网之间的通信非常有用。NAT 表通常用于以下几种场景:
一、关联链及作用位置
NAT 表包含三个主要链:PREROUTING:处理所有进入接口的数据包,在它们被路由之前。POSTROUTING:处理所有离开接口的数据包,在它们被路由之后。OUTPUT:处理由本地系统生成的数据包。
-
PREROUTING 链:在数据包进入路由决策之前对其进行操作。主要用于 DNAT(目的网络地址转换),比如将外部网络发往特定公网 IP 和端口的数据包转换到内部服务器的私有 IP 和端口。例如,当有外部请求访问公司的网站服务器时,可在该链将公网 IP 对应端口的请求转发到内部的 Web 服务器的私有 IP 和端口。
-
POSTROUTING 链:在数据包经过路由决策准备离开本机时进行操作。主要用于 SNAT(源网络地址转换),通常用于让内网主机能够使用一个公网 IP 访问外部网络。比如将内网多个设备的私有 IP 地址转换为路由器的公网 IP 地址进行通信。
-
OUTPUT 链:用于处理本机产生的数据包。也可以用于一些特殊的 NAT 场景,例如本机作为一个代理服务器时,对本机发出的数据包进行地址转换操作。但相对前两个链,在 NAT 场景中使用频率稍低一些。
二、规则设置及示例
1.基本语法
SNAT
iptables -t nat -A POSTROUTING -s 源地址范围 -o 输出网卡接口 --to-source 转换后的源地址
假设要将内网 192.168.1.0/24 网段的所有流量的源地址转换为路由器的公网 IP 1.2.3.4,命令如下:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4
DNAT
iptables -t nat -A PREROUTING -d 公网 IP 及端口 -j DNAT --to-destination 内部服务器私有 IP 及端口
如果要将外部访问公网 IP 的 8080 端口的流量转发到内网 IP 为 10.0.0.2 的 80 端口,命令如下:
iptables -t nat -A PREROUTING -d 公网 IP -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.2:80
-t nat 添加到nat表,如果不输入则是默认filter表
三、重要性及应用场景
-
内网访问互联网:企业内部通常拥有大量的计算机、服务器和其他网络设备,这些设备一般使用私有 IP 地址范围(如 192.168.x.x、10.x.x.x 等)。通过在企业的网络出口设备(如路由器、防火墙等)上配置 NAT,将内部设备的私有 IP 地址转换为企业的公网 IP 地址,实现内部设备访问互联网上的各种资源。
-
服务器对外发布:当企业内部有服务器需要对外提供服务时,如 Web 服务器、邮件服务器等,可以使用 NAT 的 DNAT(Destination Network Address Translation,目的网络地址转换)功能。将外部网络对企业公网 IP 特定端口的访问请求,转发到内部服务器的私有 IP 和相应端口上,使得外部用户能够访问到企业内部的服务器。
总结
1.家庭路由器实际上就是sant最典型的代表,dnat是由于运营商限制,没有对普通用户开放。
2.snat如下,服务器B就可以当成路由器,前提是服务器A需要把网关设置成服务器B。
3.dnat如下,实际访问服务器A的端口,如果命中dnat规则最终请求会转发到服务器B。
4.以上规则都是范例,并不能真实实现snat和dnat,仅仅是方便了解对应的原理。后面的案例部分会对他进行演示。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。