Крайне редко выпадают интересные задачи, как правило все скучно или банально или просто не интересно, но тут один заказчик попросил выяснить можно ли обойти защиту скрипта который привязывается к доменному имени. Не смотря на участившиеся нервотрепки и проблемы – задача развеяла немного меня.
Скрипт – ТДС система, состоит из набора откомпилированных бинарников и пары тройки перл скриптов для парсинга статы, При попытке запустить скрипты на домене отличном от домена на который выдана лицензия скрипт выдавал ошибку и рекомендацию запускать на проплаченном домене.
В целом я понимал что не должно быть ничего военного – нужно только проксировать запрос – а индеец (apache2) это отлично умеет, лишний раз убеждаюсь что списание многими apache со счетов – просто не понимание как с ним работать, как например кто то списывает sendmail как ХХХХХХ (куча причин) плохой MTA – просто потому что не поняли всю его мощь и силу, так и с apache – просто не каждому дано. Итак все просто для включения проксирования активирую модули
1 2 |
# a2enmod proxy # a2enmod http_proxy |
В моем случае этого хватило, после чего моей задачей было запустить работу ТДС на локалхосте на 127.0.0.1:80 и что бы домен никак в мир не смотрелся, а сервак не резолвил через мир домен, почему сразу отправил в /etc/hosts строку
1 |
# echo '1.1.1.1 tds-domain.com' >> /etc/hosts |
После чего создал конфиг apache2 для работы скриптов на домене для которого есть лицензия но на 127.0.0.1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<VirtualHost 127.0.0.1:80> ServerName tds-domain.com AddDefaultCharset off DirectoryIndex index.html index.php DocumentRoot /home/tds-domain.com/public_html ServerAdmin webmaster@tds-domain.com ServerAlias www.tds-domain.com ScriptAlias /cgi-bin/ /var/www/tds-domain.com/data/www/tds-domain.com/cgi-bin/ <FilesMatch "\.ph(p[3-5]?|tml)$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch> php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@tds-domain.com" php_admin_value upload_tmp_dir "/var/www/tds-domain.com/data/mod-tmp" php_admin_value session.save_path "/var/www/tds-domain.com/data/mod-tmp" php_admin_value open_basedir "/var/www/tds-domain.com/data:." CustomLog /var/www/httpd-logs/tds-domain.com.access.log combined ErrorLog /var/www/httpd-logs/tds-domain.com.error.log </VirtualHost> <Directory /home/tds-domain/public_html> php_admin_flag engine on Options +ExecCGI +FollowSymLinks Order allow,deny Allow from all AllowOverride All Require all granted </Directory> |
Далее настраиваю публичный домен на который все будут обращаться, а с него мы будем средствами apache проксировать запросы на скрытый домен:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<VirtualHost 127.0.0.1:8080> ServerName dev.demi4.com AddDefaultCharset UTF-8 DirectoryIndex index.php DocumentRoot /var/www/demi4.com/data/www/dev.demi4.com ServerAdmin demi4@demi4.com SuexecUserGroup demi4.com demi4.com ServerAlias www.dev.demi4.com <FilesMatch "\.ph(p[3-5]?|tml)$"> SetHandler application/x-httpd-php5 </FilesMatch> ScriptAlias /php-bin/ /var/www/php-bin/demi4.com/ AddHandler application/x-httpd-php5 .php .php3 .php4 .php5 .phtml Action application/x-httpd-php5 /php-bin/php CustomLog /var/www/httpd-logs/dev.demi4.com.access.log combined ErrorLog /var/www/httpd-logs/dev.demi4.com.error.log ProxyRequests off ProxyPass / http://tds-domain:80/ ProxyPassReverse / http://tds-domain.com:80/ ProxyPassReverseCookieDomain tds-doman.com dev.demi4.com ProxyPassReverseCookiePath / / <Location /> Order allow,deny Allow from all </Location> </VirtualHost> <Directory /var/www/demi4.com/data/www/dev.demi4.com> Options -ExecCGI </Directory> |
Фронтендом у меня идет стандартно nginx – в нем я ничего не менял. После всех настроек проверил работу системы – поставленные задачи она выполняет:
– скрипт и домен с лицензией скрыт от посторонних глаз
– скрипт работает и не роняет статистику + корректно считает уников
– куки ставятся и отрабатывают