Linux Training

Linux training for private, public & voluntary sector.

0793 572 8612

City LinUX sample scripts - blacklist


#!/bin/bash
# $Id: blacklist,v 1.137 2019/03/20 00:12:35 fulford Exp fulford $
# $Source: /src/admin/usr/local/etc/RCS/blacklist,v $
# $Revision: 1.137 $
# Author C W Fulford.
# Copyright 2017 (c) C W Fulford.
# Licensed for public use under the LGPL, .
# For assistance contact fulford@fulford.net 0793 572 8612
########################################################################
cmd=`basename $0`

config=/usr/local/etc/blacklist.cf
ver=`echo "$Id: blacklist,v 1.137 2019/03/20 00:12:35 fulford Exp fulford $"|awk '{print $3,$4,$5}'`
sysadmin=fulford@fulford.net

syntax="$cmd  [-l] | [-V]"
while [ $# -gt 0 ] ;do
	case $1 in 
		-l) log=:;shift;;			
		-V) echo "$cmd $Revision: 1.137 $ $Date: 2019/03/20 00:12:35 $"|awk '{print $1,$3,$6}';exit;;  
	esac
done
export ADMINHOST=admin
export MAILHOST=mailhost
export LOG=/var/log/blacklist/blacklist.log
export TARGET=access
export SRCDIR=/src/$MAILHOST/etc/mail
# CityLinux keeps RCS records of critical files in separate file system 
export TARGETDIR=/etc/mail
export SRC=$SRCDIR/$TARGET
export DEST=$TARGETDIR/$TARGET
export TMP=/tmp/${TARGET}


address=`grep "^Return-Path: " | sed -e 's/Return-Path: <\([^>]*\)>/\1/'`
echo "address = $address"

domain=`echo $address|sed -e 's/[^@]*@\(.*$\)/\1/g'`
echo "domain = $domain"

# Spare legitimate domains 
ldomains=`awk <$config '{printf "%s ",$1}'`
if echo $address |grep -s fulford.net; then
	mailx -s "blacklist ALERT" $sysadmin <<- .
		Blackist has found fulford.net in the Return-Path
		$address
	.
	echo "Blacklist has found fulford.net in the Return-Path:"
fi
blacklist=$domain
for ld in $ldomains ;do
 	if [ "$domain" == $ld ] ;then
		blacklist=$address
	fi
done
echo -n "Blacklist ${blacklist} [y/n]? "
read answer <&2 
answer=${answer:-"y"}
if [ "$answer" == "y" ];then
	
	export BLACKLIST=`echo $blacklist|sed -e 's/\(.*\)/\1\t REJECT/'`
	ssh $ADMINHOST "
		#echo \"pwd = `pwd`\"
		#echo $ADMINHOST
		#echo \"SRCDIR = $SRCDIR\"
		cd $SRCDIR
		hostname	
		co -l -q $TARGET
		echo $BLACKLIST >$TMP
		cat $TARGET >>$TMP
		# makemap will fail if there are duplicate entries in the
		# access file
		cat $TMP|sort -k1,1 -u > $TARGET  #2>/dev/null
		cat $TARGET|ssh $MAILHOST sudo dd of=$DEST &2>/dev/null
		/usr/bin/ci -m -q $TARGET 
		rm $TMP
		exit 
		"
	ssh $MAILHOST "
		hostname
		echo $TARGETDIR
		echo \"`date`: $BLACKLIST\" >>$LOG
		cd $TARGETDIR 
		sudo /usr/bin/make access.db
		sudo /etc/rc.d/rc.sendmail restart
		sudo logger  -p mail.info -t blacklist \"$blacklist blacklisted\"
		"
	
	echo "$blacklist blacklisted."
else
	echo "$blacklist has not been blacklisted."
fi
echo -n 'Press "Return" to continue';read ought </dev/tty 
######################################################################
# This program is free software: you can redistribute it and or      #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of  #
# the License, or (at your option) any later version.                #
#                                                                    #
# This program is distributed in the hope that it will be useful,    #
# but WITHOUT ANY WARRANTY; without even the implied warranty of     #    
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      #
# GNU General Public License for more details.                       #
#                                                                    # 
# A copy of the Lesser GNU General Public License and the GNU        #
# General Public License is available at                             #
# <http://www.gnu.org/licenses/>.                                    #
######################################################################

The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.