ESMPT –это расширенная современная версия почтового протокола отправки сообщений SMTP (Extended SMTP). При установлении соединения тут применяется шифрование. И процесс отправки сообщений становиться более сложным чем в протоколе SMPT.
Первоначально необходимо установить безопасное соединение с сервером для этого используется openssl, который обычно есть в каждом сервере Linux
# openssl s_client -connect myserver.ru:465 -crlf
Произойдет установление соединения, вывод завершиться сообщением:
<…>
Start Time: 1700393590
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
---
220 myserver.ru ESMTP CommuniGate Pro 6.4.0
Теперь нужно представиться серверу. Что бы не возникло ошибок представиться лучше публичным IP адресом, который используется для выхода в Интернет. Узнать свой публичный IP адрес можно обратившись на сайт https://2ip.ru/
EHLO 46.0.100.100
Сервер должен ответить списком допустимых команд:
250-myserver.ru is pleased to meet you
250-DSN
250-SIZE
250-AUTH LOGIN PLAIN
250-ETRN
250-TURN
250-ATRN
250-NO-SOLICITING
250-8BITMIME
250-HELP
250-PIPELINING
250-SMTPUTF8
250 EHLO
Далее запускаем процедуру аутентификации. После запуска процедуры, нужно будет ввести логин и пароль но не в простом обычном виде, а в закодированном по стандарту кодирования Base64. Свои логин и пароль можно закодировать по стандарту Base64 например на сайте: https://www.base64encode.org/
Пример:
AUTH LOGIN
334 VXNlcm5hbWU6
TXlVc2VyQG15c2VydmVyLnJ1 (мой логин MyUser@myserver.ru в Base64)
334 UGFzc3dvcmQ6
TXlTZWNyZXRQYXNzd29yZA== (мой пароль MySecretPassword в Base64)
235 myserver.ru relaying authenticated
Удачная аутентификация завершиться сообщением 235 relaying authenticated
Далее устанавливаем от кого будет написано письмо (адрес отправителя). Нужно отметить, что адрес отправителя не всегда соответствует логину. В данном случае нам нужно указать адрес электронной почты нашего логина.
MAIL FROM: <MyUser@myserver.ru>
Сервер должен ответить сообщением 250 sender accepted
Теперь нужно задать почтовый адрес получателя. Тут важно, что команда RCPT TO вводиться в нижнем регистре, так как символ «R» в начале строки в сессии openssl заставит openssl переконнектиться и адрес получателя установлен не будет
rcpt to: recipient_of_the_letter@yandex.ru
Типичный ответ сервера:
250 recipient_of_the_letter@yandex.ru will relay mail for an authenticated user
Далее вводиться ключевое слово DATA, после чего пользователю предлагается написать письмо и завершить сообщение точкой.
DATA
354 Enter mail, end with "." on a line by itself
Вначале письма обычно нужно еще раз написать адрес отправителя, адрес получателя, а так же тему письма.
После этого написать текст письма и в последней строке написать точки и нажать ENTER.
Например:
from: MyUser@myserver.ru
to: recipient_of_the_letter@yandex.ru
subject: test 2023-11-19
Это тестовое сообщение, отправленное из консоли Linux!!
Отправил Королев В.С.
.
Сервер ответит, что сообщение принято к отправке
250 204410 message accepted for delivery
Для разъединения соединения нужно набрать команду QUIT, сервер ответит DONE, после чего соединение разорвется.
QUIT
DONE
воскресенье, 19 ноября 2023 г.
понедельник, 6 ноября 2023 г.
Установка FreeRADIUS с модулем Python3 в RockyLinux 9
Проведем установку FreeRADIUS, затем интегрируем в FreeRADIUS модуль Python, а затем добавим возможность использовать в модуле Python дополнительные библиотеки для работы с PostgreSQL и MySQL (MariaDB).
Обратившись на сайт https://freeradius.org/releases/ определяем последнюю стабильную версию FreeRADIUS. На ноябрь 2023 имеем следующую картину:
Актуальная, стабильная версия – 3.0.x, а именно – 3.0.26.
Определяем, какая версия дистрибутива содержится в наших стандартных репозитариях Rocky Linux 9:
# yum list freeradius
Получаем ответ: 3.0.21-37.el9. Это соответствует стабильной версии 3.0.х, поэтому просто выполняем установку FreeRADIUS стандартными средствами:
# yum install freeradius freeradius-utils
После выполнения установки, основная директория пакета FreeRADIUS будет находиться тут: /etc/raddb.
Основной конфигурационный файл: /etc/raddb/radiusd.conf
Директория с логами: /var/log/radius/
Далее необходимо сгенерировать сертификаты сервера FreeRADIUS, которые будут использоваться в механизмах EAP-TLS, PEAP и EAP-TTLS для установления зашифрованного соединения между авторизуемым клиентом и сервером FreeRADIUS.
Сначала нужно сгенерировать тестовые сертификаты:
# cd /etc/raddb/certs/
# ./bootstrap
И затем попробовать запустить FreeRADIUS
# radiusd –X
Запуск сервера должен пройти без ошибок и закончиться выводом:
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 41210
Listening on proxy address :: port 49147
Ready to process requests
Выход из запущенного процесса - CTRL+C
Далее для работы в действующей сети необходимо сгенерировать индивидуальные сертификаты сервера FreeRADIUS.
Удаляем все ранее созданные сертификаты:
# cd /etc/raddb/certs/
# rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*
Редактируем начальные данные корневого сертификата:
# nano ca.cnf
Изменяем пароли по умолчанию в разделе [ req ] на какие-то свои:
input_password = whatever
output_password = whatever
например, на
input_password = mypass01
output_password = mypass01
В разделе [certificate_authority] изменяем название страны, организации и пр. Значения по умолчанию:
countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.org
commonName = "Example Certificate Authority"
например, на такие значения:
countryName = RU
stateOrProvinceName = Radius
localityName = BombeyRadius
organizationName = MyOrg
emailAddress = admin@example.ru
commonName = "CA Certificate Authority"
Затем запускаем генерацию корневого сертификата:
# make ca.pem
# make ca.der
Переходим к созданию сертификата сервера:
# nano server.cnf
Изменяем пароли по умолчанию в разделе [ req ] на какие-то свои:
input_password = whatever
output_password = whatever
например, на
input_password = mypass01
output_password = mypass01
В разделе [server] изменяем название страны, организации и пр. Значения по умолчанию:
countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.org
commonName = "Example Server Certificate"
изменяем на:
countryName = RU
stateOrProvinceName = Radius
localityName = BombeyRadius
organizationName = MyOrg
emailAddress = admin@example.ru
commonName = "Certificate Serv Radius Bombey"
Согласно инструкции от FreeRADIUS, поле commonName в сертификате сервера должно отличаться от поля commonName в корневом сертификате. После редактирования файла запускаем генерацию cертификата сервера:
# make server.pem
# make server.csr
Затем открываем файл настроек EAP FreeRADIUS и указываем пароль сертификата в подсекции tls секции eap:
# nano /etc/raddb/mods-enabled/eap
eap {
<..>
tls-config tls-common {
#private_key_password = whatever
private_key_password = mypass01
<..>
}
<..>
}
Вновь выполняем тестовый запуск FreeRADIUS
# radiusd -X
И вновь запуск команды должен пройти без ошибок.
Проведем тестовую авторизацию абонента. Для этого необходимо что бы клиент, откуда отправляется radius запрос, был добавлен в раздел клиентов сервера FreeRADIUS и пользователь, выполняющий авторизацию, был добавлен в раздел пользователей.
Клиенты сервера добавляются в файле: /etc/raddb/clients.conf
Тут уже должен быть создан клиент localhost. Ip адрес откуда ожидаются запросу - 127.0.0.1, секрет (пароль) для совершения запроса - testing123
# nano /etc/raddb/clients.conf
client localhost {
ipaddr = 127.0.0.1
secret = testing123
<…>
}
Тестового пользователя добавим в файл /etc/raddb/mods-config/files/authorize
# nano /etc/raddb/mods-config/files/authorize
В первой строке файла пишем данные пользователя:
korolev Cleartext-Password := "pass123"
Тут задается пользовать «korolev» с паролем «pass123».
Вновь запускаем FreeRADIUS в тестовом режиме:
# radius -X
В соседнем окне терминала выполняет тестовую команду авторизации пользователя:
# radtest korolev pass123 127.0.0.1 0 testing123
Sent Access-Request Id 103 from 0.0.0.0:43064 to 127.0.0.1:1812 length 77
User-Name = "korolev"
User-Password = "pass123"
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "pass123"
Received Access-Accept Id 103 from 127.0.0.1:1812 to 127.0.0.1:43064 length 20
Если мы получили в ответе «Access-Accept», значит авторизация пользователя прошла успешно. В случае неудачной авторизации ответ будет содержать «Access-Reject».
Переходим к установке python3 в FreeRADIUS.
Сначала устанавливаем сам python и дополнительные модули для работы с базами данных PostgeSQL и MySQL (MariaDB)
# yum install python3
# yum install pip
# pip install psycopg2-binary
# pip install mysql-connector
Проверяем, что python3 установлен и библиотеки могут быть использованы в коде:
# python3
Python 3.9.16 (main, Sep 12 2023, 00:00:00)
[GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> import mysql.connector
>>>
Если никаких ошибок не возникает, значит все установилось верно.
Не закрывая среду python, узнаем все системные пути, которые использует python в работе. Они понадобятся далее для интеграции python в FreeRADIUS:
>>> import sys
>>> sys.path
['', '/usr/lib64/python39.zip', '/usr/lib64/python3.9', '/usr/lib64/python3.9/lib-dynload', '/usr/local/lib64/python3.9/site-packages', '/usr/local/lib/python3.9/site-packages', '/usr/lib64/python3.9/site-packages', '/usr/lib/python3.9/site-packages']
>>>
Выход из среды python – CTRL+D.
Теперь устанавливаем модуль python3 для FreeRADIUS
# yum install python3-freeradius
Подключаем модуль Python в рабочую конфигурацию:
# ln -s /etc/raddb/mods-available/python3 /etc/raddb/mods-enabled/python3
Открываем модуль python3 и вносим изменения в конфигурацию:
# nano /etc/raddb/mods-enabled/python3
python3 {
В конфигурации модуля Python описывается, где будет лежать код модуля python3 и какие функции может обрабатывать этот модуль. В нашем случае модуль будет называться «bombey», функция, которая должна содержаться в модуле должна иметь имя «authorize», а сам файл модуля должен быть в директории ${modconfdir}/${.:name} (в «развернутом виде» – это /etc/raddb/mods-config/python3). В директиве python_path, кроме пути до модуля python3 нужно указать и все системные пути интерпретатора python. Мы получили эту информацию ранее, когда устанавливали python3. Теперь эти пути перечисляем здесь через двоеточие.
Создаем файл модуля bombey:
# nano /etc/raddb/mods-config/python3/bombey.py
И прописываем его содержимое:
#!/usr/bin/python3
import radiusd
def authorize(p):
print("*** authorize bombey ***")
print(p)
return radiusd.RLM_MODULE_OK
Сохраняем файл и делаем его исполняемым:
# chmod +x /etc/raddb/mods-config/python3/bombey.py
В файле определяется функция authorize, которой передается набор данных о авторизации в переменной «p». Данная переменная содержит кортеж данных авторизации: имя пользователя, пароль, IP адрес NAS устройства, формирующего авторизационной пакет, а так же временная метка. Функция authorize в данном случае делает всего несколько вещей – это вывод в консоль текста *** authorize bombey ***, вывод в консоль набора данных переменной «p» и завершение работы функции возвращением переменной RLM_MODULE_OK.
Переменные RLM_MODULE_* содержаться в модуле /etc/raddb/mods-config/python3/radiusd.py и соответствуют кодам завершения обработки модуля python3:
RLM_MODULE_REJECT = 0
RLM_MODULE_FAIL = 1
RLM_MODULE_OK = 2
RLM_MODULE_HANDLED = 3
RLM_MODULE_INVALID = 4
RLM_MODULE_USERLOCK = 5
RLM_MODULE_NOTFOUND = 6
RLM_MODULE_NOOP = 7
RLM_MODULE_UPDATED = 8
RLM_MODULE_NUMCODES = 9
Если функция будет возвращать RLM_MODULE_OK – это говорит о том, что в модуле python3, авторизация прошла удачно. А если возвращается RLM_MODULE_REJECT - авторизация была неуспешной. В файле /etc/raddb/mods-config/python3/example.py имеется ряд примеров разных функций используемых в FreeRADIUS и примеры использования разных конструкций для обработки данных и формирования ответа.
Добавляем модуль python в рабочий экземпляр сервиса FreeRADIUS
# nano /etc/raddb/sites-enabled/default
Нужно добавить в блок authorize использование модуля python между auth_log и chap:
authorize {
filter_username
preprocess
# auth_log
python3
chap
<....>
}
Вновь запускам FreeRADIUS в тесте:
# radius -X
И в соседней консоли пытаемся авторизоваться:
# radtest korolev pass123 127.0.0.1 0 testing123
Авторизация должна пройти как и раньше – успешно. Самое интересное в окне работы сервера.
Обратившись к логам в окне с запущенным сервером FreeRADIUS мы увидим, что модуль python3 работает. В лог выводятся строки:
*** authorize bombey ***
(('User-Name', 'korolev'), ('User-Password', 'pass123'), ('NAS-IP-Address', '127.0.0.1'), ('NAS-Port', '0'), ('Message-Authenticator', '0x690954bf4f3e6a343368af3a92fdc767'), ('Event-Timestamp', 'Nov 5 2023 13:32:17 +04'))
(1) [python3] = ok
В первой строке выводиться просто информация о начале обработки в модуле. Это строка print("*** authorize bombey ***") в файле модуля python – bombey.py.
Затем выводятся данные переданные в модуль. Данные приходят в переменной «p» в виде кортежа: (('User-Name', 'korolev'), ('User-Password', 'pass123'), ('NAS-IP-Address', '127.0.0.1'), ('NAS-Port', '0'), ('Message-Authenticator', '0x690954bf4f3e6a343368af3a92fdc767'), ('Event-Timestamp', 'Nov 5 2023 13:32:17 +04')). Тут содержится все необходимое для авторизации: И имя пользователя, и пароль, и IP адрес устройства, откуда пришел запрос и время запроса.
Теперь подключим к модулю pyhon3 дополнительные модули python для работы с базами данным.
# nano /etc/raddb/mods-config/python3/bombey.py
Дополняем скрипт подключаемыми модулями:
#!/usr/bin/python3
import radius
import mysql.connector
import psycopg2
def authorize(p):
print("*** authorize bombey ***")
print(p)
return radiusd.RLM_MODULE_OK
Перезапускаем сервис FreeRADIUS
# radiusd -X
И вновь пытаемся авторизоваться. Никаких ошибок при авторизации и в логах сервера быть не должно.
Отключаем элементы сервиса FreeRADIUS, которые использовать не будем.
Например, можно отключить экземпляр FreeRADIUS, определенный в файле inner-tunnel. Для этого необходимо удалить символьную ссылку:
# rm -f /etc/raddb/sites-enabled/inner-tunnel
Затем можно отключить проксирование. Это делается в глобальном файле конфигурации:
# nano /etc/raddb/radiusd.conf
Устанавливаем директиву proxy_requests в no И комментируем строку $INCLUDE proxy.conf
proxy_requests = no
#$INCLUDE proxy.conf
Добавляем сервис FreeRADIUS в автозагрузку и стартуем:
# systemctl enable radiusd
# systemctl start radiusd
Проверка работы сервиса:
# systemctl status radiusd
# netstat -ltupn | grep radiusd
Обратившись на сайт https://freeradius.org/releases/ определяем последнюю стабильную версию FreeRADIUS. На ноябрь 2023 имеем следующую картину:
Актуальная, стабильная версия – 3.0.x, а именно – 3.0.26.
Определяем, какая версия дистрибутива содержится в наших стандартных репозитариях Rocky Linux 9:
# yum list freeradius
Получаем ответ: 3.0.21-37.el9. Это соответствует стабильной версии 3.0.х, поэтому просто выполняем установку FreeRADIUS стандартными средствами:
# yum install freeradius freeradius-utils
После выполнения установки, основная директория пакета FreeRADIUS будет находиться тут: /etc/raddb.
Основной конфигурационный файл: /etc/raddb/radiusd.conf
Директория с логами: /var/log/radius/
Далее необходимо сгенерировать сертификаты сервера FreeRADIUS, которые будут использоваться в механизмах EAP-TLS, PEAP и EAP-TTLS для установления зашифрованного соединения между авторизуемым клиентом и сервером FreeRADIUS.
Сначала нужно сгенерировать тестовые сертификаты:
# cd /etc/raddb/certs/
# ./bootstrap
И затем попробовать запустить FreeRADIUS
# radiusd –X
Запуск сервера должен пройти без ошибок и закончиться выводом:
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 41210
Listening on proxy address :: port 49147
Ready to process requests
Выход из запущенного процесса - CTRL+C
Далее для работы в действующей сети необходимо сгенерировать индивидуальные сертификаты сервера FreeRADIUS.
Удаляем все ранее созданные сертификаты:
# cd /etc/raddb/certs/
# rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*
Редактируем начальные данные корневого сертификата:
# nano ca.cnf
Изменяем пароли по умолчанию в разделе [ req ] на какие-то свои:
input_password = whatever
output_password = whatever
например, на
input_password = mypass01
output_password = mypass01
В разделе [certificate_authority] изменяем название страны, организации и пр. Значения по умолчанию:
countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.org
commonName = "Example Certificate Authority"
например, на такие значения:
countryName = RU
stateOrProvinceName = Radius
localityName = BombeyRadius
organizationName = MyOrg
emailAddress = admin@example.ru
commonName = "CA Certificate Authority"
Затем запускаем генерацию корневого сертификата:
# make ca.pem
# make ca.der
Переходим к созданию сертификата сервера:
# nano server.cnf
Изменяем пароли по умолчанию в разделе [ req ] на какие-то свои:
input_password = whatever
output_password = whatever
например, на
input_password = mypass01
output_password = mypass01
В разделе [server] изменяем название страны, организации и пр. Значения по умолчанию:
countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.org
commonName = "Example Server Certificate"
изменяем на:
countryName = RU
stateOrProvinceName = Radius
localityName = BombeyRadius
organizationName = MyOrg
emailAddress = admin@example.ru
commonName = "Certificate Serv Radius Bombey"
Согласно инструкции от FreeRADIUS, поле commonName в сертификате сервера должно отличаться от поля commonName в корневом сертификате. После редактирования файла запускаем генерацию cертификата сервера:
# make server.pem
# make server.csr
Затем открываем файл настроек EAP FreeRADIUS и указываем пароль сертификата в подсекции tls секции eap:
# nano /etc/raddb/mods-enabled/eap
eap {
<..>
tls-config tls-common {
#private_key_password = whatever
private_key_password = mypass01
<..>
}
<..>
}
Вновь выполняем тестовый запуск FreeRADIUS
# radiusd -X
И вновь запуск команды должен пройти без ошибок.
Примечания:
>> Если не установить пароль сертификата в файле /etc/raddb/mods-enabled/eap, то возникнет ошибка:
tls: (TLS) Failed reading private key file "/etc/raddb/certs/server.pem"
tls: (TLS) error:1C800064:Provider routines::bad decrypt
tls: (TLS) error:11800074:PKCS12 routines::pkcs12 cipherfinal error
tls: (TLS) error:0A080009:SSL routines::PEM lib
rlm_eap_tls: Failed initializing SSL context
rlm_eap (EAP): Failed to initialise rlm_eap_tls
/etc/raddb/mods-enabled/eap[14]: Instantiation failed for module "eap"
>> Если не создать сертификатов сервера, получим следующую ошибку:
Unable to check file "/etc/raddb/certs/server.pem": No such file or directory
/etc/raddb/mods-enabled/eap[183]: Failed parsing configuration item "private_key_file"
rlm_eap_tls: Failed initializing SSL context
rlm_eap (EAP): Failed to initialise rlm_eap_tls
/etc/raddb/mods-enabled/eap[14]: Instantiation failed for module "eap"
Проведем тестовую авторизацию абонента. Для этого необходимо что бы клиент, откуда отправляется radius запрос, был добавлен в раздел клиентов сервера FreeRADIUS и пользователь, выполняющий авторизацию, был добавлен в раздел пользователей.
Клиенты сервера добавляются в файле: /etc/raddb/clients.conf
Тут уже должен быть создан клиент localhost. Ip адрес откуда ожидаются запросу - 127.0.0.1, секрет (пароль) для совершения запроса - testing123
# nano /etc/raddb/clients.conf
client localhost {
ipaddr = 127.0.0.1
secret = testing123
<…>
}
Тестового пользователя добавим в файл /etc/raddb/mods-config/files/authorize
# nano /etc/raddb/mods-config/files/authorize
В первой строке файла пишем данные пользователя:
korolev Cleartext-Password := "pass123"
Тут задается пользовать «korolev» с паролем «pass123».
Вновь запускаем FreeRADIUS в тестовом режиме:
# radius -X
В соседнем окне терминала выполняет тестовую команду авторизации пользователя:
# radtest korolev pass123 127.0.0.1 0 testing123
Sent Access-Request Id 103 from 0.0.0.0:43064 to 127.0.0.1:1812 length 77
User-Name = "korolev"
User-Password = "pass123"
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "pass123"
Received Access-Accept Id 103 from 127.0.0.1:1812 to 127.0.0.1:43064 length 20
Если мы получили в ответе «Access-Accept», значит авторизация пользователя прошла успешно. В случае неудачной авторизации ответ будет содержать «Access-Reject».
Переходим к установке python3 в FreeRADIUS.
Сначала устанавливаем сам python и дополнительные модули для работы с базами данных PostgeSQL и MySQL (MariaDB)
# yum install python3
# yum install pip
# pip install psycopg2-binary
# pip install mysql-connector
Проверяем, что python3 установлен и библиотеки могут быть использованы в коде:
# python3
Python 3.9.16 (main, Sep 12 2023, 00:00:00)
[GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> import mysql.connector
>>>
Если никаких ошибок не возникает, значит все установилось верно.
Не закрывая среду python, узнаем все системные пути, которые использует python в работе. Они понадобятся далее для интеграции python в FreeRADIUS:
>>> import sys
>>> sys.path
['', '/usr/lib64/python39.zip', '/usr/lib64/python3.9', '/usr/lib64/python3.9/lib-dynload', '/usr/local/lib64/python3.9/site-packages', '/usr/local/lib/python3.9/site-packages', '/usr/lib64/python3.9/site-packages', '/usr/lib/python3.9/site-packages']
>>>
Выход из среды python – CTRL+D.
Теперь устанавливаем модуль python3 для FreeRADIUS
# yum install python3-freeradius
Подключаем модуль Python в рабочую конфигурацию:
# ln -s /etc/raddb/mods-available/python3 /etc/raddb/mods-enabled/python3
Открываем модуль python3 и вносим изменения в конфигурацию:
# nano /etc/raddb/mods-enabled/python3
python3 {
python_path="${modconfdir}/${.:name}:/usr/lib64/python39.zip:/usr/lib64/python3.9:/usr/lib64/python3.9/lib-dynload:/usr/local/lib64/python3.9/site-packages:/usr/local/lib/python3.9/site-packages:/usr/lib64/python3.9/site-packages:/usr/lib/python3.9/site-packages"}
module = bombey
mod_authorize = ${.module}
func_authorize = authorize
<…>
В конфигурации модуля Python описывается, где будет лежать код модуля python3 и какие функции может обрабатывать этот модуль. В нашем случае модуль будет называться «bombey», функция, которая должна содержаться в модуле должна иметь имя «authorize», а сам файл модуля должен быть в директории ${modconfdir}/${.:name} (в «развернутом виде» – это /etc/raddb/mods-config/python3). В директиве python_path, кроме пути до модуля python3 нужно указать и все системные пути интерпретатора python. Мы получили эту информацию ранее, когда устанавливали python3. Теперь эти пути перечисляем здесь через двоеточие.
Создаем файл модуля bombey:
# nano /etc/raddb/mods-config/python3/bombey.py
И прописываем его содержимое:
#!/usr/bin/python3
import radiusd
def authorize(p):
print("*** authorize bombey ***")
print(p)
return radiusd.RLM_MODULE_OK
Сохраняем файл и делаем его исполняемым:
# chmod +x /etc/raddb/mods-config/python3/bombey.py
В файле определяется функция authorize, которой передается набор данных о авторизации в переменной «p». Данная переменная содержит кортеж данных авторизации: имя пользователя, пароль, IP адрес NAS устройства, формирующего авторизационной пакет, а так же временная метка. Функция authorize в данном случае делает всего несколько вещей – это вывод в консоль текста *** authorize bombey ***, вывод в консоль набора данных переменной «p» и завершение работы функции возвращением переменной RLM_MODULE_OK.
Переменные RLM_MODULE_* содержаться в модуле /etc/raddb/mods-config/python3/radiusd.py и соответствуют кодам завершения обработки модуля python3:
RLM_MODULE_REJECT = 0
RLM_MODULE_FAIL = 1
RLM_MODULE_OK = 2
RLM_MODULE_HANDLED = 3
RLM_MODULE_INVALID = 4
RLM_MODULE_USERLOCK = 5
RLM_MODULE_NOTFOUND = 6
RLM_MODULE_NOOP = 7
RLM_MODULE_UPDATED = 8
RLM_MODULE_NUMCODES = 9
Если функция будет возвращать RLM_MODULE_OK – это говорит о том, что в модуле python3, авторизация прошла удачно. А если возвращается RLM_MODULE_REJECT - авторизация была неуспешной. В файле /etc/raddb/mods-config/python3/example.py имеется ряд примеров разных функций используемых в FreeRADIUS и примеры использования разных конструкций для обработки данных и формирования ответа.
Добавляем модуль python в рабочий экземпляр сервиса FreeRADIUS
# nano /etc/raddb/sites-enabled/default
Нужно добавить в блок authorize использование модуля python между auth_log и chap:
authorize {
filter_username
preprocess
# auth_log
python3
chap
<....>
}
Вновь запускам FreeRADIUS в тесте:
# radius -X
И в соседней консоли пытаемся авторизоваться:
# radtest korolev pass123 127.0.0.1 0 testing123
Авторизация должна пройти как и раньше – успешно. Самое интересное в окне работы сервера.
Обратившись к логам в окне с запущенным сервером FreeRADIUS мы увидим, что модуль python3 работает. В лог выводятся строки:
*** authorize bombey ***
(('User-Name', 'korolev'), ('User-Password', 'pass123'), ('NAS-IP-Address', '127.0.0.1'), ('NAS-Port', '0'), ('Message-Authenticator', '0x690954bf4f3e6a343368af3a92fdc767'), ('Event-Timestamp', 'Nov 5 2023 13:32:17 +04'))
(1) [python3] = ok
В первой строке выводиться просто информация о начале обработки в модуле. Это строка print("*** authorize bombey ***") в файле модуля python – bombey.py.
Затем выводятся данные переданные в модуль. Данные приходят в переменной «p» в виде кортежа: (('User-Name', 'korolev'), ('User-Password', 'pass123'), ('NAS-IP-Address', '127.0.0.1'), ('NAS-Port', '0'), ('Message-Authenticator', '0x690954bf4f3e6a343368af3a92fdc767'), ('Event-Timestamp', 'Nov 5 2023 13:32:17 +04')). Тут содержится все необходимое для авторизации: И имя пользователя, и пароль, и IP адрес устройства, откуда пришел запрос и время запроса.
Теперь подключим к модулю pyhon3 дополнительные модули python для работы с базами данным.
# nano /etc/raddb/mods-config/python3/bombey.py
Дополняем скрипт подключаемыми модулями:
#!/usr/bin/python3
import radius
import mysql.connector
import psycopg2
def authorize(p):
print("*** authorize bombey ***")
print(p)
return radiusd.RLM_MODULE_OK
Перезапускаем сервис FreeRADIUS
# radiusd -X
И вновь пытаемся авторизоваться. Никаких ошибок при авторизации и в логах сервера быть не должно.
Примечание: На данном этапе может возникнуть следующая ошибка:
Python version: 3.9.16 (main, Sep 12 2023, 00:00:00) [GCC 11.3.1 20221121 (Red Hat 11.3.1-4)]
Failed loading libpython3.9m.so: libpython3.9m.so: cannot open shared object file: No such file or directory
Failed loading libpython symbols into global symbol table
python_function_load - Module 'bombey' not found
python_error_log:200, Exception type: <class 'ImportError'>, Exception value: /usr/lib64/python3.9/lib-dynload/_hashlib.cpython-39-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
python_error_log:220, full_backtrace: ['Traceback (most recent call last):\n', ' File "/etc/raddb/mods-config/python3/bombey.py", line 4, in <module>\n import mysql.connector\n', ' File "/usr/local/lib/python3.9/site-packages/mysql/connector/__init__.py", line 37, in <module>\n from .connection import MySQLConnection\n', ' File "/usr/local/lib/python3.9/site-packages/mysql/connector/connection.py", line 31, in <module>\n from .authentication import get_auth_plugin\n', ' File "/usr/local/lib/python3.9/site-packages/mysql/connector/authentication.py", line 26, in <module>\n from hashlib import sha1\n', ' File "/usr/lib64/python3.9/hashlib.py", line 77, in <module>\n import _hashlib\n', 'ImportError: /usr/lib64/python3.9/lib-dynload/_hashlib.cpython-39-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError\n']
python_function_load - Failed to import python function 'bombey.authorize'
python_error_log:192, Unknown error
/etc/raddb/mods-enabled/python3[9]: Instantiation failed for module "python3"
Это говорит о том, что Python3, запущенный из как модуль FreeRADIUS не видит библиотеку libpython3.9m.so.
Проверяем, какие есть аналоги в нашей системе:
# ls -l /usr/lib64/libpython*
-rwxr-xr-x. 1 root root 3486512 Oct 5 21:10 /usr/lib64/libpython3.9.so.1.0
-rwxr-xr-x. 1 root root 14944 Oct 5 21:10 /usr/lib64/libpython3.so
И делаем символьную ссылку на наиболее подходящую:
# ln -s /usr/lib64/libpython3.9.so.1.0 /usr/lib64/libpython3.9m.so
Теперь сервер запуститься удачно.
Отключаем элементы сервиса FreeRADIUS, которые использовать не будем.
Например, можно отключить экземпляр FreeRADIUS, определенный в файле inner-tunnel. Для этого необходимо удалить символьную ссылку:
# rm -f /etc/raddb/sites-enabled/inner-tunnel
Затем можно отключить проксирование. Это делается в глобальном файле конфигурации:
# nano /etc/raddb/radiusd.conf
Устанавливаем директиву proxy_requests в no И комментируем строку $INCLUDE proxy.conf
proxy_requests = no
#$INCLUDE proxy.conf
Добавляем сервис FreeRADIUS в автозагрузку и стартуем:
# systemctl enable radiusd
# systemctl start radiusd
Проверка работы сервиса:
# systemctl status radiusd
# netstat -ltupn | grep radiusd
Для того что бы отключить использование IPv6, необходимо в настройках экземпляра сервиса FreeRADIUS default, закомментировать строки, касающиеся прослушивания портов ipv6:
##listen {
## type = auth
## ipv6addr = :: # any. ::1 == localhost
## port = 0
# interface = eth0
# clients = per_socket_clients
## limit {
## max_connections = 16
## lifetime = 0
## idle_timeout = 30
## }
##}
##listen {
## ipv6addr = ::
## port = 0
## type = acct
# interface = eth0
# clients = per_socket_clients
## limit {
# max_pps = 0
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
## }
##}
И затем рестартовать сервис:
# systemctl start radiusd
# netstat -ltupn | grep radiusd
На этом базовая настройка FreeRADIUS с модулем python3 завершена.
##listen {
## type = auth
## ipv6addr = :: # any. ::1 == localhost
## port = 0
# interface = eth0
# clients = per_socket_clients
## limit {
## max_connections = 16
## lifetime = 0
## idle_timeout = 30
## }
##}
##listen {
## ipv6addr = ::
## port = 0
## type = acct
# interface = eth0
# clients = per_socket_clients
## limit {
# max_pps = 0
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
## }
##}
И затем рестартовать сервис:
# systemctl start radiusd
# netstat -ltupn | grep radiusd
На этом базовая настройка FreeRADIUS с модулем python3 завершена.
суббота, 4 ноября 2023 г.
Windows XP. Обновление сертификатов для браузера. Решение проблемы открытия страниц в браузерах.
На старых версиях ОС, например, на легендарной ОС Windows XP в текущем 2023 году есть проблема открытия современных web-ресурсов по протоколу HTTPS. Проблема заключается в использовании на Windows XP старых сертификатов. Как правило, это сертификат под названием «IdenTrust DST Root CA X3». С 1 октября 2021 года срок действия этого сертификата закончился. Из-за этого пользователи ПК / ноутбуков на Windows XP могут столкнуться с проблемой появления ошибки: «ERR_CERT_DATE_INVALID» и «ERR_DATE_INVALID» в браузерах при входе на многие сайты. Пример:
На данном этапе нажимаем «Да» и затем работа мастера завершиться информационным окном, где нужно нажать «Ок»
После этого проблем с открытием страниц web-ресурсов в Windows XP быть не должно.
Для решения этой проблемы нужно скачать сертификат isrgrootx1.der и установить его.
Скачать сертификат можно с ресурсов:
https://letsencrypt.org/certs/isrgrootx1.der
https://wifi.nstu.ru/cert/isrgrootx1.der
https://profit-zip.ru/upload/eniweb/isrgrootx1.der
https://www.upload.ee/files/13525456/isrgrootx1.der.html
Установить сертификат нужно вызвав диалоговое окно установки сертификата. Для этого нужно два раза кликнуть по скаченному файлу.
Затем нажать «Установить сертификат» и пройти, нажимая «Далее» шаги мастера установки сертификатов:
Скачать сертификат можно с ресурсов:
https://letsencrypt.org/certs/isrgrootx1.der
https://wifi.nstu.ru/cert/isrgrootx1.der
https://profit-zip.ru/upload/eniweb/isrgrootx1.der
https://www.upload.ee/files/13525456/isrgrootx1.der.html
Установить сертификат нужно вызвав диалоговое окно установки сертификата. Для этого нужно два раза кликнуть по скаченному файлу.
Затем нажать «Установить сертификат» и пройти, нажимая «Далее» шаги мастера установки сертификатов:
На данном этапе нажимаем «Да» и затем работа мастера завершиться информационным окном, где нужно нажать «Ок»
После этого проблем с открытием страниц web-ресурсов в Windows XP быть не должно.
Rocky Linux 9. Подключение к системе по SSH по сети под пользователем root.
По умолчанию в новых версиях ОС подключение по SSH через сеть под учеткой root заблокировано.
Это сделано для обеспечения большей безопасности.
Пользователю предлагается подключаться по SSH с использованием сертификата.
Для этого следует на своей машине сгенерить приватный и публичный ключ EdDSA.
Затем публичный ключ помещается (добавляется, если файл уже есть) в файл /root/.ssh/authorized_keys
Можно так же сконфигурировать сервер sshd на сервере Rocky Linux 9 таким образом, что бы подключение под учеткой root по сети по SSH было возможным.
Для этого подключаемся к машине другим способом, переходим в root и открываем файл конфигурации сервера ssh для редактирования
# nano /etc/ssh/sshd_config
Тут ищем директиву PermitRootLogin
и заменяем
PermitRootLogin prohibit-password (по умолчанию)
на
PermitRootLogin yes
Затем производим рестарт сервиса ssh:
# systemctl restart sshd
Это сделано для обеспечения большей безопасности.
Пользователю предлагается подключаться по SSH с использованием сертификата.
Для этого следует на своей машине сгенерить приватный и публичный ключ EdDSA.
Затем публичный ключ помещается (добавляется, если файл уже есть) в файл /root/.ssh/authorized_keys
Можно так же сконфигурировать сервер sshd на сервере Rocky Linux 9 таким образом, что бы подключение под учеткой root по сети по SSH было возможным.
Для этого подключаемся к машине другим способом, переходим в root и открываем файл конфигурации сервера ssh для редактирования
# nano /etc/ssh/sshd_config
Тут ищем директиву PermitRootLogin
и заменяем
PermitRootLogin prohibit-password (по умолчанию)
на
PermitRootLogin yes
Затем производим рестарт сервиса ssh:
# systemctl restart sshd
четверг, 2 ноября 2023 г.
Форматирование флешки в Linux
Действие выполняется в следующей последовательности:
1. Подключаем флешку к ПК с Linux
2. Определяем идентификатор флешки
3. Отмонтируем флешку, если она примонтировалась автоматически
(примечание: При подключении флешки в Astra Linux релиз "Орел" флешка автоматически не примонтируется)
4. Форматируем флешку
Итак.
Подключаем флешку.
Смотрим, как она определилась. Для этого используем команды:
# fdisk -l
# lsblk
# df -h
# mount
По размеру накопителя нам нужно определить идентификатор этой флешки, например /dev/sdb1
И нужно понять примонтирована ли флешка куда-то.
Далее нужно отмонтировать флешку, если она примонтирована. Например так:
# umount /dev/sdb1
И теперь нужно запустить команду форматирования:
# mkfs -t ntfs -L FLASH16 /dev/sdb1
Тут
ntfs - тип файловой системы,
FLASH16 - метка флешки
1. Подключаем флешку к ПК с Linux
2. Определяем идентификатор флешки
3. Отмонтируем флешку, если она примонтировалась автоматически
(примечание: При подключении флешки в Astra Linux релиз "Орел" флешка автоматически не примонтируется)
4. Форматируем флешку
Итак.
Подключаем флешку.
Смотрим, как она определилась. Для этого используем команды:
# fdisk -l
# lsblk
# df -h
# mount
По размеру накопителя нам нужно определить идентификатор этой флешки, например /dev/sdb1
И нужно понять примонтирована ли флешка куда-то.
Далее нужно отмонтировать флешку, если она примонтирована. Например так:
# umount /dev/sdb1
И теперь нужно запустить команду форматирования:
# mkfs -t ntfs -L FLASH16 /dev/sdb1
Тут
ntfs - тип файловой системы,
FLASH16 - метка флешки
Подписаться на:
Сообщения (Atom)