mirror of
https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker.git
synced 2025-09-02 18:50:13 +00:00
setup-ngxblocker: add manual whitelisting
* adds -l option to manually whitelist domains see --help fixes https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/issues/178
This commit is contained in:
parent
5d494bdd63
commit
176573816e
1 changed files with 39 additions and 8 deletions
|
@ -42,6 +42,7 @@ Usage: $script [OPTIONS]
|
||||||
[ -c ] : NGINX conf directory (default: $CONF_DIR)
|
[ -c ] : NGINX conf directory (default: $CONF_DIR)
|
||||||
[ -m ] : NGINX main configuration (default: $MAIN_CONF)
|
[ -m ] : NGINX main configuration (default: $MAIN_CONF)
|
||||||
[ -i ] : Change installer path (default: $INSTALLER)
|
[ -i ] : Change installer path (default: $INSTALLER)
|
||||||
|
[ -l ] : Manual whitelist of domain (default: none)
|
||||||
[ -n ] : NO whitelist of .names only (default: $DOT_NAMES)
|
[ -n ] : NO whitelist of .names only (default: $DOT_NAMES)
|
||||||
[ -d ] : NO insert of DDOS rule (default: $INC_DDOS)
|
[ -d ] : NO insert of DDOS rule (default: $INC_DDOS)
|
||||||
[ -x ] : Actually change the files (default: don't change anything)
|
[ -x ] : Actually change the files (default: don't change anything)
|
||||||
|
@ -49,6 +50,7 @@ Usage: $script [OPTIONS]
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
$script -n (Whitelist all directory names in $WWW as domains: not just dot.name directories)
|
$script -n (Whitelist all directory names in $WWW as domains: not just dot.name directories)
|
||||||
|
$script -l domain1.com -l domain2.com (Whitelist these manual domain name args)
|
||||||
$script -d (Do not insert DDOS rule: these may clash with existing 'limit_conn addr' rules)
|
$script -d (Do not insert DDOS rule: these may clash with existing 'limit_conn addr' rules)
|
||||||
$script (Don't change anything: display results on stdout)
|
$script (Don't change anything: display results on stdout)
|
||||||
$script -x (Change / update config files)
|
$script -x (Change / update config files)
|
||||||
|
@ -133,16 +135,40 @@ whitelist_domains() {
|
||||||
domain_len=$(find $WWW -mindepth 1 -maxdepth 1 -type d -exec basename {} \; \
|
domain_len=$(find $WWW -mindepth 1 -maxdepth 1 -type d -exec basename {} \; \
|
||||||
| awk '{ print length ($0) }' | sort -nr | head -1)
|
| awk '{ print length ($0) }' | sort -nr | head -1)
|
||||||
|
|
||||||
for domain in $domain_list; do
|
whitelist_print Auto $domain_len $domain_list
|
||||||
if ! grep "$domain" $conf >/dev/null 2>&1; then
|
}
|
||||||
printf "%-s %-$(( $domain_len +2))s %s\n" "Whitelist:" "$domain" "=> $conf"
|
|
||||||
if [ "$DRY_RUN" = "N" ]; then
|
whitelist_manual_domains() {
|
||||||
printf "%-$(( $domain_len +8))s %s\n" "\"~*$domain\"" "0;" >> $conf
|
local x= domain= domain_len=0
|
||||||
fi
|
local conf=$BOTS_DIR/whitelist-domains.conf
|
||||||
|
|
||||||
|
for domain in $DOMAINS; do
|
||||||
|
x=$(echo $domain | wc -m)
|
||||||
|
|
||||||
|
if [ $x -gt $domain_len ]; then
|
||||||
|
domain_len=$x
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
whitelist_print Manual $domain_len $DOMAINS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
whitelist_print() {
|
||||||
|
local type=$1 domain= domain_len=$2 domain_list=$(echo $@ | cut -f3- -d ' ')
|
||||||
|
local conf=$BOTS_DIR/whitelist-domains.conf
|
||||||
|
|
||||||
|
for domain in $domain_list; do
|
||||||
|
if ! grep "$domain" $conf >/dev/null 2>&1; then
|
||||||
|
printf "%-s %-$(( $domain_len +2))s %s\n" "$type Whitelist:" "$domain" "=> $conf"
|
||||||
|
if [ "$DRY_RUN" = "N" ]; then
|
||||||
|
printf "%-$(( $domain_len +8))s %s\n" "\"~*$domain\"" "0;" >> $conf
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
longest_str() {
|
longest_str() {
|
||||||
echo $@ | tr " " "\n" | awk '{print length ($0)}' | sort -nr | head -n1
|
echo $@ | tr " " "\n" | awk '{print length ($0)}' | sort -nr | head -n1
|
||||||
}
|
}
|
||||||
|
@ -298,7 +324,7 @@ check_nginx_directives() {
|
||||||
get_options() {
|
get_options() {
|
||||||
local arg= opts=
|
local arg= opts=
|
||||||
|
|
||||||
while getopts :w:e:v:b:c:m:i:ndxh opts "$@"
|
while getopts :w:l:e:v:b:c:m:i:ndxh opts "$@"
|
||||||
do
|
do
|
||||||
if [ -n "${OPTARG}" ]; then
|
if [ -n "${OPTARG}" ]; then
|
||||||
case "$opts" in
|
case "$opts" in
|
||||||
|
@ -309,6 +335,7 @@ get_options() {
|
||||||
|
|
||||||
case "$opts" in
|
case "$opts" in
|
||||||
w) WWW=$arg; check_args $opts path $arg ;;
|
w) WWW=$arg; check_args $opts path $arg ;;
|
||||||
|
l) DOMAINS="$DOMAINS $arg" ;;
|
||||||
e) VHOST_EXT=$arg;;
|
e) VHOST_EXT=$arg;;
|
||||||
v) VHOST_DIR=$arg; check_args $opts path $arg ;;
|
v) VHOST_DIR=$arg; check_args $opts path $arg ;;
|
||||||
b) BOTS_DIR=$arg; check_args $opts path $arg ;;
|
b) BOTS_DIR=$arg; check_args $opts path $arg ;;
|
||||||
|
@ -435,7 +462,11 @@ main() {
|
||||||
if [ -d $WWW ]; then
|
if [ -d $WWW ]; then
|
||||||
whitelist_domains
|
whitelist_domains
|
||||||
else
|
else
|
||||||
printf "\nWeb directory not found ('$WWW'): not whitelisting domains.\n"
|
printf "\nWeb directory not found ('$WWW'): not automatically whitelisting domains.\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$DOMAINS" ]; then
|
||||||
|
whitelist_manual_domains
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# download new bots.d / conf.d files
|
# download new bots.d / conf.d files
|
||||||
|
|
Loading…
Add table
Reference in a new issue