Today I will mention about arpwatch utility (developed by LBNL’s Network Research Group) as it is a small and very useful tool that will keep track of the Ethernet/IP address pairings and log every change which you can monitor and analyze.
Installation
I am using Debian so I will just execute apt-get to install arpwatch:
$ sudo apt-get install arpwatch
Configuration
Default application arguments are stored in /etc/default/arpwatch configuration file:
# Global options for arpwatch(8).
# Debian: don't report bogons, don't use PROMISC.
ARGS="-N -p"
# Debian: run as `arpwatch' user. Empty this to run as root.
RUNAS="arpwatch"
As you see arpwatch is not reporting any bogons (see “Log messages” below) by default so you need to remove the -N parameter to disable this behavior.
Main configuration is stored in /etc/arpwatch.conf file:
# /etc/arpwatch.conf: Debian-specific way to watch multiple interfaces.
# Format of this configuration file is:
#
#<dev1> <arpwatch options for dev1>
#<dev2> <arpwatch options for dev2>
#...
#<devN> <arpwatch options for devN>
#
# You can set global options for all interfaces by editing
# /etc/default/arpwatch
# For example:
#eth0 -m root
#eth1 -m root
#eth2 -m root
# or, if you have an MTA configured for plussed addressing:
#
#eth0 -m root+eth0
#eth1 -m root+eth1
#eth2 -m root+eth2
Use this file to define list of interfaces and additional parameters.
Execution
Use /etc/init.d/arpwatch script to start or stop service.
Log messages
This IP address doesn’t belong to the local subnet:
Mar 2 16:21:38 dhcp arpwatch: bogon 192.168.0.110 0:30:13:a0:a:1d
This Ethernet/IP address pair has not been seen before:
Jul 1 18:11:15 dhcp arpwatch: new station 11.27.43.192 d4:2a:d1:61:6:84
This Ethernet/IP address pair has been used for the first time (six months period or more):
Jul 4 13:51:04 dhcp arpwatch: new activity 71.72.4.102 0:81:28:12:b3:d
Ethernet address has changed:
Jul 6 18:31:25 dhcp arpwatch: changed ethernet address 18.17.16.15 fc:55:43:31:7:14 (0:71:12:2f:5a:12)
Ethernet address has changed to the previous one:
Jul 27 17:27:19 dhcp arpwatch: flip flop 18.17.16.15 0:71:12:2f:5a:12 (fc:55:43:31:7:14)
Ethernet address has changed to the older one:
Jul 29 13:32:13 dhcp arpwatch: reused old ethernet address 18.17.16.14 0:34:52:31:a:1d (d4:b1:d4:16:69:68)
…
OpenBSD notes
In case you use different operating system like OpenBSD then you need to edit /etc/rc.local file and add arpwatch command with parameters to start it at boot.
# $OpenBSD: rc.local,v 1.39 2006/07/28 20:19:46 sturm Exp $
# Site-specific startup actions, daemons, and other things which
# can be done AFTER your system goes into securemode. For actions
# which should be done BEFORE your system has gone into securemode
# please see /etc/rc.securelevel.
echo -n 'starting local daemons:'
# Add your local startup actions here.
if [ -x /usr/local/sbin/arpwatch -a -d /var/arpwatch ]; then
/usr/local/sbin/arpwatch -i fxp0 -n 10.0.1.0/24 -n 10.0.2.0/24
echo -n ' arpwatch'
fi
echo '.'