Pull to refresh

Автоматизация прокси-сервера SQUID

Reading time 4 min
Views 5.7K
Данный пост не претендует на новизну, я привожу пример из реальной жизни. Сам не являюсь знатоком Bash & PHP языков. Скорее всего, можно еще более упростить и улучшить данную инструкцию.
По работе понадобилось автоматизировать процесс обновления баз и упростить изменение файлов запретов для SquidGuard. В сжатые сроки и в силу своих знаний я реализовал данную задачу таким образом…

1) Пишем скрипт для автоматического обновления баз запретов (update_squidGuard.sh). Скрипт создает резервную копию текущего листа запретов, закачивает новую базу листов, распаковывает её, обновляет и реконфигурирует Squid. Работать он будет раз в неделю.
  1. #!/bin/sh
  2. echo '__________Создаем резервную копию листа запретов__________'
  3. tar zcf old_blacklists.tgz /etc/squid/blacklists/
  4. echo '============================'
  5. echo 'Успешно!'
  6. echo '============================'
  7. echo '__________Скачиваем свежую базу и перемещаем её поверх старой__________'
  8. /usr/bin/wget -q --cache=off 'http://www.shallalist.de/Downloads/shallalist.tar.gz' –O
  9. /etc/squid/updatedb/shallalist.tar.gz
  10. tar zxf /etc/squid/updatedb/shallalist.tar.gz -C /etc/squid/updatedb/
  11. cp -R -f /etc/squid/updatedb/BL/* /etc/squid/blacklists/
  12. rm -R /etc/squid/updatedb/BL/
  13. echo '============================'
  14. echo 'Успешно!'
  15. echo '============================'
  16. echo '__________Обновляем базы и реконфигурируем SQUID__________'
  17. /etc/squid/updatedb/rebuid_base.sh
  18. squid -k reconfigure
  19. echo '============================'
  20. echo 'Всё успешно сделано!'
  21. echo '============================'


2) Создаём файл, который будет обновлять базы для SquidGuard каждые 20 минут (rebuild_base.sh)
#!/bin/sh
chown -R squid:squid /etc/squid/blacklists
/usr/local/bin/squidGuard -u /etc/squid/blacklists/*/*.diff
chown -R apache:apache /etc/squid/blacklists/*/*.diff
/usr/sbin/squid -k reconfigure


3) Запускаем работу скриптов по крону:
tux# crontab –u squid –e
0,20,40 * * * * /etc/squid/updatedb/rebuid_base.sh
00 21 * * 7 /etc/squid/updatedb/update_squidGuard.sh


4) Естественно, что существует множество комплексных систем, для удаленного управления и мониторинга Squid. Исторически сложилось, что статистику у нас собирает SAMS, но использовать его списки блокировок никто не хочет, по не известным до сего дня причинам. Я написал за 30 минут свой маленький редактор файлов. Так как файлы с запретами у нас обрабатываются по крону каждые 20 минут, я могу с легкостью изменять списки запретов.
Для начала создаем симлинки файлов (*.diff) каждой из групп блокировок в /var/www/html/:
Пример для листов групп: bad, good, pron.
domains-bad.diff
domains-good.diff
domains-pron.diff

urls-bad.diff
urls-good.diff
urls-pron.diff



Это конечно утомительное и не благодарное занятие, но сделав его раз, можно об этом уже не думать.
4.1) Самая простая защита доступа к данному разделу сайта через файл htaccess:
Order deny,allow
Deny from all
Allow from 192.168.0.1
Allow from 192.168.0.2
Allow from 192.168.0.3



4.2) Пример файла index.html:
  1. <html>
  2. <head>
  3. <title>Редактор</title>
  4. </head>
  5. <body>
  6. <table >
  7.  <tbody>
  8.   <tr>
  9.    <td>Список блокировок DOMAINS-BA </td>
  10.    <td><a href="lists.php?action=domains-bad">редактировать</a></td>
  11.   </tr>
  12.   <tr>
  13.    <td>Список блокировок URLS-BAD </td>
  14.    <td><a href="lists.php?action=urls-bad">редактировать</a></td>
  15.   </tr>
  16.   </tbody>
  17. </table>
  18. </body>
  19. </html>
* This source code was highlighted with Source Code Highlighter.

4.3) Файл занимающийся выводом листов блокировок lists.php:
  1. <?php
  2. header('Content-Type: text/html; charset=UTF-8');
  3. $var = "domains";
  4. if (isset($_GET['action']))
  5. {
  6.   $var = $_GET['action'];
  7. }
  8. ?>
  9. <font style="font-size:20px" color="#000000" face="Arial">BL EDITOR:</font>
  10. <br />
  11. <form action="update.php?actions=$var" method="get">
  12. <table>
  13. <td>
  14. <th>
  15. Список запретов:<br />
  16. <textarea name="$var" style="width:300; height:300">
  17. <?php
  18.   $filename = "$var.diff";
  19.   $fp = fopen ($filename, 'r');
  20.   $buffer = fread($fp, filesize ($filename));
  21.   $buffer = str_replace(" ",'',$buffer);
  22.   echo $buffer;
  23.   fclose ($fp);
  24. ?>
  25. </textarea>
  26. </th>
  27. </td>
  28. </table>
  29. <br />
  30. <input type="hidden" name="action" value="&#60;?=$var?>">
  31. <input type="submit" name="update" value="Сохранить изменения">
  32. </form>
  33. <br /><br />
  34. <a href="#">На главную<a/>
* This source code was highlighted with Source Code Highlighter.

4.4) После изменения файлов блокировок запускаем update.php, который пишет изменения в файл.
  1. <?php
  2. header('Content-Type: text/html; charset=UTF-8');
  3. $var = "domains";
  4. if (isset($_GET['action']))
  5. {
  6.   $var1 = $_GET['action'];
  7. }
  8. // Добавляем новые данные в файл
  9. // списка доменов domains.diff
  10. $upd1 = $_GET['$var'];
  11. $upd1 = str_replace("\r",' ',$upd1);
  12. $fd = "$var1.diff";
  13. $fdomain = fopen($fd,"w+");
  14. fwrite($fdomain, $upd1);
  15. fclose($fdomain);
  16. echo "&#60;b>all ok!</b><br />";
  17. echo "<a href=index.php>Home</a>";
  18. ?>
* This source code was highlighted with Source Code Highlighter.

На этом всё, можно попробовать протестировать получившееся. Надеюсь, данный опыт или его части окажутся кому-либо полезными. Успехов.
P.S: Критика приветствуется.

Tags:
Hubs:
+2
Comments 3
Comments Comments 3

Articles