Работаем с Router OS через API
Задача: организовать блокировку абонентов по «балансу», установка скорости интернета абонента, защита от «ручных IP». Биллинг: Lanbilling, Железка: Router OS
- Блокировка по «балансу»
Жизнь замечательных грибов
Наработки и статьи по работе с Linux
Задача: организовать блокировку абонентов по «балансу», установка скорости интернета абонента, защита от «ручных IP». Биллинг: Lanbilling, Железка: Router OS
При следующей настройке Mikrotik:
И стандартных настройках FreeRadius мы получаем в атрибут User-Name, MAC адрес абонента. А User-Password — пустой. Нужно научить FreeRadius принимать пустые пароли. Самое простое, поправить default секцию authorize следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 |
authorize { if(User-Name =~ /^([0-9A-F]{2}:?){6}$/ && User-Password == ''){ update request { User-Password = "123" } update control { Auth-Type := Accept } } ... |
, т.е. если мы видим что пришел User-Name MAC адрес, то мы подставляем ему пароль 123 и проводим авторизацию в любом случае, даже если данный MAC адрес не найден в базе (в этом случае ответ придет Accept, но без IP, который будет автоматом выдан из пула свободных DHCP).
При этом в БД в таблицу radreply нужно добавить строки следующего вида:
1 2 3 4 5 6 |
+----------+-------------------+---------------------+----+-------------+ | id | username | attribute | op | value | +----------+-------------------+---------------------+----+-------------+ | 33727393 | 18:D6:C7:2A:5E:F5 | Mikrotik-Rate-Limit | := | 10M | | 33727396 | 18:D6:C7:2A:5E:F5 | Framed-IP-Address | := | 10.30.100.3 | +----------+-------------------+---------------------+----+-------------+ |
radtest b8:69:f4:5a:45:5b «» localhost 1812 secret123
Ну вот, кто-то «подхватил» и продолжил наконец развивать заброшеный автором менеджер подключений Pac Manager. Ура товарищи. Ловите ссылку: https://www.asbru-cm.net/
В этой сборке исправлены ошибки работы под последними версиями Ubuntu, под которыми оригинальный Pac Manager без бубна уже не работал.
Бывает ситуации, когда нужно дать доступ на сервер, но не желательно допустить, чтобы он видел «лишнее». Для этого можно ограничить пользователя домашним каталогом по ssh и sftp. Что нужно сделать для этого:
1) Создать пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
root@w34rw34:~ # adduser test Username: test Full name: test test Uid (Leave empty for default): Login group [test]: Login group is test. Invite test into other groups? []: Login class [default]: Shell (sh csh tcsh nologin) [sh]: Home directory [/home/test]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: yes Lock out the account after creation? [no]: Username : test Password : <random> Full Name : test test Uid : 1005 Class : Groups : test Home : /home/test Home Mode : Shell : /bin/sh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (test) to the user database. adduser: INFO: Password for (test) is: 34rfw34rfw34 Add another user? (yes/no): no Goodbye! |
2) В /etc/ssh/sshd_config добавляем следующие строчки:
1 2 |
Match user test ChrootDirectory /home/test |
Перестартуем sshd:
1 |
/etc/rc.d/sshd restart |
3) Ниже приведенным скриптом создадим «пользовательское окружение», т.е. фактически создадим набор команд шелла, доступных пользователю:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#!/bin/sh # В скрипт нужно передавать имя пользователя для которого создаем chroot окружение if [ "$1" = "" ] ; then echo " Usage: $0 [ username ]" exit fi USER=$1 GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4` HOME=/usr/home/$USER # Задаем список бинаников, нужных для работы в chroot BINS=" /usr/local/bin/mysql \ /bin/cat \ /bin/chmod \ /bin/cp \ /bin/csh \ /bin/date \ /bin/df \ /bin/echo \ /bin/expr \ /bin/ln \ /bin/ls \ /bin/mkdir \ /bin/mv \ /bin/ps \ /bin/pwd \ /bin/rm \ /bin/rmdir \ /bin/sh \ /usr/bin/awk \ /usr/bin/bzip2 \ /usr/bin/diff \ /usr/bin/du \ /usr/bin/ee \ /usr/bin/fetch \ /usr/bin/find \ /usr/bin/grep \ /usr/bin/gunzip \ /usr/bin/gzip \ /usr/bin/less \ /usr/bin/sed \ /usr/bin/sort \ /usr/bin/scp \ /usr/bin/ssh \ /usr/bin/tail \ /usr/bin/tar \ /usr/bin/touch \ /usr/bin/vi \ /usr/bin/uname \ /usr/bin/uptime \ /usr/local/bin/mc \ /usr/local/bin/mcedit \ /usr/local/bin/mcmfmt \ /usr/local/bin/unrar \ /usr/local/bin/unzip \ " # Создаем структуру каталогов chroot окружения mkdir $HOME/bin mkdir $HOME/etc mkdir $HOME/home mkdir $HOME/home/$USER mkdir $HOME/lib mkdir $HOME/libexec mkdir $HOME/tmp mkdir $HOME/usr mkdir $HOME/usr/bin mkdir $HOME/usr/local mkdir $HOME/usr/local/bin mkdir $HOME/usr/local/etc mkdir $HOME/usr/local/share mkdir $HOME/lib # Копируем бинарники в chroot окружение for item in $BINS; do cp $item $HOME$item done # Копируем всю папку /lib cp /lib/* $HOME/lib/ # Определяем какие библиотеки необходимо скопировать chroot for item in $BINS; do ldd $item |awk '{print $3}'|grep "." >> /tmp/libs done # Копируем библиотеки for item in `cat /tmp/libs|sort|uniq`; do cp $item $HOME/lib/ done # Копируем оставшиеся необходимые файлы и библиотеки cp /etc/termcap $HOME/etc/termcap cp /etc/resolv.conf $HOME/etc/resolv.conf cp /etc/nsswitch.conf $HOME/etc/nsswitch.conf cp -R /usr/local/share/mc $HOME/usr/local/share/mc cp /libexec/ld-elf.so.1 $HOME/libexec/ld-elf.so.1 # Создадим /etc/motd для пользователя echo "Welcome $USER" > $HOME/etc/motd # Теперь /etc/profile для него же echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile echo 'export PS1="$ "' >> $HOME/etc/profile # /etc/group тоже нужен свой cat /etc/group | grep $GID > $HOME/etc/group # Теперь внутри chroot создадим пользователя cat /etc/master.passwd|grep "^$USER:" > $HOME/etc/master.passwd pwd_mkdb -d $HOME/etc $HOME/etc/master.passwd # Выставляем права chown root:wheel $HOME chmod 755 $HOME chmod 755 $HOME chown -R $USER:$GID $HOME/bin chown -R $USER:$GID $HOME/etc chown -R $USER:$GID $HOME/home chown -R $USER:$GID $HOME/lib chown -R $USER:$GID $HOME/libexec chown -R $USER:$GID $HOME/tmp chown -R $USER:$GID $HOME/usr chmod 777 $HOME/tmp # Убираем за собой rm /tmp/libs |
5) Если необходимо сделать доступными пользователю еще какието папки (например из /usr/local/www/apache2, можно воспользоваться командой локального монтирования:
1 |
mount_nullfs /usr/local/www/apache24/sites/abc/ /home/test/home/test/site/ |