Данный пост не претендует на новизну, я привожу пример из реальной жизни. Сам не являюсь знатоком Bash & PHP языков. Скорее всего, можно еще более упростить и улучшить данную инструкцию.
По работе понадобилось автоматизировать процесс обновления баз и упростить изменение файлов запретов для SquidGuard. В сжатые сроки и в силу своих знаний я реализовал данную задачу таким образом…
1) Пишем скрипт для автоматического обновления баз запретов (update_squidGuard.sh). Скрипт создает резервную копию текущего листа запретов, закачивает новую базу листов, распаковывает её, обновляет и реконфигурирует Squid. Работать он будет раз в неделю.
2) Создаём файл, который будет обновлять базы для SquidGuard каждые 20 минут (rebuild_base.sh)
3) Запускаем работу скриптов по крону:
4) Естественно, что существует множество комплексных систем, для удаленного управления и мониторинга Squid. Исторически сложилось, что статистику у нас собирает SAMS, но использовать его списки блокировок никто не хочет, по не известным до сего дня причинам. Я написал за 30 минут свой маленький редактор файлов. Так как файлы с запретами у нас обрабатываются по крону каждые 20 минут, я могу с легкостью изменять списки запретов.
Для начала создаем симлинки файлов (*.diff) каждой из групп блокировок в /var/www/html/:
Пример для листов групп: bad, good, pron.
Это конечно утомительное и не благодарное занятие, но сделав его раз, можно об этом уже не думать.
4.1) Самая простая защита доступа к данному разделу сайта через файл htaccess:
4.2) Пример файла index.html:
4.3) Файл занимающийся выводом листов блокировок lists.php:
4.4) После изменения файлов блокировок запускаем update.php, который пишет изменения в файл.
На этом всё, можно попробовать протестировать получившееся. Надеюсь, данный опыт или его части окажутся кому-либо полезными. Успехов.
P.S: Критика приветствуется.
По работе понадобилось автоматизировать процесс обновления баз и упростить изменение файлов запретов для SquidGuard. В сжатые сроки и в силу своих знаний я реализовал данную задачу таким образом…
1) Пишем скрипт для автоматического обновления баз запретов (update_squidGuard.sh). Скрипт создает резервную копию текущего листа запретов, закачивает новую базу листов, распаковывает её, обновляет и реконфигурирует Squid. Работать он будет раз в неделю.
- #!/bin/sh
- echo '__________Создаем резервную копию листа запретов__________'
- tar zcf old_blacklists.tgz /etc/squid/blacklists/
- echo '============================'
- echo 'Успешно!'
- echo '============================'
- echo '__________Скачиваем свежую базу и перемещаем её поверх старой__________'
- /usr/bin/wget -q --cache=off 'http://www.shallalist.de/Downloads/shallalist.tar.gz' –O
- /etc/squid/updatedb/shallalist.tar.gz
- tar zxf /etc/squid/updatedb/shallalist.tar.gz -C /etc/squid/updatedb/
- cp -R -f /etc/squid/updatedb/BL/* /etc/squid/blacklists/
- rm -R /etc/squid/updatedb/BL/
- echo '============================'
- echo 'Успешно!'
- echo '============================'
- echo '__________Обновляем базы и реконфигурируем SQUID__________'
- /etc/squid/updatedb/rebuid_base.sh
- squid -k reconfigure
- echo '============================'
- echo 'Всё успешно сделано!'
- 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:
- <html>
- <head>
- <title>Редактор</title>
- </head>
- <body>
- <table >
- <tbody>
- <tr>
- <td>Список блокировок DOMAINS-BA </td>
- <td><a href="lists.php?action=domains-bad">редактировать</a></td>
- </tr>
- <tr>
- <td>Список блокировок URLS-BAD </td>
- <td><a href="lists.php?action=urls-bad">редактировать</a></td>
- </tr>
- </tbody>
- </table>
- </body>
- </html>
* This source code was highlighted with Source Code Highlighter.
4.3) Файл занимающийся выводом листов блокировок lists.php:
- <?php
- header('Content-Type: text/html; charset=UTF-8');
- $var = "domains";
- if (isset($_GET['action']))
- {
- $var = $_GET['action'];
- }
- ?>
- <font style="font-size:20px" color="#000000" face="Arial">BL EDITOR:</font>
- <br />
- <form action="update.php?actions=$var" method="get">
- <table>
- <td>
- <th>
- Список запретов:<br />
- <textarea name="$var" style="width:300; height:300">
- <?php
- $filename = "$var.diff";
- $fp = fopen ($filename, 'r');
- $buffer = fread($fp, filesize ($filename));
- $buffer = str_replace(" ",'',$buffer);
- echo $buffer;
- fclose ($fp);
- ?>
- </textarea>
- </th>
- </td>
- </table>
- <br />
- <input type="hidden" name="action" value="<?=$var?>">
- <input type="submit" name="update" value="Сохранить изменения">
- </form>
- <br /><br />
- <a href="#">На главную<a/>
* This source code was highlighted with Source Code Highlighter.
4.4) После изменения файлов блокировок запускаем update.php, который пишет изменения в файл.
- <?php
- header('Content-Type: text/html; charset=UTF-8');
- $var = "domains";
- if (isset($_GET['action']))
- {
- $var1 = $_GET['action'];
- }
- // Добавляем новые данные в файл
- // списка доменов domains.diff
- $upd1 = $_GET['$var'];
- $upd1 = str_replace("\r",' ',$upd1);
- $fd = "$var1.diff";
- $fdomain = fopen($fd,"w+");
- fwrite($fdomain, $upd1);
- fclose($fdomain);
- echo "<b>all ok!</b><br />";
- echo "<a href=index.php>Home</a>";
- ?>
* This source code was highlighted with Source Code Highlighter.
На этом всё, можно попробовать протестировать получившееся. Надеюсь, данный опыт или его части окажутся кому-либо полезными. Успехов.
P.S: Критика приветствуется.