iptables管理NAT表

  • 介绍使用iptables管理NAT表

    server24.com作为网关设备提供172.25.23.24/24以及192.168.10.100/24两个不同网段的网络接口;
    server20.com工作在192.168.10.10/24并且将192.168.10.100/24作为网关;
    server21.com工作在172.25.23.24/24,并且将172.25.23.24/24作为网关;

  • 前面的实验通过ip_forward打开实现了网卡见转发数据报文的功能,当年时很多情况下,公网IP价格昂贵,并且即使通过了进行路由,数据包可以发送出去,但是不能够受到响应报文,这就是需要进行地址转换的原因;

  • 对于内网主机需要借助于网关的公网IP来访问公网主机时,就需要进行SNAT,也就是源地址转换,对于返回的数据报文经过NAT服务器时,会通过查询NAT表,自动的进行DNAT的转换,这是不需要手动进行干预的,修改后的数据报文根据路由表的信息来选择对应的网卡端口转发数据报文信息;

  • 源地址转换

  • 源地址转换可以在POSTROUTING OUTPUT上面进行,但是对于网关设备只能够在POSTROUTING上面进行
  • SNAT:
    • --to-source:用于标识转换成哪一个源地址,通常数某个网关的地址,或者是路由器设备某个接口的位置;
  • 通过在模拟网关设备server24.com上面添加SNAT规则修改192.168.10.10/24的地址为172.25.23.24/24实现和server21.com进行通信
