Не уверен, что ваша попытка решения имеет отношение к заявленной вами проблеме; если ваше описание проблемы точно, то должно сработать следующее
awk 'NR==1,/Caroline, No/{print;next};c++<5{print};' file
Я не утверждаю, что это лучший вариант, но если вы не можете найти другого работающего варианта, вы можете «свернуть свой собственный», используя загружаемую базу данных GeoIP и инструмент ipset .
Например, загрузите базу данных Geolite2 Country в формате CSV. Скачайте и разархивируйте файлы:
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip
cd GeoLite2-Country-CSV_20190430
Найдите идентификатор для Франции и отфильтруйте все записи для французских сетей:
grep France GeoLite2-Country-Locations-en.csv
3017382,en,EU,Europe,FR,France,1
awk -F, '$2 == 3017382 {print $1}' > french_networks.txt
Создайте ipset, содержащий французские сети под названиемfrance
:
ipset create france hash:net
while read network ; do
ipset add france $network;
done < french_networks.txt
Используйте ipset для создания правила iptables
, которое отбрасывает все, что не из Франции. Обратите внимание, что вам может потребоваться добавить дополнительные правила, гарантирующие, что локальные сети не будут удалены :
iptables -A INPUT -m set ! --match-set france src -j DROP
Вы можете попробовать csf -его легко установить, и в csfpost.sh вы можете установить правила для iptables. в csf.conf у вас есть CC _ALLOW _FILTER, где вы можете установить FR. Пожалуйста, ознакомьтесь с веб-документацией и дайте совет -доступ к консоли на сервере — хорошая идея, на случай, если вы заблокируете себя, хе-хе.
Вы можете легко получить французские IP-адреса для iptables, используя страницу ниже.
https://www.ip2location.com/free/visitor-blocker
На этой странице выберите «Франция», затем выберите «Linux iptables accept» в качестве выходного формата.