Введение
Существует проверенная временем связка для прокси сервера — squid + sams. Я настраивал ее еще лет 8 назад на Freebsd. Недавно у меня появилась необходимость настроить что-то подобное на CentOS 7, и я с удивлением обнаружил, что ничего принципиально нового с тех пор не появилось. Никакой более удобной и информативной web панели к squid не придумали.
Так что будем настраивать проверенный временем набор программ. Ко всему прочему, удобнее его сразу интегрировать с виндовым доменом, для простой авторизации на прокси с помощью учетных записей домена. Так проще будет смотреть статистику и давать доступ. Особенно это актуально, если у вас есть терминальные пользователи, работающие с одного ip. Здесь у вас вообще нет других вариантов, если вам нужна статистика и ограничение доступа по пользователям.
Приступим к настройке. В своей работе я буду подразумевать, что вы установили и настроили centos по моим рекомендациям. Советую ознакомиться с материалом. Это позволит здесь не тратить время на второстепенные настройки, которые не имеют прямого отношения к теме статьи.
Установка FreePBX
- в /etc/hosts добавить:
pbx.example.com
- в конфиг /etc/httpd/conf.d/ssl.conf добавить в секцию <VirtualHost _default_:443>:
DocumentRoot "/var/www/html" ServerName pbx.example.com:443 <Directory "/var/www/html"> Order allow,deny Allow from </Directory>
-
# systemctl enable httpd # systemctl start httpd
- В /etc/firewalld/zones/public.xml добавить:
<service name="https"/>
в секцию так же как и ssh
# systemctl restart firewalld
-
# systemctl enable mariadb # systemctl start mariadb # /usr/bin/mysql_secure_installation
Установить пароль root для MySQL
-
# cd /root # wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz # tar -zxf freepbx-13.0-latest.tgz -C /usr/src # cd /usr/src/freepbx
- Отредактировать /etc/php.ini:
# vi /etc/php.ini (или /etc/php4/apache2/php.ini) upload_max_filesize=20M
-
# mysqladmin create asteriskcdrdb -p # mysql -p asteriskcdrdb < installlib/SQL/cdr.sql # mysqladmin create asterisk -p # mysql -p asterisk < installlib/SQL/asterisk.sql # mysql -p mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY ''; mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY ''; mysql> flush privileges;
- Отредактировать:
# vi /etc/httpd/conf/httpd.conf (или /etc/apache2/apache2.conf): User asterisk Group asterisk
-
# chown asterisk /var/lib/php/session
- # rm -rf /var/www/html
-
# ./install
- Заменить в базе asterisk в таблице freepbx_settings пароль для астериск манагера:
# mysql -p mysql> UPDATE `asterisk`.`freepbx_settings` SET `value` = '' WHERE `freepbx_settings`.`keyword` = 'AMPMGRPASS';
-
# systemctl restart httpd
- Войти в freepbx и завершить установку
- В /etc/firewalld положить файл direct.xml :
<?xml version="1.0" encoding="utf-8"?> <direct> <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m udp -p udp -d /32 --dport 5060 -m hashlimit --hashlimit 10/m --hashlimit-burst 10 --hashlimit-mode srcip,dstip,dstport --hashlimit-htable-expire 180 --hashlimit-name SIP -j ACCEPT</rule> <rule ipv="ipv4" table="filter" chain="INPUT" priority="1">-m multiport -m udp -p udp -d /32 --dports 10000:20000 -j ACCEPT</rule> </direct>
# systemctl restart firewalld
- cat /etc/odbc.ini:
Description=MySQL connection to 'asteriskcdrdb' database driver=MySQL server=localhost database=asteriskcdrdb UserName=asteriskuser Password= Port=3306 Socket=/var/lib/mysql/mysql.sock option=3 Charset=utf-8
- Включаем fail2ban:
# vi /etc/fail2ban/jail.local # cat /etc/fail2ban/jail.local enabled = true enabled = true filter = asterisk logpath = /var/log/asterisk/messages tail bantime = 86400 # cd /etc/fail2ban/filter.d/ # mv asterisk.conf asterisk.conf.orig # wget http://www.adminhelp.pro/wp-content/uploads/fail2ban/asterisk.conf # systemctl enable fail2ban.service # systemctl restart fail2ban.service
Учебник — Установка Asterisk на Ubuntu Linux
На консоли Linux используйте следующие команды для установки необходимых пакетов.
Copy to Clipboard
apt-get update
apt-get install linux-headers-`uname -r`
apt-get install build-essential libtonezone-dev autoconf pkg-config libtool
Используйте следующие команды для загрузки пакета Asterisk.
Copy to Clipboard
mkdir /downloads/asterisk -p
cd /downloads/asterisk
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar -zxvf asterisk-16-current.tar.gz
Перед компиляцией звездочки необходимо выполнить загрузку необходимых пакетов.
Copy to Clipboard
cd /usr/src
git clone git://git.asterisk.org/dahdi/linux dahdi-linux
git clone git://git.asterisk.org/dahdi/tools dahdi-tools
git clone http://gerrit.asterisk.org/libpri libpri
Скомпилируйте и установите пакет dahdi-linux.
Copy to Clipboard
cd /usr/src/dahdi-linux/
make
make install
Скомпилируйте и установите пакет dahdi-tools.
Copy to Clipboard
cd /usr/src/dahdi-tools
autoreconf -i
./configure
make install
make install-config
Скомпилируйте и установите пакет libpri.
Copy to Clipboard
cd /usr/src/libpri
make
make install
Используйте следующие команды для выполнения требований библиотеки Asterisk.
Имейте в виду, что ваша версия ASTERISK и расположение файла могут отличаться от моей.
Copy to Clipboard
cd /downloads/asterisk/asterisk-16.6.0/contrib/scripts/
./install_prereq install
Если потребуется, введите международный код вашей страны.
В нашем примере мы установили код 55 для Бразилии.
Чтобы позвонить в Бразилию, сначала наберите 55.
Теперь вы можете скомпилировать и установить пакет Asterisk.
Имейте в виду, что вы версия ASTERISK, и расположение файла может отличаться от моего.
Copy to Clipboard
cd /downloads/asterisk/asterisk-16.6.0
./configure —with-pjproject-bundled
make menuselect
make
make install
make samples
make config
make install-logrotate
Команда make menuselect откроет меню, в котором вы можете выбрать модули для установки.
Если вы не знаете, что делать, оставьте модули по умолчанию и нажмите кнопку «Сохранить и выйти».
Команды make samples и make config установят образцы файлов конфигурации.
Вы закончили установку Asterisk.
Запустите службу Asterisk с помощью следующей команды:
Copy to Clipboard
service asterisk start
Используйте следующие команды для проверки статуса службы Asterisk.
Copy to Clipboard
service asterisk status
Используйте следующие команды для проверки портов связи, используемых Asterisk.
Copy to Clipboard
netstat -tulpn | grep asterisk
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 15800/asterisk
udp 0 0 0.0.0.0:55037 0.0.0.0:* 15800/asterisk
udp 0 0 0.0.0.0:5000 0.0.0.0:* 15800/asterisk
udp 0 0 0.0.0.0:4520 0.0.0.0:* 15800/asterisk
udp 0 0 0.0.0.0:5060 0.0.0.0:* 15800/asterisk
udp 0 0 0.0.0.0:4569 0.0.0.0:* 15800/asterisk
udp 0 0 0.0.0.0:2727 0.0.0.0:* 15800/asterisk
udp6 0 0 :::60105 :::* 15800/asterisk
Поздравляем! Вы завершили установку Asterisk в Ubuntu LInux.
2019-10-30T14:13:28-03:00
# Как настроить статический IP-адрес в CentOS 7
minimalifconfig
-bash: ifconfig: command not found
net-tools
# yum -y install net-tools.x86_64
ifconfig
# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.0.160 netmask 255.255.255.0 broadcast 192.168.146.255 inet6 fe80::250:56ff:fe24:ccd6 prefixlen 64 scopeid 0x20<link> ether 00:50:56:24:cc:d6 txqueuelen 1000 (Ethernet) RX packets 210 bytes 19072 (18.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 71 bytes 11531 (11.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 4 bytes 340 (340.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 340 (340.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ip addr:
# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:24:cc:d6 brd ff:ff:ff:ff:ff:ff inet 172.16.0.160/24 brd 192.168.146.255 scope global dynamic eno16777736 valid_lft 1672sec preferred_lft 1672sec inet6 fe80::250:56ff:fe24:ccd6/64 scope link valid_lft forever preferred_lft forever
# cat ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=dc1636be-5281-4a07-8681-fcdc8b161c8c DEVICE=eno16777736 ONBOOT=no PEERDNS=yes PEERROUTES=yes
BOOTPROTOBOOTPROTO=none
и дописать:
Указать ДНС:
DNS1=8.8.8.8
Прописываем IP:
IPADDR0=172.16.0.30
Указываем нужную маску:
PREFIX0=24
Прописываем шлюз по умолчанию:
GATEWAY0=172.16.0.1
И чтобы у нас сетевая карта «поднималась» при запуске ОС, необходимо в этом файле найти параметр ONBOOT и прописать ему yes.
В итоге у нас должно получится что то типа этого:
Для немедленного применения изменений перезапустим сеть:
# /etc/init.d/network restart
# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.0.30 netmask 255.255.255.0 broadcast 172.16.0.255 ether 00:50:56:24:cc:d6 txqueuelen 1000 (Ethernet) RX packets 5039 bytes 360189 (351.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1015 bytes 181656 (177.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Дополнительные материалы по Debian
Рекомендую полезные материалы по Debian: |
Настройки системы |
---|
Подробная установка Debian 9 Stratch с помощью графического инсталлятора со скриншотами и пояснениями к каждому пункту установщика. Базовая настройка сервера Debian. Приведены практические советы по улучшению безопасности и удобства администрирования. Подробное описание настройки сети в Debian — задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др. Обновление предыдущей версии Debian 8 Jessie до последней Debian 9 Stratch. Подробная инструкция с описанием по каждому этапу обновления. Обновление версии Debian 7 wheezy до Debian 8 Jessie. Подробная инструкция с описанием по каждому этапу обновления. Включение записи логов cron в Debian в отдельный файл и настройка ротации этого файла. Отключение логов в syslog. |
Настройка программных комплексов |
Подробное описание установки гипервизора proxmox на raid1 mdadm на базе операционной системы Debian 8. Приведены практические советы по настройке. Настройка интернет шлюза на Debian. Включает в себя настройку iptables, nat, dhcp, dns, iftop. Чистая установка Asterisk 13 на сервер под управлением Debian 8. Никаких дополнений и GUI, только vanilla asterisk. Установка Freepbx 12 и Asterisk 13 на сервер под управлением Debian/Ubuntu. Подробное описание и разбор ошибок установки. Рассказ об установке и небольшой настройке сервера бд postgresql для работы с базами 1С. Задача не сложная, но есть небольшие нюансы как по настройке, так и по выбору дистрибутива. Описание установки и настройки pptp сервера в Debian с передачей статических маршрутов клиенту для организации доступа к ресурсам сети. |
Разное |
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows. Ускорение работы 1С с postgresql и диагностика проблем производительности |
Добавляем сервер к домену через realm
Я не буду придумывать ничего нового, а полностью воспользуюсь инструкцией из приведенной выше статьи по настройке авторизации доменных учеток на сервере, но при этом не буду настраивать саму авторизацию. В данном случае мне это не нужно.
Итак, отключаем firewall и SELinux, если не сделали это раньше. Если не хотите отключать, то настройте сами. Данная настройка выходит за рамки статьи.
# mcedit /etc/sysconfig/selinux
меняем значение
SELINUX=disabled
Выполняем команду, чтобы не ждать перезагрузки для применения изменений.
setenforce 0
Выключаем firewalld.
# systemctl stop firewalld # systemctl disable firewalld
xs.local | название домена |
10.1.3.4 | ip адрес контроллера домена |
xs-winsrv.xs.local | полное имя контроллера домена |
xs-design | имя сервера centos, который вводим в домен |
admin51 | учетная запись администратора домена |
Перед дальнейшей настройкой, убедитесь, что с вашего сервера centos вы без проблем пингуете и резолвите контроллер домена по полному имени. Если есть какие-то проблемы, исправьте это либо указанием нужного dns сервера, либо правкой файла hosts.
Настроим синхронизацию времени с контроллером домена
Это важно, у вас должно быть одинаковое время с контроллером домена. Проверьте его и убедитесь, что стоят одинаковые часовые пояса
Устанавливаем утилиту для синхронизации времени chrony:
# yum install chrony
Добавляем в конфиг /etc/chrony.conf адрес контроллера домена. И делаем его единственным сервером для синхронизации, остальные удаляем.
server xs-winsrv.xs.local iburst
Сохраняем конфиг, запускаем chrony и добавляем в автозагрузку.
# systemctl start chronyd && systemctl enable chronyd
Проверим, что с синхронизацией.
Устанавливаем софт, который понадобится для дальнейшей работы.
# yum install realmd sssd sssd-libwbclient oddjob oddjob-mkhomedir adcli samba-common samba-common-tools
Делаем проверку перед вводом в домен.
# realm discover XS.LOCAL xs.local type: kerberos realm-name: XS.LOCAL domain-name: xs.local configured: no server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools
Заводим в домен.
# realm join -U admin51 XS.LOCAL Password for admin51:
Если не получили никакой ошибки, значит все прошло нормально. Можно зайти на контроллер домена и проверить, появился ли наш linux сервер в домене.
Проверьте на самом сервере, что он нормально обращается к домену и получает информацию об учетных записях. Показываю на примере доменной учетной записи control.
# id control@xs.local uid=185001305(control@xs.local) gid=185000513(пользователи домена@xs.local) groups=185000513(пользователи домена@xs.local),185001329(gr_y@xs.local),185001651(gr_sams2@xs.local),185001327(gr_z@xs.local)
Еще несколько проверок.
# realm list
# adcli info xs.local
Сервер завели в домен. Приступаем к основному — настройке samba с интеграцией в AD.
Подготовка сервера
Если у вас еще нет готового сервера, то можете воспользоваться моими материалами на эту тему — установка и настройка centos 7. Так же рекомендую настроить iptables для корректной работы сервера с доменом windows. Далее я не буду каcаться этого вопроса, мы просто отключим фаерволл, потому что его настройка не тема этой статьи.
xs.local | название домена |
10.1.3.4 | ip адрес контроллера домена |
xs-winsrv.xs.local | полное имя контроллера домена |
xs-centos7-test | имя сервера centos, который вводим в домен |
administrator | учетная запись администратора домена |
gr_linux_adm | группа в AD, для которой разрешено подключение к серверам по ssh |
lin-user | учетная запись в AD для проверки подключений по ssh |
Выключаем firewalld:
# systemctl stop firewalld && systemctl disable firewalld
Перед дальнейшей настройкой, убедитесь, что с вашего сервера centos вы без проблем пингуете и резолвите контроллер домена по полному имени. Если есть какие-то проблемы, исправьте это либо указанием нужного dns сервера, либо правкой файла hosts.
Настроим синхронизацию времени с контроллером домена
Это важно, у вас должно быть одинаковое время с контроллером домена. Проверьте его и убедитесь, что стоят одинаковые часовые пояса
Устанавливаем утилиту для синхронизации времени chrony:
# yum install chrony
Добавляем в конфиг /etc/chrony.conf адрес контроллера домена. И делаем его единственным сервером для синхронизации, остальные удаляем.
server xs-winsrv.xs.local iburst
Сохраняем конфиг, запускаем chrony и добавляем в автозагрузку.
# systemctl start chronyd && systemctl enable chronyd
Проверим, что с синхронизацией.
# cat /var/log/messages | grep chronyd Jul 12 17:58:38 xs-centos7-test chronyd: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH) Jul 12 17:58:38 xs-centos7-test chronyd: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift Jul 12 17:02:54 xs-centos7-test chronyd: Selected source 10.1.3.4 Jul 12 17:02:54 xs-centos7-test chronyd: System clock wrong by -3348.457170 seconds, adjustment started Jul 12 17:02:54 xs-centos7-test chronyd: System clock was stepped by -3348.457170 seconds
Все в порядке. Синхронизировали время с контроллером домена. По логу видно, что время на сервере убежало вперед на 56 минут, но мы это исправили.
Пример настройки iptables
Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.
Шаг 1 – Установка брандмауэра Iptables в Linux
1. Установка Iptables
Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:
или в Centos/RedHat
2. Проверка текущего состояния Iptables
Эта команда позволит вам проверить состояние текущей конфигурации Iptables. Опция -L используется для выведения всех правил, а опция -v — для более подробной информации:
В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.
Шаг 2 – Определение правил
Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.
Опция -A означает “append”, добавление правила в конец цепочки. Очень важным моментом является то, что правила в цепочке применяются последовательно, и если пакет удовлетворяет условиям одного из них, последующие применяться не будут. Это всегда нужно помнить при создании наборов правил. Таблица означает таблицу, в которой редактируются цепочки. По умолчанию это filter. Цепочка — имя цепочки, к которой мы добавляем правило. Интерфейс — сетевой интерфейс, для которого выполняется фильтрация трафика. Протокол указывает сетевой протокол, пакеты которого вы хотите фильтровать, источник — IP-адрес отправителя пакета, номер порта — порт на вашем сервере, для которого применяется правило. Эти и некоторые другие опции будут рассмотрены ниже при демонстрации соответствующих действий. Для более подробной информации о команде Iptables и ее опциях обратитесь к соответствующей man-странице.
1. Разрешение трафика на локальном узле
Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.
Опция -A используется для добавления в цепочку INPUT правила, разрешающего все соединения для интерфейса lo. Это обозначение для интерфейса loopback, он используется для всей связи на локальном узле, например, связи между базой данных и веб-приложением на одной машине.
2. Разрешение подключений к портам HTTP, SSH и SSL
Нам требуется, чтобы в обычном режиме работали порты HTTP (порт 80), https (порт 443), ssh (порт 22). Для этого нужно выполнить следующие команды. В них мы при помощи опции -p указали протокол, а при помощи опции —dport (destination port, порт на принимающей стороне, в данном случае это ваш сервер) соответствующий каждому протоколу порт:
Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже
3. Фильтрация пакетов по источнику
Если вам нужно принимать или отклонять пакеты по IP-адресу или диапазону IP-адресов источника, можно указать их при помощи опции -s. Например, чтобы принимать пакеты с адреса 192.168.1.3:
вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило
Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:
Если нужно отклонять или принимать пакеты с диапазона IP-адресов, вам потребуется воспользоваться модулем Iprange с опцией -m и при помощи параметра —src указать диапазон:
4. Запрет всего остального трафика
Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:
Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.
Установка модулей
Чистый Asterisk конечно работоспособен, но не зря он расширяется плагинами и модулями. Добавим пару полезных функций.
1. Главное меню настройки
Чтобы попасть в меню настройки и выбора модулей, выполните следующую команду и выберите нужные параметры.
root@centos-7 asterisk-13.5.0# make menuselect |
Как мы видим, большинство нужных модулей включено по умолчанию. Можно отключить ненужные модули или добавить что-то на свой вкус. У каждого пункта краткое описание его задачи.
Полезно будет включить, например, модуль поддержки mp3. Для этого выберите «format_mp3», как показано ниже.
Затем перейдите в секцию Core Sound Packages и отметьте аудио-пакеты как показано на скриншоте:
Затем выберите все пакеты из «Music On Hold Packages», и из «Extra Sound Packages» выберите те, которые содержат в названии EN. Нажмите «Save & Exit», чтобы перейти к следующему шагу.
2. Загрузка mp3 библиотек
Теперь запустите следующую команду для загрузки библиотеки mp3-декодера.
root@centos-7 asterisk-13.5.0# contrib/scripts/get_mp3_source.sh |
3. Установка модулей
Когда все нужное включено, а ненужное выключено, выполним сборку и установку. Сначала make, после успешного результата — make install.
root@centos-7 asterisk-13.5.0# make root@centos-7 asterisk-13.5.0# make install |
Если все успешно установилось, Asterisk предложит вам установить демонстранционные конфиги:
root@centos-7 asterisk-13.5.0# make samples root@centos-7 asterisk-13.5.0# make config |