воскресенье, 17 апреля 2016 г.

Sublime Text 3. Настройка яркой подсветки скобок и установка модного стиля  soda theme.

1. Устанавливаем Package Control.
Открываем консоль программы Sublime Text 3 пройдя по меню View Show Console
Внизу откроется консоль:
 
Ввести сюда код для установки менеджера пакетов:
import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
Этот код написан на сайте проекта:
https://packagecontrol.io/installation#st3
Дождаться установки пакетного менеджера. Ход установки отображается слева внизу.
2. Установка модной темы Soda Theme ( http://buymeasoda.github.io/soda-theme/ )
Открываем меню Tools  Command Palette.
В открывшемся окне набираем ins и выбираем «Install Package»
 
Через пару секунд откроется окно пакетного менеджера. В строке поиска набираем Soda и кликаем по разделу Theme – Soda. Произойдет установка темы.
 
Далее идем в меню: Preferences  Setting-User.
В открывшемся файле добавляем запятую и строки определяющую тему Soda:
{
"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
"font_size": 12,
"ignored_packages":
[
"Vintage"
],
"soda_classic_tabs": true,
"theme": "Soda Dark 3.sublime-theme"
}
Добавляемые строки и запятая выделены красным.
Сохраняем файл. Закрываем программу и открываем ее заново. Интерфейс программы немного изменился. Заметно на верхнем меню:
 
3. Установка BracketHighlighter. http://facelessuser.github.io/BracketHighlighter/ .  Этот плагин делает добее читаемым подсвечивание скобок и тегов. По умолчанию подсвечивание скобок – тусклая пунктирная линия подчеркивания. После использования этого плагина линия подчеркивания станет яркой и сплошной.
Открываем пакетный менеджер (CTRL + ALT + P) или через меню Preference  Package Control. Выбираем пункт «Install Package». Вводим BracketHighlighter и устанавливаем пакет.
 
Для настройки пакета переходим в Preferences  Package Settings  Bracket Highlighter  Bracket Settings-Default. Копируем все содержимое в буфер обмена. 
Открываем Preferences  Package Settings  Bracket Highlighter  Bracket Settings-User. Вставляем туда содержимое буфера обмена.
Исправляем директивы:
"content_highlight_bar": true,    
"align_content_highlight_bar": true,
Можно попробовать так же установить вот эту директиву
"high_visibility_enabled_by_default": true,
После сохранения и перезапуска программы получим более внятную подсветку скобок и тегов:
Пример с вертикальной чертой:
 
Пример с подчеркиванием тегов:
 
Пример с директивой high_visibility_enabled_by_default.



воскресенье, 10 апреля 2016 г.

Установка и настройка cервера PROFTPD в CentOS 7

1) Устанавливаем FTP сервер
# yum install proftpd
# yum install proftpd-utils

2) Конфигурационный файл сервера - /etc/proftpd.conf
Делаем его резервную копию:
# cp /etc/proftpd.conf /etc/proftpd.conf.sample
По умолчанию все настроено так, что бы пользователи под своими учетками имели возможность соединяться по FTP со своим каталогом под своим логином и паролем.

3) Стартуем:
# systemctl start proftpd
# systemctl enable proftpd

4) Разрешаем коннектиться к серверу по FTP в Iptables
# nano /etc/sysconfig/iptables
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
# systemctl restart iptables.service

5) Создаем пользователей
# useradd -d /db/cdr_eltex_penza pnzeltex
В этой команде 
pnzeltex – имя пользователя, 
/db/cdr_eltex_penza – домашняя папка пользователя, которая создаться автоматически.
# passwd pnzeltex
Вводим пароль, например 12345qw
Затем повторяем ввод пароля

Все, теперь пользователь pnzeltex может спокойно работать по FTP с нашим сервером.

понедельник, 4 апреля 2016 г.

Использование FreeRadius для сбора аккаутинга с двух устройств с применением различных политик обработки пакетов.

Предполагаем, что имеется FREERADIUS сервер на Linux CentOS 7, уже настроенный для приема аккаутинговой информации от какого-то устройства. Аккаутинг пишется в таблицу radact БД radius сервера MySQL.Рассмотрим случая подключения нового устройства ELTEX SMG-1016M.

