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

    Данный пост не претендует на новизну, я привожу пример из реальной жизни. Сам не являюсь знатоком 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: Критика приветствуется.

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 3

      0
      одноклассники, вконтакте, фишки и др. вручную вбивать или они в немецком списке есть www.shallalist.de?
        0
        Ради интереса скачал. Все сайты приведенные выше имеются в списке. Попробую в режик прикрутить автоматическое обновление базы.
          0
          Да, имеются. Список довольно огромен. Я не использую его полностью. Мне хватает 70% этого списка. За время использования (8 месяцев) в список попадало всего 3 российский сайта, которые использовались по работе и не являлись чем-то эдаким. Правилось простым добавлением в *.diff файл значения: -необходимый_сайт.ru
          П.С: Извините, за поздний ответ.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое