Имеем FreeBSD-7.4-RELEASE с apache+nginx+php+mysql
Иногда случается такое что нужно получить удаленный доступ по ssh, но в IPFW данные IP не прописаны. Это может быть вызвано разными причинами. Другие сети и так далее.
Да и открывать доступ всем к ssh нет смысла, так как это прямая угроза безопасности. Смена ssh-порта тоже не даст результата. Вернее даст, но на первое время. Потом сканер портов сделает свое грязное дело и подбор логинов/паролей по ssh продолжится.
Так как на удаленной машине, к которой нужно получить доступ, стоит связка apache+nginx+php+mysql (останавливаться на установке сейчас не буду), то решение выбрал следующее:
1. Добавил виртуальный хост на 443 порту
2. Создал сертификаты
3. Создал 2 файлика, с помощью которых буду добавлять правила в IPFW
index.php
ipfwadd.php
4. Далее ставим sudo из портов
5. Редактируем
6. Естественно не забываем защитить виртуальный хост или http-авторизацией или через сертификат
7. После чего пробуем добавить данные в ipfw через web. Если все сделано правильно, то в messages увидим примерно следующее:
Вот в принципе и все. Писалось без «защиты от дурака», так как делалось лично для своих целей. Теперь просто, будучи с телефона, планшета и так далее, попасть в рабочую сеть
Иногда случается такое что нужно получить удаленный доступ по ssh, но в IPFW данные IP не прописаны. Это может быть вызвано разными причинами. Другие сети и так далее.
Да и открывать доступ всем к ssh нет смысла, так как это прямая угроза безопасности. Смена ssh-порта тоже не даст результата. Вернее даст, но на первое время. Потом сканер портов сделает свое грязное дело и подбор логинов/паролей по ssh продолжится.
Так как на удаленной машине, к которой нужно получить доступ, стоит связка apache+nginx+php+mysql (останавливаться на установке сейчас не буду), то решение выбрал следующее:
1. Добавил виртуальный хост на 443 порту
2. Создал сертификаты
3. Создал 2 файлика, с помощью которых буду добавлять правила в IPFW
index.php
<? $IP=$_SERVER['REMOTE_ADDR']; ?> <form action="ipfwadd.php" name="myform" method="post"> <table border="1"> <tr> <td>Номер правила:</td><td><input type="text" name="rules" maxlength="15" size="5"></td> </tr> <tr> <td>IP:</td><td><? echo $IP ?> </tr> <tr> <td>pass/deny</td><td> <select name=passdeny size=1> <option value=pass>pass</option> <option value=deny>deny</option> </select> </td> </tr> <tr> <td>UDP/TCP:</td><td> <select name=tcpudp size=1> <option value=tcp>TCP</option> <option value=udp>UDP</option> </select> </td> </tr> <tr> <td>Порт:</td><td><input type="text" name="ports" maxlength="6" size="8"></td> </tr> </table> <input name="Submit" type=submit value="Добавить правило"> </form>
ipfwadd.php
<meta http-equiv="refresh" content="0; url=/"> <? $rules = $_POST['rules']; $IP = $_SERVER['REMOTE_ADDR']; $ports = $_POST['ports']; $tcpudp = $_POST['tcpudp']; $passdeny = $_POST['passdeny']; $grepip = shell_exec("sudo ipfw add $rules $passdeny $tcpudp from $IP to me $ports"); ?>
4. Далее ставим sudo из портов
[anton@raccoon ~]$ su -
Password:
[root@raccoon ~]# whereis sudoers
sudoers: /usr/ports/security/sudo/
[root@raccoon ~]# cd /usr/ports/security/sudo/
[root@raccoon /usr/ports/security/sudo]# make install5. Редактируем
/usr/local/etc/sudoers для того чтобы пользователю, от которго запускается web-сервер был доступ к ipfw. У меня этот пользователь www. Соответственно добавил такую строкуwww ALL=NOPASSWD:/etc/rc.d/ipfw, /sbin/ipfw6. Естественно не забываем защитить виртуальный хост или http-авторизацией или через сертификат
7. После чего пробуем добавить данные в ipfw через web. Если все сделано правильно, то в messages увидим примерно следующее:
# cat /var/log/messages|grep ipfw
Feb 10 13:16:03 raccoon sudo: www : TTY=unknown ; PWD=/usr/local/www/ssl ; USER=root ; COMMAND=/sbin/ipfw add 150 pass tcp from 213.130.11.4 to me 80,88
Feb 11 20:24:06 raccoon sudo: www : TTY=unknown ; PWD=/usr/local/www/ssl ; USER=root ; COMMAND=/sbin/ipfw add 150 pass tcp from 88.155.65.100 to me 80,88
Feb 17 18:43:51 raccoon sudo: www : TTY=unknown ; PWD=/usr/local/www/ssl ; USER=root ; COMMAND=/sbin/ipfw add 150 pass tcp from 88.155.91.120 to me 80,88
Mar 3 22:19:02 raccoon sudo: www : TTY=unknown ; PWD=/usr/local/www/ssl ; USER=root ; COMMAND=/sbin/ipfw add 150 pass tcp from 88.155.8.131 to me 80,88
Mar 9 10:03:48 raccoon sudo: www : TTY=unknown ; PWD=/usr/local/www/ssl ; USER=root ; COMMAND=/sbin/ipfw add 150 pass tcp from 88.155.81.41 to me 80,88Вот в принципе и все. Писалось без «защиты от дурака», так как делалось лично для своих целей. Теперь просто, будучи с телефона, планшета и так далее, попасть в рабочую сеть
