特定网络之间的 Shorewall / iptables 核算?

特定网络之间的 Shorewall / iptables 核算?

我有两台服务器,它们分别位于不同的 IP 上,假设它们是:1.2.3.4 和 5.6.7.8。此外,它们都运行一些虚拟机,这些虚拟机都具有私有 IP 10.0.0.*。现在,这两台服务器各自只有一个以太网接口。我想从外部跟踪往返于这些机器的总互联网流量,但我不想计算两台机器之间或虚拟机之间的任何流量。我该如何设置会计规则,使用 shorewall 的会计配置或普通的 iptables 规则来跟踪这一点?

目前,我无法知道我正在使用多少互联网带宽,因为当我查看总体统计数据时,它包括了我的两台服务器之间的流量。

理想的情况当然是询问路由器,但目前还无法做到这一点。

答案1

你可以做这样的事情:

TRACK_INBOUND="TRACKING_IN"
TRACK_OUTBOUND="TRACKING_OUT"
#Space separated lists of hosts(1.2.3.4),networks(1.2.3.x/y) to separate
TRACKING_IGNORE="1.2.3.4 5.6.7.8"

iptables -N $TRACK_INBOUND
iptables -F $TRACK_INBOUND
iptables -I INPUT -j $TRACK_INBOUND
for ignore in $TRACKING_IGNORE; do
    iptables -A $TRACK_INBOUND -s $ignore -j RETURN
done
iptables -A $TRACK_INBOUND  -j RETURN

iptables -N $TRACK_OUTBOUND
iptables -F $TRACK_OUTBOUND
iptables -I OUTPUT -j $TRACK_OUTBOUND
for ignore in $TRACKING_IGNORE; do
    iptables -A $TRACK_OUTBOUND -d $ignore -j RETURN
done
iptables -A $TRACK_OUTBOUND -j RETURN

BYTES_IN=$(iptables -L $TRACK_INBOUND -nxv | tail -n 1 | awk '{print$2}')
BYTES_OUT=$(iptables -L $TRACK_OUTBOUND -nxv | tail -n 1 | awk '{print$2}')

iptables -L $TRACK_INBOUND -nv

Chain TRACKING_IN (4 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       1.2.3.4              0.0.0.0/0
    0     0 RETURN     all  --  *      *       5.6.7.8              0.0.0.0/0
 123K   15M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

iptables -L $TRACK_OUTBOUND -nv

Chain TRACKING_OUT (4 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            1.2.3.4
    0     0 RETURN     all  --  *      *       0.0.0.0/0            5.6.7.8
 1116  679K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

相关内容