squidgen 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. include ('api.1984tech.php');
  3. $tech = new OrwellWorld();
  4. $squidCA = ('-----BEGIN PRIVATE KEY-----
  5. MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN/7Ghjf1XnBKh5N
  6. FR70eaGobv31/7a3ISl8WuxjuzMcxeH2CWcV57IbPltAM9w19Sw5cgw6pkosFTWO
  7. ScT19l2aTqBjyU0UuP0qIEMaD2S/wzN6d1iY1lBDrxLIir3fkLVxLrNw7YY5Du/T
  8. oyh2D92lAgqBHcppao1R2YGAlcrFAgMBAAECgYBj9kxqZ5N92HD0vxA7FX8nX+XR
  9. YDX1FPwu6LonoEcPA7tpIoaFxGf4vGHzFc9Pa6F1UFoPDSnkFpKMqWlRBzkhLVJs
  10. e8VzDQcv/0oZtbIki7+Aih2QXufw2AFYVeiKxgjNBEP9uNRXvNw2v+Z0qBkio4G9
  11. Xww5fFNK+gHFDNvcAQJBAPw+KUKwNf9og7av6XE7c0YZ1mYkYDOjX0r26BO/AoUu
  12. /a8ZFq5SSsCpsjOXmXIMZWLW8ANU7LV1gw8T1+rcB8UCQQDjUSx+3QqQJxe5zr7J
  13. cxPzuP4wVvmC8h95RgX4VKhhqKEtIGv1Sonj7aaeT3SGpT5LUfKm8S8Pj+ctrlP0
  14. S+cBAkEAtpUQLLN8AopWfNBMe6f6ws1FAd5mvDoPaiXayyBB5MGk4y+X2Uq7zUWI
  15. NgwQCBus76SBSwgX5ylOWoWUju4BuQJBAIJwA95QLE2HgR/HuMaT2DEUSBeo8Mfo
  16. 85J9UdOrkGtpfgMNBaXdPb6ikedppG3WyCYkQd71qpF9e6RE0jvuigECQQCO9nhL
  17. zxqabzkkwbsxaR+A7Ut1sqKmQeKpwu3unmvynhlpgsea1EoMp2D9HL1tI6alR0PR
  18. /Sy6XimligpwSNUc
  19. -----END PRIVATE KEY-----
  20. -----BEGIN CERTIFICATE-----
  21. MIICyDCCAjGgAwIBAgIJAP8TzwhQe9xfMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV
  22. BAYTAlVBMRAwDgYDVQQIDAdVa3JhaW5lMREwDwYDVQQKDAgxOTg0VEVDSDERMA8G
  23. A1UECwwIMTk4NFRFQ0gxETAPBgNVBAMMCDE5ODR0ZWNoMSMwIQYJKoZIhvcNAQkB
  24. FhRhcHVfYWRtaW5AYXB1Lmdvdi51YTAeFw0xNzA1MjUxOTQzNTFaFw0yNzA1MjMx
  25. OTQzNTFaMH0xCzAJBgNVBAYTAlVBMRAwDgYDVQQIDAdVa3JhaW5lMREwDwYDVQQK
  26. DAgxOTg0VEVDSDERMA8GA1UECwwIMTk4NFRFQ0gxETAPBgNVBAMMCDE5ODR0ZWNo
  27. MSMwIQYJKoZIhvcNAQkBFhRhcHVfYWRtaW5AYXB1Lmdvdi51YTCBnzANBgkqhkiG
  28. 9w0BAQEFAAOBjQAwgYkCgYEA3/saGN/VecEqHk0VHvR5oahu/fX/trchKXxa7GO7
  29. MxzF4fYJZxXnshs+W0Az3DX1LDlyDDqmSiwVNY5JxPX2XZpOoGPJTRS4/SogQxoP
  30. ZL/DM3p3WJjWUEOvEsiKvd+QtXEus3DthjkO79OjKHYP3aUCCoEdymlqjVHZgYCV
  31. ysUCAwEAAaNQME4wHQYDVR0OBBYEFK6nt3LvFOZ6R+b8JxgV/mTs0sB1MB8GA1Ud
  32. IwQYMBaAFK6nt3LvFOZ6R+b8JxgV/mTs0sB1MAwGA1UdEwQFMAMBAf8wDQYJKoZI
  33. hvcNAQEFBQADgYEAHRXF1YQMtpLyEg/pmxyIN/n3GoaqUFKuP8oyCJRspYB5fPKD
  34. s00UOlyoH9Tvig4pnoCN/FiTdbQge7W6/2NTvSabF4Yf3XaQZUNqRbazJNXrOajg
  35. IIOr0nePEA8ur1vGUco5q7zKnjwAnWdOa1YuKlwchJ5ZboOAoHeF/rc/yLw=
  36. -----END CERTIFICATE-----
  37. ');
  38. $squid_config = ('#
  39. # Recommended minimum configuration:
  40. #
  41. acl SSL_ports port 443
  42. acl Safe_ports port 80 # http
  43. acl Safe_ports port 443 # https
  44. acl CONNECT method CONNECT
  45. acl 1984tech url_regex "' . $tech->SquidPath . '/1984tech.conf"
  46. http_access deny 1984tech
  47. deny_info ERR_1984TECH 1984tech
  48. #
  49. # Recommended minimum Access Permission configuration:
  50. #
  51. # Deny requests to certain unsafe ports
  52. http_access deny !Safe_ports
  53. # Deny CONNECT to other than secure SSL ports
  54. http_access deny CONNECT !SSL_ports
  55. # Only allow cachemgr access from localhost
  56. http_access allow localhost manager
  57. http_access allow ALL
  58. http_access deny manager
  59. http_access deny to_localhost
  60. # Squid normally listens to port 3128
  61. http_port 127.0.0.1:3128 intercept options=NO_SSLv3:NO_SSLv2
  62. # указываем HTTPS порт с нужными опциями
  63. https_port 127.0.0.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=' . $tech->SquidPath . '/squidCA.pem
  64. always_direct allow all
  65. sslproxy_cert_error allow all
  66. sslproxy_flags DONT_VERIFY_PEER
  67. #укажем правило со списком блокируемых ресурсов (в файле домены вида .domain.com)
  68. acl blocked ssl::server_name_regex "' . $tech->SquidPath . '/1984tech.conf"
  69. acl step1 at_step SslBump1
  70. ssl_bump peek step1
  71. #терминируем соединение, если клиент заходит на запрещенный ресурс
  72. ssl_bump terminate blocked
  73. ssl_bump splice all
  74. # Leave coredumps in the first cache dir
  75. coredump_dir /var/squid/cache
  76. ');
  77. $error_message = ('<!DOCTYPE html>
  78. <html lang="uk">
  79. <head>
  80. <meta charset="utf-8">
  81. <title>Халепа</title>
  82. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  83. <style>
  84. body
  85. {
  86. background-color:#000000;
  87. color: #FFFFFF;
  88. }
  89. .outer {
  90. display: table;
  91. position: absolute;
  92. height: 99%;
  93. width: 99%;
  94. }
  95. .middle {
  96. display: table-cell;
  97. vertical-align: middle;
  98. }
  99. .inner {
  100. margin-left: auto;
  101. margin-right: auto;
  102. width: 70%;
  103. opacity:.80;
  104. -moz-opacity:.80;
  105. filter:alpha(opacity=80);
  106. background-color:#000000;
  107. -moz-box-shadow: 3px 3px 4px #000;
  108. -webkit-box-shadow: 3px 3px 4px #000;
  109. box-shadow: 3px 3px 4px #000;
  110. /* For IE 8 */
  111. -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color="#000000")";
  112. /* For IE 5.5 - 7 */
  113. filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color="#000000");
  114. }
  115. }
  116. .centered {
  117. text-align: center;
  118. }
  119. a:link {
  120. color: rgb(61, 101, 148);
  121. font-family: Tahoma,Verdana,Helvetica,sans-serif;
  122. text-decoration: none;
  123. }
  124. a:active {
  125. color: rgb(61, 101, 148);
  126. font-family: Tahoma,Verdana,Helvetica,sans-serif;
  127. text-decoration: none;
  128. }
  129. a:visited {
  130. color: rgb(61, 101, 148);
  131. font-family: Tahoma,Verdana,Helvetica,sans-serif;
  132. text-decoration: none;
  133. }
  134. a:hover {
  135. color: rgb(45, 64, 102);
  136. font-family: Tahoma,Verdana,Helvetica,sans-serif;
  137. text-decoration: none;
  138. }
  139. </style>
  140. </head>
  141. <body>
  142. <div class="outer">
  143. <div class="middle">
  144. <div class="inner">
  145. <h1 class="centered">Шановний абонент.</h1>
  146. Набув чинності Указ Президента України №133/2017 "Про рішення Ради національної безпеки і оборони України від 28 квітня 2017 року "Про застосування
  147. персональних спеціальних економічних та інших обмежувальних заходів (санкцій)" .
  148. Відповідно до цього Указу інтернет провайдери повинні припинити надання послуг з доступу до ряду веб-ресурсів, зокрема соціальних мереж "Однокласник
  149. и", "Вконтакте", сервісів Yandex та mail.ru, а також деяких інших.
  150. Більш детально зі списком веб-ресурсів ви можете ознайомитись за наступним <a href="http://www.president.gov.ua/documents/1332017-21850">посиланням</a>.
  151. <br>
  152. Виконуючи вимоги зазначеного Указу проводяться технічні заходи з обмеження надання послуг доступу до зазначених веб-ресурсів, відповідно з нашими те
  153. хнічними можливостями.
  154. <br>
  155. <br>
  156. За додатковою інформацією ви можете звертатись за адресою: 01220, м. Київ, вул. Банкова, 11.<br>
  157. Або ж телефонувати за номером - (044) 255-73-33.
  158. </div>
  159. </div>
  160. </div>
  161. </body>
  162. </html>
  163. ');
  164. //need at least 1 command line argument
  165. if ($argc >= 2) {
  166. $allowedOptions = array(
  167. '--preview' => 'preview config file for Squid to stdout',
  168. '--list' => 'list loaded domains',
  169. '--print-pem' => 'Print SSL pem head data that need for Squid',
  170. '--generate' => 'generate comfig file on filesystem for Squid',
  171. '--help' => 'show small help'
  172. );
  173. $option = $argv[1];
  174. if (isset($allowedOptions[$option])) {
  175. switch ($option) {
  176. case '--preview':
  177. print($tech->getSquidConfig($squid_config));
  178. break;
  179. case '--list':
  180. print($tech->renderDomainsRaw());
  181. break;
  182. case '--print-pem':
  183. $cert = openssl_x509_read($squidCA);
  184. $parsedCert=openssl_x509_parse($cert);
  185. print ($parsedCert['name'] . PHP_EOL);
  186. break;
  187. case '--generate':
  188. $generationResult = $tech->saveSquid($squid_config, $squidCA, $error_message);
  189. if (!empty($generationResult)) {
  190. print('Squid config files:' . PHP_EOL . $generationResult . ' saved' . PHP_EOL);
  191. } else {
  192. print('Squid 1984tech.conf skipped because DNS_ZONES option empty' . PHP_EOL);
  193. }
  194. break;
  195. case '--help':
  196. print('Usage: php cli/squidgen --option' . PHP_EOL);
  197. print('Available options:' . PHP_EOL);
  198. if (!empty($allowedOptions)) {
  199. foreach ($allowedOptions as $optionName => $optionDesc) {
  200. print($optionName . ' - ' . $optionDesc . PHP_EOL);
  201. }
  202. }
  203. break;
  204. }
  205. } else {
  206. print('Unknown command line option: ' . $option . PHP_EOL);
  207. }
  208. } else {
  209. //option requirement notification
  210. print('At least one option required.' . PHP_EOL);
  211. print('Usage: php cli/squidgen --option' . PHP_EOL);
  212. print('For example: php cli/squidgen --help' . PHP_EOL);
  213. }
  214. ?>