在网络边界构建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
------------------------------
效果如上,达到所需目标。