[root@server24 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.25.23.24
  • 查看添加的规则
    这里写图片描述
  • 通过server20.com,IP192.168.10.10/24尝试ping另一个网段的主机172.25.23.24/24,这里还是需要打开的网卡间转发的,也就是ip_forward
    这里写图片描述
  • 接下来通过抓包来分析区别,地址区别数据包来源地址的的区别:
  • 这张图片是使用SNAT的图片
    这里写图片描述
  • 这张图片是没有使用SNAT的图片
    这里写图片描述
  • 通过对比发现通过SNAT之后数据包返回的地址发生了改变,而这个正是需要的;

  • 接下来删除server21.com上面关于指向172.25.23.24/24的网关信息,先尝试使用server20.com通过SNAT ping server21.com;

  • 删除网关信息
    这里写图片描述

  • 验证server20.com ping server21.com是否正常
    这里写图片描述
  • 反向验证server20.com ping server21.com这个肯定是不能够ping成功的,因为没有确切的网关;
    这里写图片描述
  • 上面添加的SNAT规则就可以实现数据包在网络上面进行数据传输,并且只需要修改自己的网关,就可以;
  • 对于使用拨号上网的可以使用,通常拨号上网IP都是通过DHCP服务器来进行分配的
iptables -t nat -A POSTROUTING -s 172.25.23.0/24 -j SNAT MASQUERADE[效率低]
  • 如果需要限制内网用户访问外网的某些情况,需要在FORWARD上面添加规则
[root@server24 ~]# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
[root@server24 ~]# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state  NEW -j ACCEPT
[root@server24 ~]# iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
  • 接下来在server21.com上面安装httpd服务,并且提供默认的配置页面
[root@server21 ~]# yum install httpd -y
[root@server21 ~]# echo "hello SNAT" > /var/www/html/index.html 
[root@server21 ~]# /etc/init.d/httpd start
  • 然后在server20.com上面通过elinks命令来访问,得到的下面页面
    这里写图片描述
  • 接下来添加vsftpd服务,并且添加FORWARD链上面的规则
  • 首先安装vsftpd,并且进行启动
[root@server21 ~]# yum install vsftpd -y 
[root@server21 ~]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
  • 接下来在server24.comFORWARD上面添加对应的规则
[root@server24 ~]# iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@server24 ~]# iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state  NEW -j ACCEPT
  • 查看规则如下
    这里写图片描述

  • 接下来使用ftp来访问ftp服务器

这里写图片描述

  • 如果登录成功,数据连接失败,需要手动添加模块
[root@server24 ~]# modprobe ip_nat_ftp
  • 或者直接将上面的信息添加进入iptables的配置文件中
[root@server24 ~]#  vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
  • 关于目标地址转换
  • 简单来讲,私有网络需要通过网关代理访问共有网络的web服务时,我们需要进行SNAT服服务,反过来,如果我们需要将两台提供不同服务的私有网络服务器通过网关代理提供给公有网络进行访问,就需要进DNAT转换;
  • 因为公网IP不廉价的,大多数情况下,希望于通过一个公网IP的不同端口代理不同的后台服务;
  • 对于SNAT来说会自动进行DNAT,同样的对于DNAT会自动进行SNAT;

规划
三台Linux主机:
server21.com作为内网,用于提供服务
server24.com作为为i内网提供服务的网关,并且需要提供DNAT服务;
server20.com 作为来自公网的互联网主机,虽然是局域网IP,这里单纯的假设一下

  • 因为需要的服务已经在server21.com上面配置正常了,接下来需要修改的是iptables NAT的规则
  • 首先清除上面的规则
[root@server24 ~]# iptables -t nat -F 
[root@server24 ~]# iptables -F 
[root@server24 ~]# iptables -P FORWARD ACCEPT
  • 如果双方的网关正常的指向server24.com对应的网络接口的位置,相关的服务是可以正常访问的,因为是通过路由的方式进行数据交换的

这里写图片描述

这里写图片描述

  • 首先来删除servr20.com192.168.10.0/24的网关,因为实际上是一个外网地址,实际上是通过路由,路由到192.168.10.100这个地址的,对于server21.com172.25.23.24/24这个网关地址需要保留

这里写图片描述

  • 现在的访问肯定是失败的,接下来进行目标地址转化
[root@server24 ~]# iptables -t nat -A PREROUTING -d 192.168.10.100 -p tcp --dport 80 -j DNAT --to-destination 172.25.23.21
  • 然后在server20.com上面通过elinks来访问192.168.10.100
    这里写图片描述
  • 这里为了防止192.168.10.100本身的Web服务影响实验,所以首先听掉server24.com上面的服务;
[root@server24 ~]# /etc/init.d/httpd status
httpd is stopped
  • 验证DNAT将端口进行转换
  • 尝试更改DNAT之前请求的端口为80,提供服务的主机的端口为8080,然后尝试使用DNAT进行地址转换
  • 首先更改server21.com 172.25.23.21上面的服务端口为8080
[root@server21 ~]# vim  /etc/httpd/conf/httpd.conf
Listen 8080
[root@server21 ~]# /etc/init.d/httpd restart
  • 查看端口是否启动正常
    这里写图片描述
  • 接下来更改server24.com上面的nat规则
[root@server24 ~]# iptables -t nat -R PREROUTING 1 -d 192.168.10.100 -p tcp --dport 80 -j DNAT --to-destination 172.25.23.21:8080
  • 查看修改后的规则
    这里写图片描述
  • 尝试进行修改后的连接
    这里写图片描述

  • 在上面配置网络的过程中ip_forward的值在重新启动网络服务,之后,会变为0,这个需要特别的注意,可以通过配置文件进行更改,这样重新启动网络服务时,会读取配置文件里面的定义

  • 尝试在FORWARD链上面添加规则,过滤某些关键字

[root@server24 ~]# iptables -A FORWARD -m string --algo kmp --string "h7n9" -j DROP
  • 同时更改页面的发布内容
[root@server21 ~]# cat /var/www/html/index.html
hello DNAT PORT h7n9 
  • 然后尝试通过elinks进行访问

这里写图片描述

  • 然后删除关键字.验证进行访问
[root@server21 ~]# cat /var/www/html/index.html
hello DNAT PORT  
  • 页面访问正常
    这里写图片描述
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值