Thu, 01 Apr 2010
Updated - Perl Script that Does Bulk Reverse-DNS Lookups
I wrote a Perl script a few years ago that does bulk reverse-DNS lookups, and recently spent some time updating it. Quite handy for pen-testers, it can be used as part of the initial network discovery on a client's IP address space.
It uses the underlying CPAN modules more fully, and has some new features (from the code header):
- Accepts IPv4/IPv6 addresses as singletons or a network in range or CIDR format
- Allows you to configure which DNS server(s) to query
- Allows you to configure a fixed delay between PTR lookups
- Output to STDOUT for use in pipelines, or to a file in CSV or JSON format
- Configurable timeout on PTR lookups
- Persistent UDP connections to help lessen the load on DNS servers
You can get the updated script here - directions for running it are in the script header comments. I'd be interested in hearing about any problems or suggestions.
posted at: 20:39 | path: / | permanent link to this entry | 0 comments | tags: DNS Pentest Netsec Perl Code
Fri, 17 Jul 2009
Monitoring and Alerting on Linux Logfiles
As a sysadmin, I’ve found it’s always useful to monitor system logs on your Linux or Unix servers for specific patterns of activity, things that can indicate security or system issues. Even nicer to get alerts when activity occurs. Some time ago I wanted a simple solution that would allow me to continuously monitor the ClamAV updater (freshclam) logfiles and send email alerts - the result was this script. Recently I wanted something a bit more general, so I wrote this Perl script that monitors any logfile for a specific pattern and generates email or syslog alerts.
Installing Logmon
It needs a few non-core Perl modules to run, namely Mail::Mailer, Proc::Daemon, Unix::Syslog and File::Tail, but these can be installed pretty easily as packaged modules or via CPAN. On Debian/Ubuntu systems, all the needed modules are pre-packaged for you:
apt-get install libmailtools-perl libunix-syslog-perl libfile-tail-perl libproc-daemon-perl
On red Hat/Fedora servers, you can use yum:
yum install perl-MailTools perl-Unix-Syslog perl-File-Tail perl-Proc-Daemon
To pull in all the modules from CPAN, you can use this one-liner:
for m in Mail::Mailer Proc::Daemon Unix::Syslog File::Tail; do perl -MCPAN -e "install $m"; done
Once the modules are installed, download the script and double check that it will run without error, then copy it to your path and make it executable. You should see no errors about missing modules when you run the script under ‘perl -cwT’.
perl -cwT ./logmon.pl
install -m 755 logmon.pl /usr/local/bin/
Running Logmon
It’s meant to be both simple and secure, here is the usage summary:
logmon.pl synopsis: Daemon that periodically checks logfile for a pattern and send alerts
Pattern is always required. If no other options are given, defaults to syslog alerts and monitors /var/log/messages for given pattern.
Usage: logmon.pl -p pattern [-m alerts@example.com] [-f logfile] [-u run as user] [-g run as group] [-i max interval] [-v] [-d] [-h]
-m: Email destination for alerts
-f: logfile to monitor
-p: Pattern to match against lines in logfile (Perl regexp, match is case-insensitive)
-u: Run with permissions of user
-g: Run with permissions of group
-i: Max time to sleep between checks
-d: Debug output to STDOUT, do not daemonize
-v: Verbose logging (use with caution or you may have endless alerts)
-h: This help text
Running the script is pretty straightforward, you specify a pattern to match against with -p (this is the only required parameter), and optionally an email recipient (-m) and logfile to watch (-f). Here is an example. Let’s say you want to get alerts whenever MySQL detects a crashed table. The syslog event for this looks like this on my Ubuntu box:
Jul 17 08:02:49 kaylee mysqld[1532]: 090717 8:02:49 [ERROR] /usr/sbin/mysqld: Table './mysql/user' is marked as crashed and should be repaired
And here is the command line usage:
logmon.pl -p 'mysqld.+?table.+?crashed' -m you@example.com -u nobody -g adm -f /var/log/syslog -i 30
Note that the pattern match is case-insensitive. When run this way, Logmon will detach itself from your terminal and run as a daemon, checking /var/log/syslog every 30 seconds for the supplied pattern. I recommend you use the -u and -g options to force Logmon to drop it’s privileges, just make sure you specify a user or group that have read-permissions on the specified logfile. On Debian and Ubuntu servers, all the system logs are readable by the group ‘adm’.
Other Options and Tips for Testing Logmon
Logmon will dump alerts to your default system log if you leave off the -m option. If you also use the -v option for verbose logging, these syslog entries and alerts will have pattern and match data. If you end up monitoring the same file you are dumping alerts into you’ll get an endless series of alerts continuously being added to the system log. For this reason when alerts are sent to syslog, by default they are very generic (email alerts are always verbose).
To test Logmon, use the -v and -d options together. Run this way, Logmon will not daemonize itself, and will just print alerts and activity to your console (STDERR).
Errors
Any errors that cause the script to die while it’s running as a daemon can be found in your system log.
Startup and Shutdown
I haven’t yet written any startup scripts for Logmon, although I plan to. For now, just start it from one of your system’s startup scripts, and if you have to stop it you can just use pkill logmon. Please send any bugs or suggestions to the email address in the script header, or leave a comment here.
posted at: 02:17 | path: / | permanent link to this entry | 0 comments | tags: Linux Sysadmin Logs Tips Code