Skip to content

Commit 404035d

Browse files
committed
Add more bot IP sources
1 parent 3f5fc75 commit 404035d

5 files changed

Lines changed: 96 additions & 19 deletions

File tree

alpine/alpine-root/etc/local.d/01-iptables-extra.start.example

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ done
7676
done
7777
} &
7878

79-
# disallow traffic from Google Cloud
79+
# disallow traffic from bots
8080
{
81-
[ ! -f /var/tmp/google-cloud-ipv4.txt ] || [ ! -f /var/tmp/google-cloud-ipv6.txt ] && update-google-ips.sh || :
81+
[ ! -f /var/tmp/google-googlebot-ipv4.txt ] || [ ! -f /var/tmp/google-googlebot-ipv6.txt ] || [ ! -f /var/tmp/google-cloud-ipv4.txt ] || [ ! -f /var/tmp/google-cloud-ipv6.txt ] && update-google-ips.sh || :
8282

83-
for i in $(cat /var/tmp/google-cloud-ipv4.txt) ; do
83+
for i in $(cat /var/tmp/google-googlebot-ipv4.txt /var/tmp/google-cloud-ipv4.txt /var/tmp/bots-*-ipv4.txt) ; do
8484
iptables -A INPUT -s "$i" -j DROP
8585
done
8686

87-
for i in $(cat /var/tmp/google-cloud-ipv6.txt) ; do
87+
for i in $(cat /var/tmp/google-googlebot-ipv6.txt /var/tmp/google-cloud-ipv6.txt /var/tmp/bots-*-ipv6.txt) ; do
8888
ip6tables -A INPUT -s "$i" -j DROP
8989
done
9090
} &

alpine/alpine-root/etc/periodic/hourly/reload-ips.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ reload_rules=0
55
update-banlist-dns.sh &
66

77
update-allowlist-ips.sh && logger 'updated allowlist IPs' && reload_rules=1
8+
update-bot-ips.sh && logger 'updated bot IPs' && reload_rules=1
9+
update-cloudflare-ips.sh && logger 'updated Cloudflare IPs' && reload_rules=1
810
update-google-ips.sh && logger 'updated Google IPs' && reload_rules=1
9-
update-cloudflare-ips.sh && logger 'received new Cloudflare IPs' && reload_rules=1
1011

11-
[ "$reload_rules" = 1 ] && /etc/init.d/local restart | logger
12+
[ "$reload_rules" = 1 ] && /etc/init.d/local --verbose restart | logger
1213

1314
wait
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env bash
2+
3+
PATH_PREFIX="/var/tmp/bots"
4+
PREFIX="https://raw.githubusercontent.com/lord-alfred/ipranges/main"
5+
IPV4=( amazon bing duckassistbot duckduckbot facebook microsoft openai perplexity pingdom statuscake twitter )
6+
IPV6=( amazon facebook microsoft pingdom twitter )
7+
8+
path() {
9+
version="$1"
10+
target="$2"
11+
echo "${PATH_PREFIX}-${target}-ipv${version}.txt"
12+
}
13+
14+
load() {
15+
for target in "${IPV4[@]}" ; do
16+
cat $(path 4 "${target}") 2>>/dev/null
17+
done
18+
19+
for target in "${IPV6[@]}" ; do
20+
cat $(path 6 "${target}") 2>>/dev/null
21+
done
22+
}
23+
24+
sum() {
25+
load | sha256sum
26+
}
27+
28+
get() {
29+
url="$1"
30+
sudo -u nobody wget --timeout=30 --tries=10 -qO - "${url}"
31+
echo
32+
}
33+
34+
write() {
35+
version="$1"
36+
cidr="$2"
37+
target="$3"
38+
output=$(path "${version}" "${target}")
39+
temp="${output}.tmp"
40+
grepcidr -e "${cidr}" | \
41+
sort -u > "${temp}"
42+
[ "$(stat --format='%s' ${temp})" -gt 1 ] && mv "${temp}" "${output}"
43+
}
44+
45+
download() {
46+
for target in "${IPV4[@]}" ; do
47+
get "${PREFIX}/${target}/ipv4_merged.txt" | write 4 '0.0.0.0/0' "${target}"
48+
done
49+
50+
for target in "${IPV6[@]}" ; do
51+
get "${PREFIX}/${target}/ipv6_merged.txt" | write 6 '::/0' "${target}"
52+
done
53+
}
54+
55+
before=$(sum)
56+
download
57+
after=$(sum)
58+
[ "${before}" != "${after}" ] && exit 0 || exit 1

