Геолокація для IP-адреси

Достатньо простий скрипт на python. Повертає ISO код країни для IP-адреси. Використовується для визначення чи належить ip-адреса до українського сегмента. Я цей скрипт використав у конфіг-файлі поштового сервера Exim4 (приклад нижче скрипту)

#!/usr/bin/env python3

import sys
import geoip2.database

# path to your GeoIP database file
# from https://db-ip.com/db/download/ip-to-country-lite 

GEOIP_DB_FILE = '/opt/geolocate/ipdb202305.mmdb'

# Open the GeoIP database file
geoip_reader = geoip2.database.Reader(GEOIP_DB_FILE)
# Get the IP address from the command-line arguments
ip_address = sys.argv[1]
try:
    # Look up the IP address in the GeoIP database
    # Get the country code from the GeoIP response
    country_code = geoip_reader.country(ip_address).country.iso_code.strip() # .name
except geoip2.errors.AddressNotFoundError:
    # IP address not found in the GeoIP database
    country_code = 'unknown'
# Output the country code

print(country_code, end = '')

Зауваження до скрипту: треба перевірити що скрипт не повертає зайвих знаків, для цього у country_code .iso_code.strip() а у принта end = ''

Фрагмент конфігу Exim4 /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
блокує не-UA smtp-клієнтів

# UA check policy

# Retrieve the country code of the client's IP address using the Python script
# Replace /opt/geolocate/geoip_lookup.py with the actual path to the script
# Make sure that the script is executable (chmod +x /opt/geolocate/geoip_lookup.py )
# /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
warn
  condition = ${if !eq{${run{/opt/geolocate/geoip_lookup.py $sender_host_address}}}{UA}{yes}{no}}
  message = Your SMTP session is blocked because you are not located in Ukraine IP address is $sender_host_address.

# Block the sender's SMTP session if the country code is not UA (Ukraine)
deny
  message = Your SMTP session is blocked because you are not located in Ukraine (UA). IP address is $sender_host_address.
  !hosts = +relay_from_hosts
  condition = ${if !eq{${run{/opt/geolocate/geoip_lookup.py $sender_host_address}}}{UA}{yes}{no}}

після збереження скрипта у /etc/exim4  виконати

sudo update-exim4.conf -v
service exim4 restart
service exim4 status

Перевірка виконання умов в конфігах exim4. Цей вираз відповідає на питання “блокувати?” якщо адреса UA то поверне “no”

sudo exim -be '${if !eq{${run{/opt/geolocate/geoip_lookup.py 11.11.11.11}}}{UA}{yes}{no}}'

 

Одна відповідь на “Геолокація для IP-адреси”

  1. […] коли адреса ідентифікується як українська то ок, але у конфігах для коректного виконання виглядає так: condition = ${if !eq{${run{/opt/geolocate/geoip_lookup.py $sender_host_address}}}{UA}{yes}{no}} скрипт повертає тільки код країни. Подробиці тут. […]

Залишити відповідь