基于openeuler的NAT服务器查看流向内部服务端口的流量

在网络边界构建NAT服务器统一转发内部服务,有助于安全管理,也有利于业务的灵活性。本文在基于openeuler的NAT服务器通过脚本查看监控流向流向内部服务端口的流量。

 一、基本思路

用"iptables -t nat -nvL POSTROUTING --line-numbers "获取 NAT 表 POSTROUTING 链中的每一个规则。

[root@localhost]# iptables -t nat -nvL POSTROUTING --line-numbers
Chain POSTROUTING (policy ACCEPT 2356 packets, 150K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        8   480 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.117.229        tcp dpt:80 to:192.168.117.222
2      258 13416 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.235.55        tcp dpt:4433 to:192.168.117.222
3      209 10868 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.43         tcp dpt:4434 to:192.168.117.222
4        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.235.38        tcp dpt:4435 to:192.168.117.222
5        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.73         tcp dpt:4436 to:192.168.117.222
6        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.73         tcp dpt:4437 to:192.168.117.222
7        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.73         tcp dpt:4438 to:192.168.117.222
8        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.73         tcp dpt:4439 to:192.168.117.222
9        0     0 SNAT       tcp  --  *      *       0.0.0.0/0            192.168.18.73         tcp dpt:4440 to:192.168.117.222

二、示例脚本

下面是一个简单的 bash 脚本,然后对于NAT 表 POSTROUTING 链中每一个规则,提取出规则的内部服务 IP和端口,数据包的数量 (packets) 和字节数量(bytes)。本脚本适用于openeuler 22.03 LTS系统,其它系统可能需要根据实际回显情况进行适当的修改。

[root@localhost]# vi monitor.sh
#!/bin/bash
##__author__='daigjianbing'

# 监控NAT服务器iptables-NAT-POSTROUTING链的目的IP端口和流量
iptables -t nat -nvL POSTROUTING --line-numbers | \
while IFS= read -r line
do
  # 检查行是否包含规则,过滤有效行
  if [[ $line == *[0-9].*.*.* ]]
  then
    # 获取目的 IP
    ip=$(echo "$line" | awk '{print $10}')
    # 获取目的 端口
    port=$(echo "$line" | awk '{print $12}'|awk -F ':' '{print $2}')
    # 获取数据包和字节数量
    packets=$(echo $line | awk '{print $2}')
    bytes=$(echo $line | awk '{print $3}')
    echo "NAT业务的目的IP和端口: $ip:$port"
    echo "数据包总数: $packets"
    echo "字节数总数: $bytes"
    echo "------------------------------"
  fi
done

 三、检测测试

[root@CTNAT10 monitor]# sh monitor.sh 
NAT业务的目的IP和端口: 192.168.117.229:80
数据包总数: 9
字节数总数: 540
------------------------------
NAT业务的目的IP和端口: 192.168.235.55:4433
数据包总数: 301
字节数总数: 15652
------------------------------
NAT业务的目的IP和端口: 192.168.18.43:4434
数据包总数: 244
字节数总数: 12688
------------------------------
NAT业务的目的IP和端口: 192.168.235.38:4435
数据包总数: 0
字节数总数: 0
------------------------------
NAT业务的目的IP和端口: 192.168.18.73:4436
数据包总数: 0
字节数总数: 0
------------------------------
NAT业务的目的IP和端口: 192.168.18.73:4437
数据包总数: 0
字节数总数: 0
------------------------------
NAT业务的目的IP和端口: 192.168.18.73:4438
数据包总数: 0
字节数总数: 0
------------------------------
NAT业务的目的IP和端口: 192.168.18.73:4439
数据包总数: 0
字节数总数: 0
------------------------------
NAT业务的目的IP和端口: 192.168.18.73:4440
数据包总数: 0
字节数总数: 0
------------------------------

效果如上,达到所需目标。

你可能感兴趣的:(运维,linux,服务器,服务器,运维,linux)