一、NAT地址转换原理
1.NAT地址转换基本原理
工作在网络层和传输层,实现地址重写,实现端口重写
作用:①隐藏本地网路中主机地址
②节约IP地址的使用
分为DNAT和SNAT(互相对应的,需要查找NAT会话表)
SNAT:只是修改请求报文的源地址(为了隐藏真实服务器的IP地址)
DNAT:只是修改请求报文的目标地址;(为了让客户机利用私网地址访问公有地址)
SNAT和DNAT是互相映射的,一个SNAT必须映射一个DNAT, 一个DNAT必须映射一个SNAT
nat修改:在prerouting, postrouting上面做改动
(1)SNAT:源地址转换
它是在路由器选择之后postrouting做的
应用场景:
数据载荷(报头)、源IP(cip)、目标IP(服务器ip)
每经过一个路由器,数据报头就会发生变化(原因:每经过一个路由器,就会进行报文封装,报文封装是进行MAC地址封装;ip地址是互联网通信的唯一地址,不会发生变化;会变的原因是:每经过一跳就是经过一个局域网,局域网通信的唯一地址就是MAC地址),最后到达服务器,服务器封装响应报文,经过层层路由到底路由器(但客户端是cip,因此伴随响应报文也要做一次代理转换),然后路由器把目的地址rip改成cip,最后抵达客户手上
总结:出去做SNAT,回来做DNAT,都在路由器上面更改
SNAT原理图:
①局域网中的PC机私网地址,互联网中的web服务器公网地址;
②客户端开始封装请求报文:数据载荷、源地址:私网、目标地址:公网
③到路由器或者防火墙这做SNAT,将源地址改成公网、目标地址:目标公网地址
web服务器回应:
①封装响应报文:数据载荷、源地址:web服务器公网地址、目标地址:SNAT转换之后的公网
②到路由器这需要做DNAT,把响应报文中的目标地址,改成PC机的地址
(2)DNAT:目标地址转换
应用场景:私网地址不能走路由,负载均衡器也可以做NAT转换
客户端目前是公网地址,而服务器端是私网地址;当客户端访问时,目标ip是服务器的SIP,就会出问题(SIP是一个私网地址,不能走路由);但为了能继续访问服务器端,服务器端便对外声称一个公网地址FIP:2.2.2.2。
目前客户端报文封装是数据载荷、源地址为客户端地址、目标地址为服务器端fip;路由器收到报文之后,发现目标地址就是自己端口对应的公网地址;在选择路由器选择之前,将路由fip改成sip;然后路由器查看报文,发现sip是要给服务器,将其传到对应服务器端,这样服务器就可以接收到。然后进行封装响应报文:数据载荷、源ip是自己sip、目标ip是cip;在路由选择之后,把sip改成客户机响应的那个公网地址FIP:2.2.2.2,客户端便可以收到
DNAT原理:
由于企业内网web服务器是一个私网,所以他要声称一个对外客户可以访问的公网地址:218.29.30.31;
客户端发起请求报文,报文封装:数据载荷、源地址:173.96.97.98,目标地址:218.29.30.31
到路由器之后,在选择路由之前,把目标地址换成内网服务器的IP地址:192.168.1.6
web服务器响应报文:
数据封装:数据载荷、源地址:私网、目标地址:公网;私网不能走路由,在路由器的左接口,在路由选择之后,把源地址改成对外声称的公网地址:218.29.30.31
(3)FULLNAT:源、目标地址都需要更改
应用场景:可以实现跨机房数据,可以把网关放到北京,真实服务器放到上海;
(4)在ciso模拟器上面进行模拟SNAT
客户机私网地址、服务器公网地址
准备工作:给接口添加ip、路由器右边g0/1为公网地址
思路:首先做SNAT,源地址改成公网地址,离其最近的路由器要做nat池,然后声明内外部的源地址,把左右接口改成内外口
客户机配置:
路由器R-1配置:
写路由器:
验证:
在R-1上添加一条服务器段的静态路由:
路由器R-2进行配置:
服务器配置:
思路:PC1和服务器1都属于私网,路由器2做成SNAT,配置地址池,右侧接口作为出去的,并添加2条静态路由(路由器3和路由器4);路由器4做DNAT,在左侧接口作为出去的,在路由器4上添加2条静态路由
二、配置iptables的NAT表
1.iptables SNAT 策略设置
iptables -t nat -A POSTROUTING [-s 内_IP/MASK] -d D_IP/MASK -j SNAT --to-source F_IP
例如:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d 192.168.20.0/24 -j SNAT --to-source 192.168.20.200 或者
2.iptables DNAT策略设置
iptables -t nat -A PREROUTING [-s 外_IP/MASK] -d FIP [-p tcp --dport 80] -j DNAT --to-destination 内_IP[:PORT]
例如:iptables -t nat -A PREROUTING -s 192.168.20.130 -d 192.168.20.200 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100:8080
3.非固定的外网IP地址或ADSL--->MASQUERADE
在外网IP地址非固定的情况,为了完成SNAT规则,通常使用非固定的IP地址进行伪装,即为MASQUERADE策略。
iptables -t nat -A POSTROUTING [-s 内_IP/MASK] ! -d 内_IP/MASK -j MASQUERADE
例如:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
4.补充知识点:
将恶意访问的数量前2的IP提取出来(同时可以选择性的将其定义成变量写进防火墙规则)
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -ntu | awk '{print $5}' | cut -d: -f4 | sort | uniq -c | sort -n | tail -2 | cut -d\ -f7
cat access_log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -2 | awk '{print $2}'
ss -tan | grep -v -i "^Listen" | awk '{print $5}' | awk -F: '{print $4}' | sort | uniq -c | tail -2 | awk '{print $2}'
5.proxy代理
基于七层实现IP地址重写,代理到后端真实服务器
防火墙可以实现调度服务器的功能,防火墙有做NAT地址转换的功能,但一般其不做,一般路由器才做
原理:客户端访问,在路由器选择之前做DNAT,做完DNAT转换之后,在经过防火墙;防火墙只做报文隔离。做完报文隔离,允许进的话,就进入DMZ负载均衡器中,调度器既有公网地址,也有私网地址
原理:调度服务器既有私网,也有公网地址;
客户访问对外声称的地址1.1.1.1,也就是负载均衡调度器的地址;调度器基于调度算法将其调度到内部服务器上,当回来的时候,路由器已经将之前地址存到路由器,回来的时候也会自动更改
调度服务器没有端口,会监听应用服务,它走内核层面,被称为调度转发器;要求需要并发能力强(可达上百万);LVS
调度服务器:
1.走内核层,没有相应的应用层的进程(不监听任何应用层端口),并发超高
2.不一定要一手托两家:传统DNAT、SNAT;现在就是之后给调度器,调度器直接甩锅给应用,应用直接和客户端对接
3.不会实现报文重构(来回报文一样),代理服务器直接把报文丢掉,重新做一个报文
代理服务器(重构报文,不同于nat会更改ip地址):
1.走7层应用层,必须和上游服务器保持一样的协议进程(要开启端口,可以做端口映射)
2.必须一手托两家
3.并发访问量极限值65535
客户端封装报文:数据载荷,源地址:cip、目标地址:pip代理服务器地址;应用层进栈,所以代理服务器也要进栈,然后拿到报文,重写封装报文。数据载荷、源地址:pip、目标地址:sip
响应报文:和DNAT相同
三、TCP_wrapper
iptables、nft、firewall是基于内核级别的
TCP_wrapper是基于主机名,来源地址的访问控制
1.TCP_wrapper原理:
①:是tcp的包装器,基于tcp协议开发,提供服务的应用程序,属于访问控制工具,在用户请求的报文必经的路上,设置访问控制。
②:和netfilter不一样,属于基于库调用实现功能。
判断程序是否能被tcp_wrapper支持
ldd命令,确定是否装载模块libwrap
例如:ldd `which vsftpd`
centos-7有
新版rocky9不支持
Tcp_wrapper通过配置文件即可定义tcp应用程序的访问控制。centos7支持
2.黑白名单
/etc/hosts.allow ---> 白名单
/etc/hosts.deny ---> 黑名单
Tcp_wrapper访问控制请求流程和优先级
认证流程:首先查看白名单,如果白名单有东西,认证通过,立马放行;
第二种情况:如果白名单里面没东西,就去看黑名单,黑名单里面也没有东西,把其放出
第三种情况:白名单黑名单都有东西,但看完白名单直接放出,黑名单不看
第四种情况:白名单没有东西,黑名单有东西,黑名单将其传回,不能继续进行
配置文件编写语法
程序列表:客户端列表 [:选项] 注意:程序列表不是服务名
程序列表:可以有多个,使用逗号进行分隔,ALL表示全部 例如:vsftpd,sshd
客户端列表:可以是IP地址、主机名、网络地址(必须使用完整掩码方式)
可以使用短格式(例如192.168.) ALL表示所有主机
选项:①EXCEPT(除了)
②deny
③allow
案例:vim /etc/hosts.deny
centos-7演示在内核服务器操作:
yum -y install vsftpd
systemctl start vsftpd
vim /etc/vsftpd/vsftpd.conf
vim /etc/hosts.deny
10网段不让访问,除了10.100,不需要重启服务
进行测试:
在10.0的其他网段:
在10.100网段:
四、firewalld使用
1.firewalld的基本知识
firewalld是centos7之后推出的基于netfilter的用户空间的软件工具,ubuntu也支持
filewalld是配置和监控防火墙规则的系统守护进程,可以实现iptables ip6tables ebtables的功能, nftables可以兼容firewalld和iptables的综合性功能
【注】:Firewalld不能和iptables同时使用、firewalld使用,它本质调用netfilter、centos7-8没有iptables.service, centos6里面自带。
2.firewalld支持划分区域
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
注意:先根据数据包中的源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone,默认为public zone,管理员可以改为其他zone
网卡默认属于public zone lo网络接口属于trusted zone
表格重要:
预定义服务
ssh
dhcpv6-client Local DHCPV6 client. Traffic to 546/udp
ipp-client printing Traffic to 631/udp
samba-client Local Windows file and print sharing client. Traffic to 137/udp and 138/udp
mdns Multicast DNS Traffic to 5353/udp
3.firewalld命令行的基本操作
firewall-cmd --list-all:列出当前所有的防火墙规则
firewall-cmd --get-zones:获取所有区域
firewall-cmd --get-default-zone:列出默认的区域
firewall-cmd --list-service:列出目前防火墙允许的服务
firewall-cmd --get-service:列举出当前系统中支持的所有的服务
firewall-cmd --set-default-zone=block:更改默认的区域,例如更改为block
firewall-cmd --query-service=http:查询http服务是否开放
firewall-cmd --query-port=xxxx/tcp:查询xxxx端口是否开放
firewall-cmd --add-service=http:添加防火墙允许的服务:例如http服务
firewall-cmd --remove-service=http:删除防火墙允许的服务:例如http服务
firewall-cmd --permanent --remove-port=xxxx/tcp:永久移除xxxx端口
firewall-cmd --permanent:永久修改防火墙规则(但不会临时生效)
firewall-cmd --permanent --zone=internal --add-source=192.168.10.0/24
firewall-cmd --permanent --zone=internal --add-service=mysql
firewall-cmd --reload:修改配置后重载防火墙服务
【注】:图形化工具的使用(需要安装基本图形程序);图形化操作和命令行操作不能兼容Yum -y install firewall-config。
让图形化永久生效方法:例如:http协议先点一下http,然后点永久,然后点重载防火墙
4.rich富规则
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.10.110/32 reject' //110访问我的ipv4,一律拒绝
拒绝从192.168.10.110的所有流量,当address选项使用source或destination时,必须使用family=ipv4或者ipv6
限制每分钟只有两个连接到ftp
firewall-cmd --add-rich='rule service name=ftp limit value=2/m accept'
地址伪装文章来源:https://www.toymoban.com/news/detail-853301.html
firewall-cmd --add-rich='rule family-ipv4 source address=192.168.10.0/24 masquerade'文章来源地址https://www.toymoban.com/news/detail-853301.html
到了这里,关于iptables防火墙-NAT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!