feature/ss-instead-of-netstat #2
					 1 changed files with 170 additions and 170 deletions
				
			
		|  | @ -38,7 +38,7 @@ | ||||||
| MY_IP="94.199.214.20" | MY_IP="94.199.214.20" | ||||||
| 
 | 
 | ||||||
| # After this point, no editing is required. | # After this point, no editing is required. | ||||||
| start=$(date +%s) | start="$(date +%s)" | ||||||
| 
 | 
 | ||||||
| # Dependencies of this script. Simple array with the following structure: | # Dependencies of this script. Simple array with the following structure: | ||||||
| # (command package [...]) | # (command package [...]) | ||||||
|  | @ -53,8 +53,8 @@ dependencies=( | ||||||
| 	"tr" "sys-apps/coreutils" | 	"tr" "sys-apps/coreutils" | ||||||
| 	"uniq" "sys-apps/coreutils" | 	"uniq" "sys-apps/coreutils" | ||||||
| 	"grep" "sys-apps/grep" | 	"grep" "sys-apps/grep" | ||||||
| 	"sponge" "sys-apps/moreutils" |  | ||||||
| 	"ss" "sys-apps/iproute2" | 	"ss" "sys-apps/iproute2" | ||||||
|  | 	"sponge" "sys-apps/moreutils" | ||||||
| 	"getopt" "sys-apps/util-linux" | 	"getopt" "sys-apps/util-linux" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -85,8 +85,8 @@ function is_installed() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function print_missing_dependency() { | function print_missing_dependency() { | ||||||
| 	local command="$1" | 	local command="${1}" | ||||||
| 	local package="$2" | 	local package="${2}" | ||||||
| 
 | 
 | ||||||
| 	echo "${red}Command ${bold}${command}${reset}${red} not found.${reset} Please install package ${blue}${package}${reset}." >&2 | 	echo "${red}Command ${bold}${command}${reset}${red} not found.${reset} Please install package ${blue}${package}${reset}." >&2 | ||||||
| } | } | ||||||
|  | @ -104,7 +104,7 @@ function check_dependencies() { | ||||||
| 		package="${dependencies[$i + 1]}" | 		package="${dependencies[$i + 1]}" | ||||||
| 		is_installed "${command}" "${package}" | 		is_installed "${command}" "${package}" | ||||||
| 		res=$? | 		res=$? | ||||||
| 		if [[ $res -ne 0 ]] ; then | 		if [[ ${res} -ne 0 ]]; then | ||||||
| 			print_missing_dependency "${command}" "${package}" | 			print_missing_dependency "${command}" "${package}" | ||||||
| 			all_installed=1 | 			all_installed=1 | ||||||
| 		fi | 		fi | ||||||
|  | @ -176,11 +176,11 @@ function exec_as_root() { | ||||||
| 
 | 
 | ||||||
| function filter() { | function filter() { | ||||||
| 	# list of current connections | 	# list of current connections | ||||||
| 	file="$1" | 	file="${1}" | ||||||
| 	# subnet extension, e.g. ".0.0" | 	# subnet extension, e.g. ".0.0" | ||||||
| 	ext="$2" | 	ext="${2}" | ||||||
| 	# subnet suffix, e.g. "/16" | 	# subnet suffix, e.g. "/16" | ||||||
| 	suffix="$3" | 	suffix="${3}" | ||||||
| 	rm -f "${filtered}" | 	rm -f "${filtered}" | ||||||
| 	touch "${filtered}" | 	touch "${filtered}" | ||||||
| 
 | 
 | ||||||
|  | @ -208,14 +208,14 @@ function parse_command_line_args() { | ||||||
| 	unset TEMP | 	unset TEMP | ||||||
| 
 | 
 | ||||||
| 	while true; do | 	while true; do | ||||||
| 		case "$1" in | 		case "${1}" in | ||||||
| 		'-a' | '--auto') | 		'-a' | '--auto') | ||||||
| 				case "$2" in | 			case "${2}" in | ||||||
| 			'') | 			'') | ||||||
| 				autopilot=1 | 				autopilot=1 | ||||||
| 				;; | 				;; | ||||||
| 			*[!0-9]*) | 			*[!0-9]*) | ||||||
| 						echo "Invalid argument for parameter 'auto': '$2'. Invoke with --help for help." >&2 | 				echo "Invalid argument for parameter 'auto': '${2}'. Invoke with --help for help." >&2 | ||||||
| 				exit 1 | 				exit 1 | ||||||
| 				;; | 				;; | ||||||
| 			*) | 			*) | ||||||
|  | @ -225,15 +225,15 @@ function parse_command_line_args() { | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-c' | '--country') | 		'-c' | '--country') | ||||||
| 				IFS=',' read -ra bancountries <<< "$2" | 			IFS=',' read -ra bancountries <<<"${2}" | ||||||
| 				if [[ -z ${bancountries[@]// } ]] ; then | 			if [[ -z ${bancountries[@]// /} ]]; then | ||||||
| 					echo "Invalid argument for parameter 'country': '$2'. Invoke with --help for help." >&2 | 				echo "Invalid argument for parameter 'country': '${2}'. Invoke with --help for help." >&2 | ||||||
| 				exit 1 | 				exit 1 | ||||||
| 			fi | 			fi | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-d' | '--database') | 		'-d' | '--database') | ||||||
| 				database="$2" | 			database="${2}" | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-e' | '--dependencies') | 		'-e' | '--dependencies') | ||||||
|  | @ -241,11 +241,11 @@ function parse_command_line_args() { | ||||||
| 			exit $? | 			exit $? | ||||||
| 			;; | 			;; | ||||||
| 		'-j' | '--jail') | 		'-j' | '--jail') | ||||||
| 				jail="$2" | 			jail="${2}" | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-n' | '--netmask') | 		'-n' | '--netmask') | ||||||
| 				case "$2" in | 			case "${2}" in | ||||||
| 			'1' | '8') | 			'1' | '8') | ||||||
| 				netmask=8 | 				netmask=8 | ||||||
| 				;; | 				;; | ||||||
|  | @ -259,14 +259,14 @@ function parse_command_line_args() { | ||||||
| 				netmask=32 | 				netmask=32 | ||||||
| 				;; | 				;; | ||||||
| 			*) | 			*) | ||||||
| 						echo "Invalid argument for parameter 'netmask': '$2'. Invoke with --help for help." >&2 | 				echo "Invalid argument for parameter 'netmask': '${2}'. Invoke with --help for help." >&2 | ||||||
| 				exit 1 | 				exit 1 | ||||||
| 				;; | 				;; | ||||||
| 			esac | 			esac | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-p' | '--port') | 		'-p' | '--port') | ||||||
| 				port="$2" | 			port="${2}" | ||||||
| 			shift | 			shift | ||||||
| 			;; | 			;; | ||||||
| 		'-h' | '--help') | 		'-h' | '--help') | ||||||
|  | @ -278,7 +278,7 @@ function parse_command_line_args() { | ||||||
| 			break | 			break | ||||||
| 			;; | 			;; | ||||||
| 		*) | 		*) | ||||||
| 				echo "Unknown error on command line argument '$1'. Terminating." >&2 | 			echo "Unknown error on command line argument '${1}'. Terminating." >&2 | ||||||
| 			exit 1 | 			exit 1 | ||||||
| 			;; | 			;; | ||||||
| 		esac | 		esac | ||||||
|  | @ -303,13 +303,13 @@ function parse_command_line_args() { | ||||||
| # color to the next happen at different values. | # color to the next happen at different values. | ||||||
| ################################################################################ | ################################################################################ | ||||||
| function set_highlight_color() { | function set_highlight_color() { | ||||||
| 	local count=$1 | 	local count=${1} | ||||||
| 	case "${choice}" in | 	case "${choice}" in | ||||||
| 	"1") | 	"1") | ||||||
| 		# /32: 0 <= green < 3 <= yellow < 5 <= red | 		# /32: 0 <= green < 3 <= yellow < 5 <= red | ||||||
| 			if [ $count -ge 5 ] ; then | 		if [ ${count} -ge 5 ]; then | ||||||
| 			hilite="${red}" | 			hilite="${red}" | ||||||
| 			elif [ $count -ge 3 ] ; then | 		elif [ ${count} -ge 3 ]; then | ||||||
| 			hilite="${yellow}" | 			hilite="${yellow}" | ||||||
| 		else | 		else | ||||||
| 			hilite="${green}" | 			hilite="${green}" | ||||||
|  | @ -317,9 +317,9 @@ function set_highlight_color() { | ||||||
| 		;; | 		;; | ||||||
| 	"2") | 	"2") | ||||||
| 		# /24: 0 <= green < 7 <= yellow < 13 <= red | 		# /24: 0 <= green < 7 <= yellow < 13 <= red | ||||||
| 			if [ $count -ge 13 ] ; then | 		if [ ${count} -ge 13 ]; then | ||||||
| 			hilite="${red}" | 			hilite="${red}" | ||||||
| 			elif [ $count -ge 7 ] ; then | 		elif [ ${count} -ge 7 ]; then | ||||||
| 			hilite="${yellow}" | 			hilite="${yellow}" | ||||||
| 		else | 		else | ||||||
| 			hilite="${green}" | 			hilite="${green}" | ||||||
|  | @ -327,9 +327,9 @@ function set_highlight_color() { | ||||||
| 		;; | 		;; | ||||||
| 	"3") | 	"3") | ||||||
| 		# /16: 0 <= green < 13 <= yellow < 25 <= red | 		# /16: 0 <= green < 13 <= yellow < 25 <= red | ||||||
| 			if [ $count -ge 25 ] ; then | 		if [ ${count} -ge 25 ]; then | ||||||
| 			hilite="${red}" | 			hilite="${red}" | ||||||
| 			elif [ $count -ge 13 ] ; then | 		elif [ ${count} -ge 13 ]; then | ||||||
| 			hilite="${yellow}" | 			hilite="${yellow}" | ||||||
| 		else | 		else | ||||||
| 			hilite="${green}" | 			hilite="${green}" | ||||||
|  | @ -337,9 +337,9 @@ function set_highlight_color() { | ||||||
| 		;; | 		;; | ||||||
| 	"4") | 	"4") | ||||||
| 		# /8: 0 <= green < 21 <= yellow < 49 <= red | 		# /8: 0 <= green < 21 <= yellow < 49 <= red | ||||||
| 			if [ $count -ge 49 ] ; then | 		if [ ${count} -ge 49 ]; then | ||||||
| 			hilite="${red}" | 			hilite="${red}" | ||||||
| 			elif [ $count -ge 21 ] ; then | 		elif [ ${count} -ge 21 ]; then | ||||||
| 			hilite="${yellow}" | 			hilite="${yellow}" | ||||||
| 		else | 		else | ||||||
| 			hilite="${green}" | 			hilite="${green}" | ||||||
|  | @ -378,7 +378,7 @@ function process_file () { | ||||||
| 		addrwithsuffix="${addronly}${suffix}" | 		addrwithsuffix="${addronly}${suffix}" | ||||||
| 		set_highlight_color "${count}" | 		set_highlight_color "${count}" | ||||||
| 		country="$("${curdir}/geoip-lookup.py" -f "${database}" "${addronly}")" | 		country="$("${curdir}/geoip-lookup.py" -f "${database}" "${addronly}")" | ||||||
| 		if [[ autopilot -eq 0 ]] ; then | 		if [[ ${autopilot} -eq 0 ]]; then | ||||||
| 			echo "Country: '${yellow}${country}${reset}'" | 			echo "Country: '${yellow}${country}${reset}'" | ||||||
| 		fi | 		fi | ||||||
| 		echo -n "Address ${bold}$((nline++)) of ${nlines}${reset}: \ | 		echo -n "Address ${bold}$((nline++)) of ${nlines}${reset}: \ | ||||||
|  | @ -389,7 +389,7 @@ Found '${blue}${addrwithsuffix}${reset}' ${hilite}${count}${reset} times." | ||||||
| 			read banaction | 			read banaction | ||||||
| 		else | 		else | ||||||
| 			if [[ " ${bancountries[@]} " =~ " ${country} " ]]; then | 			if [[ " ${bancountries[@]} " =~ " ${country} " ]]; then | ||||||
| 				if [[ $count -ge $autopilot ]] ; then | 				if [[ ${count} -ge ${autopilot} ]]; then | ||||||
| 					echo -en "\n${red}Autopilot active. ${reset}" | 					echo -en "\n${red}Autopilot active. ${reset}" | ||||||
| 					banaction=y | 					banaction=y | ||||||
| 				else | 				else | ||||||
|  | @ -397,7 +397,7 @@ Found '${blue}${addrwithsuffix}${reset}' ${hilite}${count}${reset} times." | ||||||
| 					return | 					return | ||||||
| 				fi | 				fi | ||||||
| 			else | 			else | ||||||
| 				if [[ $count -ge $autopilot ]] ; then | 				if [[ ${count} -ge ${autopilot} ]]; then | ||||||
| 					echo -en "\n${green}Autopilot active. ${reset}" | 					echo -en "\n${green}Autopilot active. ${reset}" | ||||||
| 					banaction=n | 					banaction=n | ||||||
| 				else | 				else | ||||||
|  | @ -429,7 +429,7 @@ banlist (country=${yellow}${country}${reset})." | ||||||
| 
 | 
 | ||||||
| # Create a temp directory, chdir into it and create the (initially empty) | # Create a temp directory, chdir into it and create the (initially empty) | ||||||
| # banlist file. | # banlist file. | ||||||
| tmpdir=$(mktemp -d) | tmpdir="$(mktemp -d)" | ||||||
| 
 | 
 | ||||||
| # Set up all file paths | # Set up all file paths | ||||||
| curdir="$(dirname "$0")" | curdir="$(dirname "$0")" | ||||||
|  | @ -563,6 +563,6 @@ while read -r addrwithsuffix ; do | ||||||
| 	exec_as_root fail2ban-client set "${jail}" banip "${addrwithsuffix}" | 	exec_as_root fail2ban-client set "${jail}" banip "${addrwithsuffix}" | ||||||
| done <"${banlist}" | done <"${banlist}" | ||||||
| 
 | 
 | ||||||
| end=$(date +%s) | end="$(date +%s)" | ||||||
| 
 | 
 | ||||||
| echo "${green}All done in $((end - start)) seconds!${reset}" | echo "${green}All done in $((end - start)) seconds!${reset}" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue