Squid — web-интерфейс для включения/отключения доступа к internet
СКАЧАТЬ (ZIP, ~2.3КБ)
С помощью этого web-интерфейса редактируется список, на который предполагается включать/отключать инет.
Предпогагается, что у нас есть установленный и настроенный squid, со строчкой в squid.conf:
acl user_list src "/usr/local/etc/squid/users"
для которого потом каким-то образом определяются права доступа к инету.
Файлы будут находиться, например, в /usr/home/public_html/username/squid/
ln -s /usr/home/public_html/username/squid/userlist /usr/local/etc/squid/users
Содержание файлов:
index.php:
<?php
// squid web-configuration
?>
<html>
<head>
<title>Manage ACL</title>
<style type='text/css'>
body {
background: #c3c3c3;
font-size: 14px;
}
a {
font-size: 27px;
}
a:link {
color: #00458A;
text-decoration: none;
}
a:visited {
color: #00458A;
text-decoration: none;
}
a:active {
color: #00458A;
text-decoration: none;
}
a:hover {
color: #00458A;
text-decoration: underline;
}
table {
background: white;
color: black;
border: 1px solid gray;
}
.header, .footer {
background: gray;
color: white;
}
.nav {
border: none;
}
.nav td {
border: 1px dashed gray;
text-align: center;
width: 33%;
}
.nav td:hover {
background: #dcdcdc;
}
.sets tr:hover {
background:#dcdcdc;
}
</style>
</head>
<body>
<table width='100%' border='0' cellpadding='10' cellspacing='0'>
<tr><td class='header'>
<p style='text-align: right; font-size: 24px;'>Logged in as: <font color='#c00000'><?php echo $_SERVER['REMOTE_USER']; ?></font>.</p>
</td></tr>
<tr><td>
<table width='100%' class='nav'><tr>
<td><a href='?'>Manage</a></td>
<td><a href='?action=status' target='_self'>Status</a></td>
<td><a href='?action=edit' target='_self'>Edit list</a></td>
</tr></table>
</td></tr>
<tr><td>
<?php
if ($_GET['action'] == 'status')
{
echo "<pre>";
system ("ps ax | grep squid");
echo "</pre>";
}
else if ($_GET['action'] == 'edit')
{
if ($_POST['saveconfig'] == null)
{
$fil="studlist";
if(!file_exists($fil))
{
$fp=fopen($fil,"w");
fclose($fp);
}
else
{
$a=file_get_contents("studlist");
}
echo "<form action='' method='post'>";
echo "<textarea type='text' rows='20' cols='40' name='a'>$a</textarea><br>";
echo "<input type='submit' value='Save' name='saveconfig'>";
echo "</form>";
}
if ($_POST['saveconfig'] != null)
{
$d=$_POST['a'];
echo "<center>Config saved successfully</center>";
$fil="studlist";
$fp=fopen($fil,"w");
fwrite($fp,$d);
fclose($fp);
}
}
else
{
if ($_POST['megafuck'] != null)
{
$count = $_POST["checkcount"];
$hfile = fopen("studlist", "w");
for($i = 0; $i < $count; $i++)
{
$chekBoxName = "check".$i;
$labelName = "label".$i;
$hostName = $_POST[$labelName];
if(!array_key_exists($chekBoxName, $_POST))
{
$hostName = "#".$hostName;
}
fwrite($hfile, $hostName."\n");
}
fclose($hfile);
shell_exec('/usr/home/username/public_html/squid/exec_sh/squid_web_reconf.sh');
echo "<h2>Setting saved successfully and squid reconfigured..</h2>";
}
echo "<form action='' method='post'>";
$farray = file("studlist");
$length = count($farray);
echo "<table class='sets'>";
for($i = 0; $i < $length; $i++)
{
$aud = "";
$isEnabled = "checked";
$line = $farray[$i];
if($line[0] == '#')
{
$isEnabled = "";
if($line[1] == '_')
{
$line = substr($line, 0);
$lines = substr($line, 2);
$aud = "_";
}
else
{
$line = substr($line, 1);
}
}
$checkBoxName = "check".$i;
$labelName = "label".$i;
echo "<tr> <td>";
if ($aud == '_')
{
echo "<b>Room:</b> ";
echo "<input type = 'text' name = '".$labelName."' value = '".$line."' readOnly border = '0'>";
}
else
{
echo "<input type = 'text' name = '".$labelName."' value = '".$line."' readOnly border = '0'>";
}
echo "</td>";
echo "<td>";
if ($aud == '_')
{
echo "<input type = 'hidden' name='".$checkBoxName."' ".$isEnabled.">";
}
else
{
echo "<input type = 'checkbox' name='".$checkBoxName."' ".$isEnabled.">";
}
echo "</td> </tr>";
}
echo "</table>";
echo "<input type = 'hidden' name='checkcount' value = '".$i."'>";
echo "<br/><center><input type = 'submit' value = 'SAVE' name='megafuck' style='width: 700px; height: 70px; font-size: 40px;'></center>";
echo "</form>";
}
?>
</td></tr>
<tr><td class='footer'>
<p align='right'>© Konstantin Krylov (2010)</p>
</td></tr>
</table>
</body>
</html>
/usr/home/public_html/username/squid/exec_sh/squid_web_reconf.sh
#!/bin/sh #### /usr/local/bin/sudo /usr/home/username/public_html/squid/exec_sh/squid_reconf.sh
/usr/home/public_html/username/squid/exec_sh/squid_reconf.sh
#!/bin/sh #### /usr/local/sbin/squid -k reconf
/usr/home/public_html/username/squid/userlist
localhost #_roomA #a-01 a-02 #a-03 #a-04 #_roomB b-01 #b-02 #b-03 #b-04
Права:
chown -R www:www /usr/home/public_html/username/squid/
find /usr/home/public_html/username/squid/ -type f -exec chmod 666 {} \;
find /usr/home/public_html/username/squid/ -type d -exec chmod 777 {} \;
find /usr/home/public_html/username/squid/ -type f -name '*.sh' -exec chmod 777 {} \;
Также пользователь www
должен быть в группе wheel
— правим /etc/groups
wheel:*:0:root,username,www
ну и правильно настроенное sudo