1. Создаем вторую таблицу аккаутинга в БД radius
CREATE TABLE IF NOT EXISTS `sms1016pnzradacct` (
  `radacctid` bigint(21) NOT NULL AUTO_INCREMENT,
  `acctsessionid` varchar(64) NOT NULL DEFAULT '',
  `username` varchar(50) NOT NULL,
  `h323callorigin` varchar(50) NOT NULL,
  `nasipaddress` varchar(15) NOT NULL DEFAULT '',
  `acctstarttime` datetime DEFAULT NULL,
  `acctstoptime` datetime DEFAULT NULL,
  `acctsessiontime` int(12) DEFAULT NULL,
  `calledstationid` varchar(50) NOT NULL DEFAULT '',
  `callingstationid` varchar(50) NOT NULL,
  `nasportid` varchar(25) NOT NULL,
  `nasporttype` varchar(25) NOT NULL,
  `CiscoNASPort` varchar(30) NOT NULL,
  `h323calltype` varchar(30) NOT NULL,
  `EventTimestamp` varchar(30) NOT NULL,
  `AcctStatusType` varchar(10) NOT NULL,
  `currentimeserver` datetime NOT NULL,
  `h323disconnectcause` varchar(3) NOT NULL,
  `AcctDelayTime` int(5) NOT NULL,
  `h323gwid` varchar(20) NOT NULL,
  `xpgkrouteretries` varchar(5) NOT NULL,
  `h323remoteid` varchar(50) NOT NULL,
  `xpgklocaldisconnectcause` int(3) NOT NULL,
  `xpgksrcnumberin` varchar(50) NOT NULL,
  `xpgksrcnumberout` varchar(50) NOT NULL,
  `xpgkdstnumberin` varchar(50) NOT NULL,
  `xpgkdstnumberout` varchar(50) NOT NULL,
  `node` varchar(16) NOT NULL,
  `OutgoingRTPlocaladdress` varchar(15) NOT NULL,
  `OutgoingRTPremoteaddress` varchar(15) NOT NULL,
  PRIMARY KEY (`radacctid`),
  KEY `username` (`username`),
  KEY `acctstarttime` (`acctstarttime`),
  KEY `acctstoptime` (`acctstoptime`),
  KEY `calledstationid` (`calledstationid`),
  KEY `callingstationid` (`callingstationid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

2. Проверяем, что у существующего пользователя radius достаточно прав для записи в новую таблицу. У меня пользователь radius наделен всеми правами на базу radius, в том числе на новую таблицу sms1016pnzradacct:
radius ALL PRIVILEGES
3. Разрешаем серверу FreeRadius работать с новым устройством:
# nano /etc/raddb/clients.conf
Добавляем в конец файла:
Client PNZ-Uht4a-SMG {
      ipaddr = 10.201.101.12
      secret = 12345
      shortname = pnzeltex
}

4. Учим FREERADIUS работать с атрибутами Cisco AV-Pair, передаваемые от станции ELTEX SMG-2016
В файл словаря /usr/share/freeradius/dictionary.cisco
добавил в конец раздела # SIP Attributes (после 150-ого атрибута)
ATTRIBUTE       xpgk-route-retries            171     string
ATTRIBUTE       h323-remote-id                172     string
ATTRIBUTE       xpgk-local-disconnect-cause   173     string
ATTRIBUTE       xpgk-src-number-in            174     string
ATTRIBUTE       xpgk-src-number-out           175     string
ATTRIBUTE       xpgk-dst-number-in            176     string
ATTRIBUTE       xpgk-dst-number-out           177     string

5. Подготовливаем SQL запросы для вставки в базу данных.
Для этого создаем новый файл на основе имеющегося:
# cp /etc/raddb/mods-config/sql/main/mysql/queries.conf /etc/raddb/mods-config/sql/main/mysql/queriessmgeltex.conf
Открываем файл для редактирования:
# nano /etc/raddb/mods-config/sql/main/mysql/queriessmgeltex.conf
В разделе    «Accounting and Post-Auth Queries»  в секцию  
stop {   ... } вставляем запрос:
query = " \
          INSERT INTO sms1016pnzradacct \
            (acctsessionid, \
             username, \
             nasipaddress, nasportid, nasporttype,\
             acctstarttime, \
             acctstoptime, \
             acctsessiontime, \
             calledstationid,   callingstationid, \
             h323callorigin, CiscoNASPort, h323calltype, EventTimestamp, \
             AcctStatusType, \
             currentimeserver, h323disconnectcause, \
             AcctDelayTime, h323gwid, xpgkrouteretries, \
             h323remoteid, xpgklocaldisconnectcause, \
             xpgksrcnumberin, xpgksrcnumberout, xpgkdstnumberin, xpgkdstnumberout, node,\
             OutgoingRTPlocaladdress, OutgoingRTPremoteaddress) \
          VALUES \
            ('%{Acct-Session-Id}', \
             '%{User-Name}', \
             '%{NAS-IP-Address}', '%{NAS-Port}', '%{NAS-Port-Type}', \
               CONCAT(SUBSTRING('%{h323-setup-time}',33, 4),'-',\
                case SUBSTRING('%{h323-setup-time}',26, 3) \
                        when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'May\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Jul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-setup-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-setup-time}', ':', 2),SUBSTRING('%{h323-setup-time}',6, 3)),  \
               CONCAT(SUBSTRING('%{h323-disconnect-time}',33, 4),'-',\
                case SUBSTRING('%{h323-disconnect-time}',26, 3) \
                       when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'Maj\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Yul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-disconnect-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-disconnect-time}', ':', 2),SUBSTRING('%{h323-disconnect-time}',6, 3)), \
             '%{Acct-Session-Time}', \
             '%{Called-Station-Id}', '%{Calling-Station-Id}', \
             '%{h323-call-origin}', '%{Cisco-NAS-Port}', '%{h323-call-type}', '%{Event-Timestamp}', \
             '%{Acct-Status-Type}', \
             '%S', '%{h323-disconnect-cause}', \
             '%{Acct-Delay-Time}', '%{h323-gw-id}', '%{xpgk-route-retries}', \
             '%{h323-remote-id}', '%{xpgk-local-disconnect-cause}', \
             '%{xpgk-src-number-in}', '%{xpgk-src-number-out}', '%{xpgk-dst-number-in}', '%{xpgk-dst-number-out}', 'UFA-SMG2', \
             '', '')"
Здесь UFA-SMG2 - это имя устройства
Следующие разделы оставляем пустыми:
accounting-on {
}
accounting-off {
}
start {
}
interim-update {
}

6. Добавляем второй раздел описания sql в файл /etc/raddb/mods-enabled/sql
# nano /etc/raddb/mods-enabled/sql
Название имеющегося раздела sql меняем на sql sql. Должно получиться:
sql sql {
...
}
Дописываем раздел в конец файла:
sql sqlsmg1016eltex {
        driver = "rlm_sql_mysql"
        dialect = "mysql"
        #
        server = "localhost"
        port = 3306
        login = "radius"
        password = "radpass"

        # Database table configuration for everything except Oracle
        radius_db = "radius"

        acct_table1 = "sms1016pnzradacct"
        acct_table2 = "sms1016pnzradacct"

        # Allow for storing data after authentication
        postauth_table = "radpostauth"

        # Tables containing 'check' items
        authcheck_table = "radcheck"
        groupcheck_table = "radgroupcheck"

        # Tables containing 'reply' items
        authreply_table = "radreply"
        groupreply_table = "radgroupreply"

        # Table to keep group info
        usergroup_table = "radusergroup"

        # Remove stale session if checkrad does not see a double login
        delete_stale_sessions = yes

        pool {
                start = 5
                min = 4
                max = ${thread[pool].max_servers}
                spare = 3
                uses = 0
                lifetime = 0
                idle_timeout = 60
        }

        # Table to keep radius client info
        client_table = "nas"

        # Read database-specific queries
        $INCLUDE /etc/raddb/mods-config/sql/main/mysql/queriessmgeltex.conf 
}

7. Создаем новый файл описания сервера FreeRadius на основе имеющегося:
# cp /etc/raddb/sites-available/default /etc/raddb/sites-available/smg1016eltex
Открываем созданный файл:
# nano /etc/raddb/sites-available/smg1016eltex
Вставляем туда:
server sqlsmg1016eltex {
listen {
        ipaddr = *
        port = 1814
        type = acct
        limit {
        }
}
authorize {
}
authenticate {
}
preacct {
   preprocess
}
#  Accounting.  Log the accounting data.
accounting {
        sqlsmg1016eltex
}
session {
}
post-auth {
}
}
Основная функция файла указать, что сервер RADIUS с именем sqlsmg1016eltex будет слушать порт 1814 и обрабатывать запросы аккаутинга с помощью модуля sql с названием «sqlsmg1016eltex».

8. Делаем сервис доступным
# ln -s /etc/raddb/sites-available/smg1016eltex /etc/raddb/sites-enabled/smg1016eltex

9. Рестартуем сервис
# systemctl restart radiusd.service

10. Открываем порт 1814 в файле iptables
# nano /etc/sysconfig/iptables
Добавляем:
-A INPUT -p tcp -m tcp --dport 1814 -j ACCEPT
-A INPUT -p udp -m udp --dport 1814 -j ACCEPT 
Рестрартуем iptables
# systemctl restart iptables.service