Как заблокировать ненужные ip адреса ?
Небольшой скрипт интерпретатора Bash, который использует ipset и iptables для запрета большого количества IP-адресов, опубликованных в черных списках IP.
ipset использует хэш-таблицу для хранения/извлечения IP-адресов, и, следовательно, поиск IP-адресов намного быстрее, чем тысячи последовательно разобранных правил запрета iptables.
Однако предел списка ipset составляет 2 ^ 16 записей.
IPSET_BLACKLIST_NAME=blacklist # change it if it collides with a pre-existing ipset list IPSET_TMP_BLACKLIST_NAME=${IPSET_BLACKLIST_NAME}-tmp # ensure the diretory for IP_BLACKLIST/IP_BLACKLIST_RESTORE exists (it won't be created automatically) IP_BLACKLIST_RESTORE=/etc/ipset-blacklist/ip-blacklist.restore IP_BLACKLIST=/etc/ipset-blacklist/ip-blacklist.list VERBOSE=yes # probably set to "no" for cron jobs, default to yes FORCE=yes # will create the ipset-iptable binding if it does not already exist let IPTABLES_IPSET_RULE_NUMBER=1 # if FORCE is yes, the number at which place insert the ipset-match rule (default to 1) # List of URLs for IP blacklists. Currently, only IPv4 is supported in this script, everything else will be filtered. BLACKLISTS=( # "file:///etc/ipset-blacklist/ip-blacklist-custom.list" # optional, for your personal nemeses (no typo, plural) "https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1" # TOR Exit Nodes "https://www.maxmind.com/en/proxy-detection-sample-list" # MaxMind GeoIP Anonymous Proxies "http://danger.rulez.sk/projects/bruteforceblocker/blist.php" # BruteForceBlocker IP List "https://www.spamhaus.org/drop/drop.lasso" # Spamhaus Don't Route Or Peer List (DROP) "http://cinsscore.com/list/ci-badguys.txt" # C.I. Army Malicious IP List "https://www.openbl.org/lists/base.txt" # OpenBL.org 30 day List "https://lists.blocklist.de/lists/all.txt" # blocklist.de attackers "http://blocklist.greensnow.co/greensnow.txt" # GreenSnow "https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/firehol_level1.netset" # Firehol Level 1 # "http://ipverse.net/ipblocks/data/countries/xx.zone" # Ban an entire country, see http://ipverse.net/ipblocks/data/countries/ ) MAXELEM=1000000
Установка
# wget -O /usr/local/sbin/update-blacklist.sh https://raw.githubusercontent.com/trick77/ipset-blacklist/master/update-blacklist.sh # chmod +x /usr/local/sbin/update-blacklist.sh # mkdir -p /etc/ipset-blacklist # wget -O /etc/ipset-blacklist/ipset-blacklist.conf https://raw.githubusercontent.com/trick77/ipset-blacklist/master/ipset-blacklist.conf
Измените ipset-blacklist.conf в соответствии с вашими потребностями.
По умолчанию, черные списки IP-адресов будут сохранены в /etc/ipset-blacklist/ip-blacklist.restore
# apt-get install ipset
# /usr/local/sbin/update-blacklist.sh /etc/ipset-blacklist/ipset-blacklist.conf
Создайте черный список ipset и вставьте его в свой входной фильтр iptables (см. Ниже).
После надлежащего тестирования обязательно сохраните его в скрипты брандмауэра или аналогичном, или правила будут потеряны после следующей перезагрузки.
Автоматическое обновление черного списка с помощью задания cron
Правило фильтрации iptables
# Enable blacklists ipset restore < /etc/ipset-blacklist/ip-blacklist.restore iptables -I INPUT 1 -m set --match-set blacklist src -j DROP
Обязательно запустите этот фрагмент в сценарии брандмауэра.
Если вы этого не сделаете, будет отсутствовать черный список ipset и правило iptables для запрета адресов из черного списка.
Cron job
Чтобы автоматически обновить черный список, скопируйте следующий код в /etc/cron.d/update-blacklist.
Не обновляйте список слишком часто, или некоторые поставщики черного списка запретят ваш IP-адрес.