alpine/alpine-root/usr/local/sbin/update-cloudflare-ips.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,20 @@ sum() {
1414
load | sha256sum
1515
}
1616

17+
get() {
18+
url="$1"
19+
sudo -u nobody wget --timeout=30 --tries=10 -qO - "${url}"
20+
echo
21+
}
22+
1723
download() {
1824
version="$1"
1925
cidr="$2"
2026
output="${PATH_PREFIX}${version}.txt"
2127
temp="${output}.tmp"
22-
sudo -u nobody wget --timeout=30 --tries=10 -qO - "https://www.cloudflare.com/ips-v${version}" | grepcidr -e "${cidr}" | sort -u > "${temp}"
28+
( get "https://www.cloudflare.com/ips-v${version}" ; get "https://raw.githubusercontent.com/lord-alfred/ipranges/main/cloudflare/ipv${version}_merged.txt" ) | \
29+
grepcidr -e "${cidr}" | \
30+
sort -u > "${temp}"
2331
[ "$(stat --format='%s' ${temp})" -gt 1 ] && mv "${temp}" "${output}"
2432
}
2533

alpine/alpine-root/usr/local/sbin/update-google-ips.sh

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
# https://cloud.google.com/compute/docs/faq#find_ip_range
44

55
PATH_PREFIX="/var/tmp/google"
6+
PREFIX="https://raw.githubusercontent.com/lord-alfred/ipranges/main"
67

7-
load() {
8-
cat ${PATH_PREFIX}*ipv{4,6}.txt 2>>/dev/null
8+
sum() {
9+
cat ${PATH_PREFIX}*ipv{4,6}.txt 2>>/dev/null | sha256sum
910
}
1011

11-
sum() {
12-
load | sha256sum
12+
parse() {
13+
version="$1"
14+
jq --raw-output --monochrome-output ".prefixes[] | .ipv${version}Prefix" | grep -v 'null'
1315
}
1416

1517
write() {
@@ -18,23 +20,31 @@ write() {
1820
target="$3"
1921
output="${PATH_PREFIX}-${target}-ipv${version}.txt"
2022
temp="${output}.tmp"
21-
cat | \
22-
jq --raw-output --monochrome-output ".prefixes[] | .ipv${version}Prefix" | \
23-
grep -v 'null' | \
24-
grepcidr -e "${cidr}" | \
25-
sort -u > "${temp}"
23+
grepcidr -e "${cidr}" | sort -u > "${temp}"
2624
[ "$(stat --format='%s' ${temp})" -gt 1 ] && mv "${temp}" "${output}"
2725
}
2826

27+
get() {
28+
url="$1"
29+
sudo -u nobody wget --timeout=30 --tries=10 -qO - "${url}"
30+
echo
31+
}
32+
2933
download() {
3034
target="$1"
31-
ips=$(sudo -u nobody wget --timeout=30 --tries=10 -qO - "https://www.gstatic.com/ipranges/${target}.json")
32-
write 4 '0.0.0.0/0' "${target}" <<< "${ips}"
33-
write 6 '::/0' "${target}" <<< "${ips}"
35+
ips=$(get "https://www.gstatic.com/ipranges/${target}.json")
36+
parse 4 <<< "${ips}" | write 4 '0.0.0.0/0' "${target}"
37+
parse 6 <<< "${ips}" | write 6 '::/0' "${target}"
38+
}
39+
40+
download_googlebot() {
41+
get "${PREFIX}/googlebot/ipv4_merged.txt" | write 4 '0.0.0.0/0' 'googlebot'
42+
get "${PREFIX}/googlebot/ipv6_merged.txt" | write 6 '::/0' 'googlebot'
3443
}
3544

3645
before=$(sum)
3746
download 'cloud'
3847
download 'goog'
48+
download_googlebot
3949
after=$(sum)
4050
[ "${before}" != "${after}" ] && exit 0 || exit 1

0 commit comments

Comments
 (0)