Ограничиваем доступ на сервер с IP адресов, которые принадлежат exit-нодам TOR’а. Блокировать будем с помощью CSF, и с помощью iptables непосредственно.
Блокируем TOR в CSF.
Если на сервере установлен CSF, то можно воспользоваться встроенным в него механизмом блокировки. Для этого:
1. В /etc/csf/csf.conf для URLGET устанавливаем значение 2 (LWP):
# cat /etc/csf/csf.conf | grep "URLGET =" URLGET = "2"
2. Открываем файл /etc/csf/csf.blocklists, находим там строки вида:
# TOR Exit Nodes List # Set URLGET in csf.conf to use LWP as this list uses an SSL connection # Details: https://trac.torproject.org/projects/tor/wiki/doc/TorDNSExitList # TOR|86400|0|https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1
3. Раскомментиурем последнюю строку в этой секции и пропишем в ней IP сервера:
TOR|86400|0|https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=10.11.12.23
4. Сохраняем файл, перезапускаем csf и lfd:
# systemctl restart lfd # csf -r
5. Проверяем что в ipset у нас появился список bl_TOR, и что этот список не пуст:
# ipset list bl_TOR
Если всё сделано верно, то bl_TOR будет содержать IP адреса TOR нод, доступ с которых на сервер закрыт.
Блокируем TOR с iptables и ipset.
1. Создаём новую таблицу в ipset:
# ipset -N block_TOR iphash
2. Получаем список IP адресов и отправляем его в ipset:
# wget -q https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1 -O - | \ sed '/^#/d' | \ while read ipAddr; do \ ipset -q -A block_TOR $ipAddr \ done
Такую выгрузку можно поместить в отдельный скрипт и запускать её по cron’у.
3. Блокируем доступ для нашего сета:
# iptables -A INPUT -m set --match-set block_TOR src -j DROP
Опять же, если всё будет сделано верно, доступ через TOR на сервер окажется заблокирован.