Linux学习100 Linux防火墙nat路由高级实战进阶
一、iptables(3)
1、iptables/netfilter网络防火墙
a、网关
b、filter表的FORWARD链
2、要注意的问题
a、请求-响应报文均会经由FORWARD链,要注意规则的方向性
b、如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行
3、NAT:Network Address Translation。
a、请求报文:由管理员定义
b、响应报文:由NAT的conntrack机制自动实现
c、请求报文:
(1)、改源地址:SNAT,MASQUERADE
(2)、改目标地址:DNAT
d、我们的主机接入互联网的时候必然要通过网关来实现,如果这个网关本身在转发报文到互联网上去的时候把报文的源IP地址统统改为网关自己的外网IP地址访问互联网的地址,这样我们互联网上能看到的源地址也只能是网关地址。同理,我们响应报文回来时,既然我们远程主机收到的是我们外网网关的地址ExIP发出来的报文,因此我们的源IP应该是RIP,目标IP为ExIP,当我们ExIP收到RIP发来的报文时他还要转给我们的LIP,因为我们的LIP有很多,那他要发给哪个LIP呢?因此我们的NAT服务器有一个自己的连接追踪表,哪个客户端通过哪个端口访问了外网主机的哪个端口,通过查表他才知道把报文发给哪个LIP。所以报文在真正交由内网主机之前要做地址转换,转换后源IP还是RIP,目标IP为LIP
(1)、因此我们可以发现我们在整个报文传输中无论请求还是响应都改了报文,所不同的是请求报文的IP地址被改的是源地址,而响应报文改的是目标地址,我们通常只关注请求报文,因为响应报文是按照原来的请求报文对应的改过去的。但请求报文是按照我们管理的需要改过去的。响应报文是按照对应需要,整个NAT的工作逻辑转过去的,像这种地址转换我们就称之为SNAT,他的目的是为了隐藏本地IP地址。SNAT一般只在POSTROUTING上做。一般而言不仅仅只是在POSTROUTING链上做。
(2)、我们有时候也需要将服务器隐藏起来,一样的,我们在服务器前端放一个网关,这个网关拥有公网地址ExIP和私网地址,我们服务器就藏在这个网关背后,并且我们在互联网上告诉大家这个ExIP监听有80端口,因此当别人访问ExIP的80端口时很显然需要交给我们本地的80端口进程,但是我们本机其实没有监听这个端口,他也没有提供任何服务,因此收到请求后一看是80端口,这个是网关后面这个服务器提供的,所以他就把目标地址从ExIP改为我们我们后端主机的SIP的地址,这样一来我们的服务器也能隐藏了。与(1)中不同的是(1)中隐藏的是客户端,而此处我们隐藏的是服务端。所以隐藏服务端的意思是我们要代表服务器接收请求的,隐藏客户端表示我们要代表客户端发出请求的。因此此时我们请求时源地址是RIP,目标地址是ExIP,此时我们需要将报文修改,请求以后源地址不变,而目标地址变为了SIP,这就是目标地址转换,而此时我们后端服务器收到请求以后,源IP为RIP,目标IP为SIP,因此其响应时他会直接响应给RIP了。但是因为我们发送请求时源地址是RIP,目标地址是ExIP,因此我们此时响应时源IP也应该改为ExIP。所以我们还得把源地址再改回ExIP,我们这个NAT服务器中依然有一个连接追踪功能的表。因此同理,只有请求报文才是我们管理修改的,而响应报文的地址修改是由NAT连接追踪自动完成的,这种就叫目标地址转换。叫DNAT。我们DNAT应该在PREROUTING上改。
假如我们公司网站访问量很大,需要三台服务器来支撑,而我们只有买的起一个公网IP,我们就可以用三台服务器通过DNAT做负载均衡,即我们第一个请求来了就交给第一台服务器,第二个请求来了就交给第二台服务器,后面依次轮询。在LVS负载均衡之前就是用DNAT实现的。
(3)、我们其实还有PAT,叫端口地址转换,即改源端口和目标端口。
e、任何人来了后我们都需要做地址转换,但是如果我们想拒绝某个客户端访问怎么办呢?我们需要在FORWARD上进行过滤。
f、如果所有的NAT都在我们的前端主机上的话我们主机的压力肯定是特别大的,我们如果开启了连接追踪功能的话要记得调整连接追踪的数量,因为在我们CentOS上默认值为65535,万一这个值被突破了很有可能会有大量连接被拒绝。
4、iptables/netfilter
a、NAT定义在nat表
(1)、PREROUTING,INPUT,OUTPUT,POSTROUTING
(2)、SNAT:POSTROUTING
(3)、DNAT:PREROUTING
(4)、PAT:
5、target:
REDIRECT:通常对单台主机有用,比如我们单台主机监听了8080端口,正常情况下别人访问服务都是访问80服务,但是他监听的是8080,并且我们1024端口之前的端口都只有管理员用户才有权限启动。此时我们可以在本地主机上做一个端口映射。因此别人访问80服务就能转入到8080端口了。
6、layer7。
二、实验演示
1、规划
a、内网:
内网客户端:192.168.10.2
内网网关:192.168.10.254
b、外网:
外网客户端:172.16.0.67
外网IP:172.16.0.6
2、SNAT实验。(我们可以通过man )
a、先清空我们的防火墙规则
iptables -F
b、我们在防火墙主机上写相应的snat规则,我们需要在POSTROUTING上做,因为如果我们在PREROUTING上做的话万一别人是访问本机的呢?因此我们在POSTROUTING上做也是来得及的。
(1)、命令
我们可以在外网服务器上抓包查看相应的源地址。
(2)、万一别人是拨号地址,地址随时在变,我们制定--to-source就不管用了。此时我们就需要使用另外一个target了,名字叫做MASQUERADE,这个target主要作用就是实现SNAT并且在动态分配的IP地址上使用,如果你是静态地址就配置SNAT即可
3、DNAT实验。我们SNAT和DNAT一般在一台主机上不同时使用
a、规划,现在我们左边是服务端,右边是客户端了。即我们的172.16.0.67要访问到192.168.10.2的80端口,当然他只有访问172.16.0.6的80.
b、命令
(1)、先清空规则
iptables -F
(2)、配置公网地址能访问到80端口
(3)、然后我们可以在172.16.0.67上访问
c、我们来配置端口转换
(1)、我们先在192.168.10.2上装一个nginx,监听8080端口
(2)、然后在iptables主机上添加目标端口转换规则
(3)、然后我们在172。16.0.67上访问80端口可以发现可以访问
d、配置拒绝某些特殊的主机访问
(1)、我们需要使用filter表,因为我们所有的请求和响应都会经过FORWARD链,因此我们只有在FORWARD链上加相应的规则就行了
(2)、相应命令
1)、在FORWARD链上配置拒绝172.16.0.200访问8080服务
2)、现在我们在172.16.0.200上访问发现被拒绝了
e、现在我们来配置REDIRECT类型的规则,即访问我们本机80端口然后转换至我们本机的8080端口
三、博客作业