суббота, 28 июня 2014 г.
суббота, 21 июня 2014 г.
смс-ка при потере пинга
1. Зарегистрироваться на сайте sms.ru , "программистам", отправка 60-ти бесплатных смс в день. Вот.
С помощью этого сервиса я мониторю свои VPN-каналы.
2. Сам скрипт:
#!/bin/bash
HOSTS="1.1.1.1 2.22.22.2"
COUNT=4
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
curl -d "text= $myHost is down (ping failed) at $(date)" http://sms.ru/sms/send\?api_id=dff7015c-xxxxxxxxxxxx-xxxxxxxxxxxx\&to=7ХХХХХХХХХХ
fi
done
3. Запихнуть в cron, настроить расписание по желанию.
С помощью этого сервиса я мониторю свои VPN-каналы.
2. Сам скрипт:
#!/bin/bash
HOSTS="1.1.1.1 2.22.22.2"
COUNT=4
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
curl -d "text= $myHost is down (ping failed) at $(date)" http://sms.ru/sms/send\?api_id=dff7015c-xxxxxxxxxxxx-xxxxxxxxxxxx\&to=7ХХХХХХХХХХ
fi
done
3. Запихнуть в cron, настроить расписание по желанию.
четверг, 30 января 2014 г.
transparent VLAN bridge + squid3 + ipset+динамический шейпер HTB
Собственно схема:
acl LocalNet src 192.168.1.0/24
iptables -A FORWARD -t mangle -p udp -m udp -d 192.168.0.0/24 -j TOS --set-tos 0x10/0x3f
Для исходящего трафика:sudo touch eth0 # Описываем интерфейс eth0
sudo nano eth0
DEFAULT=10 # метка на файл, создаваемый ниже, eth0-2:10.dfl
R2Q=100 # точность ограничений
sudo touch eth0-2.root # корневой класс
sudo nano eth0-2.root
RATE=100Mbit # гарантированная пропускная способность
CEIL=100Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
sudo touch eth0-2:10.dfl # сюда попадает трафик, не попадающий ни в одно из правил ниже
sudo nano eth0-2:10.dfl
RATE=1024Kbit # гарантированная пропускная способность
CEIL=99Mbit # максимальная пропускная способность
LEAF=sfq # равномерное распределение между участниками очереди.
sudo touch eth0-2:20.rdp # гарантированный канал для rdp
sudo nano eth0-2:20.rdp
RATE=1Mbit # гарантированная пропускная способность
CEIL=2Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
LEAF=sfq # равномерное распределение между участниками очереди.
RULE=*:3389 # Применять правило для трафика, у которого исходящий порт 3389
sudo touch eth1 # Описываем интерфейс eth1
sudo nano eth1
DEFAULT=10 # метка на файл, создаваемый ниже, eth1-2:10.dfl
R2Q=100 # точность ограничений
sudo touch eth1-2.root # корневой класс
sudo nano eth1-2.root
RATE=330Mbit # гарантированная пропускная способность
CEIL=330Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
sudo touch eth1-2:10.dfl # сюда попадает трафик, не попадающий ни в одно из правил ниже
sudo nano eth1-2:10.dfl
RATE=1024Kbit # гарантированная пропускная способность
CEIL=300Mbit # максимальная пропускная способность
LEAF=sfq # равномерное распределение между участниками очереди.
PRIO=2 # PRIO задает приоритет класса трафика (1- максимальный, чем больше число — тем меньшt приоритет).
sudo touch eth1-2:20.rdp # гарантированный канал для rdp
sudo nano eth1-2:20.rdp
RATE=1024Kbit # гарантированная пропускная способность
CEIL=2048Kbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
LEAF=sfq # равномерное распределение между участниками очереди.
RULE=*:3389 # Применять правило для трафика, у которого порт назначения - rdp-порт
PRIO=1
sudo touch eth1-2:30.100 # ограничиваем скорость для ip 192.168.1.100
sudo nano eth1-2:30.100
RATE=64Kbit # гарантированная пропускная способность
как из нее видно, между одним из портов маршрутизатора и другим портом L3 коммутатора настроен VLAN trunk. В этих условиях мы собираемся использовать прозрачный мост и прозрачный прокси-сервер для управления http-трафиком пользователей. Также связку iptables и ipset для блокировки неугодных хостов и сетей, а также динамический шейпер скорости на основе скрипта htb.init.
Представленная схема была реализована на:
ubuntu-server 12.04.4 LTS (GNU/Linux 3.8.0-35-generic x86_64)
root@bridge:~# uname -a
Linux bridge 3.8.0-35-generic #50~precise1-Ubuntu SMP Wed Dec 4 17:25:51 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Linux bridge 3.8.0-35-generic #50~precise1-Ubuntu SMP Wed Dec 4 17:25:51 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
0. При установке ОС закажем инсталяцию ssh-сервера.
1. Ставим:
apt-get install bridge-utils
apt-get install ebtables
apt-get install
vlan
apt-get install mc
2. Включаем опции ядра для bridge:
echo 1 > /proc/sys/net/bridge/bridge-nf-call-arptables
echo 1 > /proc/sys/net/bridge/bridge-nf-pass-vlan-input-dev
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-pass-vlan-input-dev
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >
/proc/sys/net/bridge/bridge-nf-filter-vlan-tagged
3. Конфигурируем /etc/network/interfases:
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto eth0.5 #тэг vlan 5 для интерфейса eth0
iface eth0.5 inet manual
vlan_raw_device eth0
auto eth1.5 # #тэг vlan 5 для интерфейса eth1 (далее по аналогии)
iface eth1.5 inet manual
vlan_raw_device eth1
auto br0 # собственно мост у нас не один, в каждом vlan свой.
iface br0 inet static # трафик только одного VLAN
address 0.0.0.0 # заворачивается на прокси
bridge-ports eth0.5 eth1.5
bridge_stp off
auto eth0.12
iface eth0.12 inet manual
vlan_raw_device eth0
auto eth1.12
iface eth1.12 inet manual
vlan_raw_device eth1
auto br1
iface br1 inet static
address 192.168.1.7 # сервером удобнее всего управлять
netmask 255.255.255.0 # из клиентской сети (VLAN12).
broadcast 192.168.1.255 # сообственно поэтому и назначаем
gateway 192.168.1.1 # нашему мосту указанную адресацию,
bridge-ports eth0.12 eth1.12 # т.к. она соответствует
dns-nameservers 192.168.1.5 # адресации VLAN 12
dns-search domain.local
bridge_stp off
auto eth0.97
iface eth0.97 inet manual
vlan_raw_device eth0
auto eth1.97
iface eth1.97 inet manual
vlan_raw_device eth1
auto br2
iface br2 inet static
address 0.0.0.0
bridge-ports eth0.97 eth1.97
bridge_stp off
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto eth0.5 #тэг vlan 5 для интерфейса eth0
iface eth0.5 inet manual
vlan_raw_device eth0
auto eth1.5 # #тэг vlan 5 для интерфейса eth1 (далее по аналогии)
iface eth1.5 inet manual
vlan_raw_device eth1
auto br0 # собственно мост у нас не один, в каждом vlan свой.
iface br0 inet static # трафик только одного VLAN
address 0.0.0.0 # заворачивается на прокси
bridge-ports eth0.5 eth1.5
bridge_stp off
auto eth0.12
iface eth0.12 inet manual
vlan_raw_device eth0
auto eth1.12
iface eth1.12 inet manual
vlan_raw_device eth1
auto br1
iface br1 inet static
address 192.168.1.7 # сервером удобнее всего управлять
netmask 255.255.255.0 # из клиентской сети (VLAN12).
broadcast 192.168.1.255 # сообственно поэтому и назначаем
gateway 192.168.1.1 # нашему мосту указанную адресацию,
bridge-ports eth0.12 eth1.12 # т.к. она соответствует
dns-nameservers 192.168.1.5 # адресации VLAN 12
dns-search domain.local
bridge_stp off
auto eth0.97
iface eth0.97 inet manual
vlan_raw_device eth0
auto eth1.97
iface eth1.97 inet manual
vlan_raw_device eth1
auto br2
iface br2 inet static
address 0.0.0.0
bridge-ports eth0.97 eth1.97
bridge_stp off
вот схема того, что у нас в результате должно получиться:
4. Теперь перезапустим сеть:
/etc/init.d/networking restart
Или весь сервер:
reboot
Поставим мост в разрыв транка.
Должны суметь залогиниться по ssh на адрес моста.
5. Установим squid:
apt-get install squid
6. Приводим /etc/squid3/squid.conf к примерно такому виду:
http_port 3128 transparent
acl LocalNet src 192.168.1.0/24
http_access allow LocalNet
http_access deny all
http_access deny all
Командуем:
squid3 -k reconfigure # эта команда говорит сквиду перечитать и применить конфигурацию не перезагружаясь, и соответственно не разрывая текущих сессий.
Также есть такие команды:
service squid3 start
service squid3 stop
В дальнейшем можно настроить прокси по своему вкусу, статей на тему разнообразных настроек Squid достаточно.
Например, и вот как настроить анализатор логов lightsquid и web-server lighthttpd, а также закрыть доступ к
lightsquid паролем. В конечном итоге если вдруг будет надо, я смогу предоставить свои конфиги.
7. Издаем команду:
ebtables -t broute -A BROUTING -p IPv4 --ip-destination-port 80 -j redirect --redirect-target ACCEPT
8. Еще одну:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 ! -d 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
заворачиваем пакты из нашей подсети (исключая адресованные в подсеть головного офиса) на порт сквида.
9. Смотрим:
tail -f /var/log/squid3/access.log
Если видим изменяющиеся значения, значит все ОК - http трафик заворачивается на squid.
10. При настройке squid я не хотел настраивать фильтрацию https, т.к. нашел в сети множество отзывов с проблемами реализации (подмена squid-ом ssl сертификатов - ssl bump). В связи с этим было принято решение блокировать неугодные адреса с помощью iptables используя ipset.
Узнаем у Google ip-адреса неугодных ресурсов:
# dig @google-public-dns-a.google.com. mail.yandex.ru
; <<>> DiG 9.8.1-P1 <<>> @google-public-dns-a.google.com. mail.yandex.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48890
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mail.yandex.ru. IN A
;; ANSWER SECTION:
mail.yandex.ru. 3077 IN A 87.250.250.25
mail.yandex.ru. 3077 IN A 93.158.134.25
mail.yandex.ru. 3077 IN A 213.180.193.25
mail.yandex.ru. 3077 IN A 213.180.204.25
;; Query time: 70 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 30 19:04:45 2014
;; MSG SIZE rcvd: 96
; <<>> DiG 9.8.1-P1 <<>> @google-public-dns-a.google.com. mail.yandex.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48890
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mail.yandex.ru. IN A
;; ANSWER SECTION:
mail.yandex.ru. 3077 IN A 87.250.250.25
mail.yandex.ru. 3077 IN A 93.158.134.25
mail.yandex.ru. 3077 IN A 213.180.193.25
mail.yandex.ru. 3077 IN A 213.180.204.25
;; Query time: 70 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Jan 30 19:04:45 2014
;; MSG SIZE rcvd: 96
11. Ставим ipset:
apt-get install ipset
Добавляем сеты...
a.Создаем список:
ipset -N ip_set_1 iphash
b.Добавляем адреса в сет:
ipset -A
ip_set_1
87.250.250.25
ipset -A ip_set_1 93.158.134.25
ipset -A ip_set_1 93.158.134.25
pset -A
ip_set_1
213.180.193.25
ipset -A
ip_set_1
213.180.204.25
c.Можно делать сеты для сетей:
ipset -N net_set_1 nethash
d.Добавляем сети в сет:
ipset -A
net_set_1 1.1.1.1/32
ipset -A net_set_1 2.2.2.2/24
ipset -A net_set_1 2.2.2.2/24
e.Также можем создать сет для привелегированных пользователей нашей сети:
ipset -N managers iphash
f.Добавляем адреса в сет:
ipset -A
managers
192.168.1.111
ipset -A managers 192.168.1.222
ipset -A managers 192.168.1.222
Просмотреть сеты можно командой:
ipset -L
g.Запретим доступ к яндекс почте нашей сети, кроме адресов входящих в managers:
iptables -A FORWARD -m set ! --match-set managers src -p tcp -m tcp -m set --match-set
ip_set_1
dst --dport 443 -j DROP
e.Запретим доступ к сетям указанных в сете
net_set_1:
iptables -A FORWARD -m set ! --match-set managers src -p tcp -m tcp -m set --match-set
net_set_1
dst --dport 443 -j DROP
h.Сохраним наши сеты.
Cоздадим файл:
touch /directory/directory2/ipset-save
i.Скомандуем:
ipset -S >
/directory/directory2/ipset-save
(При каждом изменении в сеты сохраняемся.)
j.Устраиваем автозагрузку.
Открываем /etc/rc.local и добавляем в него строку:
cat /directory/directory2/ipset-save | /usr/sbin/ipset -R
12. Назначим наименьший приоритет задержки пакетам наиболее нуждающимся в нем:
iptables -A OUTPUT -t mangle -p udp -m multiport --dport 53,5060 -j TOS --set-tos Minimize-Delay
iptables -A FORWARD -t mangle -p tcp -m tcp -d 192.168.0.0/24 -j TOS --set-tos 0x10/0x3f
iptables -A FORWARD -t mangle -p udp -m udp -d 192.168.0.0/24 -j TOS --set-tos 0x10/0x3f
13.Смотрим вывод:
iptables-save
и далее настраиваем автозапуск правил по своему вкусу.
14. Шейпер.
Для начала следует здраво понимать, что ограничиваться, и попадать в очередь (шейпиться), могут только исходящие с интерфейса пакеты, а не входящие т.к. они уже пришли на интерфейс. Соответственно имея устройство с двумя сетевыми интерфейсами, и соответствующим образом настроенным шейпером можно управлять пропускной способностью канала.
a.Перейдем в свою директорию (работаем от рута, как вы заметили):
cd /home/user
b.Скачиваем скрипт htb.init:
wget http://switch.dl.sourceforge.net/project/htbinit/HTB.init/0.8.5/htb.init-v0.8.5
c.Переименуeм покороче наш скрипт:
mv
htb.init-v0.8.5
htb
и переместим куда следует:
cp htb /usr/sbin
d.сделаем скрипт исполняемым:
chmod +x /usr/sbin/htb
e.теперь создадим файлы и директории необходимые для работы скрипта:
mkdir /etc/sysconfig
mkdir /etc/sysconfig/htb
touch /var/cache/htb.init
mkdir /etc/sysconfig/htb
touch /var/cache/htb.init
f.начнем писать конфиги для нашего шейпера. перейдем:
cd /etc/sysconfig/htb
g.Создаем конфигурационные файлы (eth0 смотрит в 100Gb порт роутера, eth1 в гигабитный порт свитча):
Для исходящего трафика:sudo touch eth0 # Описываем интерфейс eth0
sudo nano eth0
DEFAULT=10 # метка на файл, создаваемый ниже, eth0-2:10.dfl
R2Q=100 # точность ограничений
sudo touch eth0-2.root # корневой класс
sudo nano eth0-2.root
RATE=100Mbit # гарантированная пропускная способность
CEIL=100Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
sudo touch eth0-2:10.dfl # сюда попадает трафик, не попадающий ни в одно из правил ниже
sudo nano eth0-2:10.dfl
RATE=1024Kbit # гарантированная пропускная способность
CEIL=99Mbit # максимальная пропускная способность
LEAF=sfq # равномерное распределение между участниками очереди.
sudo touch eth0-2:20.rdp # гарантированный канал для rdp
sudo nano eth0-2:20.rdp
RATE=1Mbit # гарантированная пропускная способность
CEIL=2Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
LEAF=sfq # равномерное распределение между участниками очереди.
RULE=*:3389 # Применять правило для трафика, у которого исходящий порт 3389
MARK=100 # Метка для исходящего трафика (входящий нарезается нормально и без меток).
Маркируем трафик RDP:
iptables -t mangle -A PREROUTING -s 192.168.1.5 -j MARK --set-mark 100
Соответсвенно
192.168.1.5 адрес терминального сервера.
Для входящего трафика:
sudo nano eth1
DEFAULT=10 # метка на файл, создаваемый ниже, eth1-2:10.dfl
R2Q=100 # точность ограничений
sudo touch eth1-2.root # корневой класс
sudo nano eth1-2.root
RATE=330Mbit # гарантированная пропускная способность
CEIL=330Mbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
sudo touch eth1-2:10.dfl # сюда попадает трафик, не попадающий ни в одно из правил ниже
sudo nano eth1-2:10.dfl
RATE=1024Kbit # гарантированная пропускная способность
CEIL=300Mbit # максимальная пропускная способность
LEAF=sfq # равномерное распределение между участниками очереди.
PRIO=2 # PRIO задает приоритет класса трафика (1- максимальный, чем больше число — тем меньшt приоритет).
sudo touch eth1-2:20.rdp # гарантированный канал для rdp
sudo nano eth1-2:20.rdp
RATE=1024Kbit # гарантированная пропускная способность
CEIL=2048Kbit # максимальная пропускная способность
BURST=15k # первые 15k без ограничений
LEAF=sfq # равномерное распределение между участниками очереди.
RULE=*:3389 # Применять правило для трафика, у которого порт назначения - rdp-порт
PRIO=1
sudo touch eth1-2:30.100 # ограничиваем скорость для ip 192.168.1.100
sudo nano eth1-2:30.100
RATE=64Kbit # гарантированная пропускная способность
CEIL=64Kbit
# максимальная пропускная способность
BURST=15k # максимальная пропускная способность
LEAF=sfq # равномерное распределение между участниками очереди.
RULE= 192.168.1.100
PRIO=3
Осталось запустить скрипт:
htb compile # тест. можно посмотреть какие правила будут сформированы и ошибки, если есть.
htb start # запуск
htb stop # остановка
htb restart # перезапуск после внесения изменений в файлы конфигурации
LEAF=sfq # равномерное распределение между участниками очереди.
RULE= 192.168.1.100
PRIO=3
Осталось запустить скрипт:
htb compile # тест. можно посмотреть какие правила будут сформированы и ошибки, если есть.
htb start # запуск
htb stop # остановка
htb restart # перезапуск после внесения изменений в файлы конфигурации
При вышеописанной настройке мы добились того, что канал делится между всеми поровну исходя из заданных значений.
Максимальный приоритет у входящего и исходящего RDP-трафика (удаленные приложения Remote App также используют этот протокол).
IP-адрес 192.168.1.100 ограничен во входящей скорости до 64 kb/sec, в исходящей скорости ограничений нет.
Подробнее о работе htb.init можно почитать по следующим ссылкам:
и вообще найти что-то поиском.
15. Графики за N-период по работе сервера:
16. Отчет Lightsquid:
воскресенье, 15 декабря 2013 г.
wondershaper
Т.К. на моем микросервере перманентно раздаются/скачиваются торренты, я решил облечить себе существование в плане безтормозного промотра страничек и использования RDP, шэйпером в виде Wondershaper.
Итак:
1. Ставим wondershaper:
apt-get install wondershaper
2. Отключаем все сетевые сервисы и замеряем скорость канала с помощью любого сервиса в сети (например: http://2ip.ru/speed/). У меня download 4800 upload 550
3. Описываем для wondershaper свой канал (для нужного интерфейса, в моем случае ppp0), задаем значения чуть меньше:
wondershaper ppp0 4400 500
Все шейпер работает.
4. В конфиге описывает сервисы для наибольшего приоритета
nano /sbin/wondershaper
(у меня так):
NOPRIOPORTSRC="22 8112" #сервисы на моем сервере
NOPRIOPORTDST="80 443 3389" #удаленные сервисы
5. Чтобы отменить шейпинг вводим команду:
wondershaper clear ppp0
6. Чтобы постоянно не запускать шейпер после рестарта делаем скрипт вида:
#!/bin/sh
wondershaper ppp0 4400 500
7. делаем его исполняемым:
chmod +x /your_folder/your_name_of_skript.sh
8. Чтобы скрипт стартовал при старте сети добавляем строчку в /etc/network/interfaces:
post-up /your_folder/your_name_of_skript.sh
Все, скрипт будет запускаться при загрузке системы.
Итак:
1. Ставим wondershaper:
apt-get install wondershaper
2. Отключаем все сетевые сервисы и замеряем скорость канала с помощью любого сервиса в сети (например: http://2ip.ru/speed/). У меня download 4800 upload 550
3. Описываем для wondershaper свой канал (для нужного интерфейса, в моем случае ppp0), задаем значения чуть меньше:
wondershaper ppp0 4400 500
Все шейпер работает.
4. В конфиге описывает сервисы для наибольшего приоритета
nano /sbin/wondershaper
(у меня так):
NOPRIOPORTSRC="22 8112" #сервисы на моем сервере
NOPRIOPORTDST="80 443 3389" #удаленные сервисы
5. Чтобы отменить шейпинг вводим команду:
wondershaper clear ppp0
6. Чтобы постоянно не запускать шейпер после рестарта делаем скрипт вида:
#!/bin/sh
wondershaper ppp0 4400 500
7. делаем его исполняемым:
chmod +x /your_folder/your_name_of_skript.sh
8. Чтобы скрипт стартовал при старте сети добавляем строчку в /etc/network/interfaces:
post-up /your_folder/your_name_of_skript.sh
Все, скрипт будет запускаться при загрузке системы.
суббота, 16 ноября 2013 г.
MRTG
0. Уже должен быть установлен web-сервер.
1. Ставим: aptitude install mrtg snmpd
2. в конфиге /etc/snmp/snmpd.conf
добавим строку:
com2sec readonly default public
3. Перезапускаем:
/etc/init.d/snmpd restart
4. Добавляем в крон:
*/05 * * * * USER if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log; fi
5. Добавляем устройства которые хотим мониторить, например:
cfgmaker public@127.0.0.1 >> /etc/mrtg.cfg
на устройствах должен работать snmp.
Через пять минут по адресу http://yourhost/mrtg сможем наблюдать график.
6. Можем наблюдать загрузку процессора, его температуру, загрузку оперативной памяти и swap, заполненность жесткого диска, температуру жесткого диска.
a1) загрузка CPU - скрипт
#!/bin/sh
sensors | grep -A 1 'Core 0' | awk '{print $3-0 }'
а2) часть в mrtg.cfg
Target[cpu]: `/usr/bin/awk '/cpu /{print $2+$3; print $2+$3+$4; print "Some_time";print "localhost"}'</proc/stat`
Title[cpu]: CPU usage
PageTop[cpu]: <H1>CPU Usage</H1>
MaxBytes[cpu]: 200 #двухядерный процессор
ShortLegend[cpu]: %
YLegend[cpu]: CPU Usage
Legend1[cpu]: Time spent in user mode
Legend2[cpu]: Time spent in user + system mode
LegendI[cpu]: user:
LegendO[cpu]: system:
Options[cpu]: growright,nopercent,transparent,pngdate,noinfo
Unscaled[cpu]: ymwd
b1) температура CPU - скрипт
#!/bin/sh
sensors | grep -A 1 'Core 0' | awk '{print $3-0 }'
b2) часть в mrtg.cfg
#cpu_temp
Target[cpu_temp]: `/home/USER/mrtg/cpu_temp.sh`
Title[cpu_temp]: CPU Temperature
PageTop[cpu_temp]: <h1>CPU Temperature</h1>
MaxBytes[cpu_temp]: 100
ShortLegend[cpu_temp]: C
YLegend[cpu_temp]: Temperature, C
LegendI[cpu_temp]: Core 1
LegendO[cpu_temp]: Core 2
Legend1[cpu_temp]: Core 1
Legend2[cpu_temp]: Core 2
Options[cpu_temp]: gauge,growright,nopercent
#kMG[cpu_temp]: k,M,G,T,P,X
Colours[cpu_temp]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
Unscaled[cpu_temp]: ymwd
c1) загрузка оперативки и своп - скрипт
#!/bin/sh
/usr/bin/free -k | awk '\
NR==3 {ramUsed = $3 }\
NR==4 {swapUsed = $3 }\
END { print swapUsed "\n" ramUsed "\n0\n0" }'
c2) часть в mrtg.cfg
#memory_usage
Target[localmem]: `/home/USER/mrtg/memstat.sh`
Title[localmem]: Mem and Swap Usage
PageTop[localmem]: <h1>Memory and Swap Usage</h1>
MaxBytes[localmem]: 100000000000
ShortLegend[localmem]: B
YLegend[localmem]: Memory&Swap
LegendI[localmem]: Swap
LegendO[localmem]: Memory
Legend1[localmem]: Swap
Legend2[localmem]: Memory
Options[localmem]: gauge,growright,nopercent
kMG[localmem]: k,M,G,T,P,X
Colours[localmem]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
d1) заполненость жесткого диска
#! /bin/bash
df -h | grep "/dev/sd" | grep -Po "[0-9]+(?=%)"
d2) часть в mrtg.cfg
#hdd
Target[hdd]: `/home/USER/mrtg/disk.sh`
Title[hdd]: HDD Usage
PageTop[hdd]: <h1>1 Tb HDD Usage</h1>
MaxBytes[hdd]: 100
ShortLegend[hdd]: %
YLegend[hdd]: Percent
Legend1[hdd]: 100%
Legend2[hdd]: Time spent in user + system mode
LegendI[hdd]: Usage:
#LegendO[hdd]: :
Options[hdd]: gauge,growright,nopercent
Colours[hdd]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
Unscaled[hdd]: ymwd
e1) температура жесткого диска -скрипт
#!/bin/bash
sudo hddtemp -n /dev/sda #hddtemp без sudo не работает
e2) часть в mrtg.cfg
#hdd temp
Target[hddtemp]: `/home/USER/mrtg/hdd_temp.sh`
Title[hddtemp]: HDD Temp
PageTop[hddtemp]: <h1>HDD Temperature</h1>
MaxBytes[hddtemp]: 110
ShortLegend[hddtemp]: C
YLegend[hddtemp]: Temperature, C
Legend1[hddtemp]: Temp HDD
Legend2[hddtemp]: Temp HDD 2
#LegendI[hddtemp]:Temp HDD 3
Options[hddtemp]: gauge,growright,nopercent
#kMG[hddtemp]: k,M,G,T,P,X
Colours[hddtemp]: VIOLET#ff00ff,RED#bb0000,BLUE#1000ff,GREEN#006600
Unscaled[hddtemp]: ymwd
7. все скрипты должны быть исполняемыми, например:
chmod +x /home/USER/mrtg/hdd_temp.sh
чтобы графики рисовались справо-налево раскомментируем в /etc/mrtg.cfg строку
Options[_]: growright, bits
после заполнения mrtg.cfg делаем:
indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
если вылезают ошибки - исправляем.
8. Если все ок, по адресу http://yourhost/mrtg через какое-то время сможем увидеть примерно следующее:
1. Ставим: aptitude install mrtg snmpd
2. в конфиге /etc/snmp/snmpd.conf
добавим строку:
com2sec readonly default public
3. Перезапускаем:
/etc/init.d/snmpd restart
4. Добавляем в крон:
*/05 * * * * USER if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log; fi
5. Добавляем устройства которые хотим мониторить, например:
cfgmaker public@127.0.0.1 >> /etc/mrtg.cfg
на устройствах должен работать snmp.
Через пять минут по адресу http://yourhost/mrtg сможем наблюдать график.
6. Можем наблюдать загрузку процессора, его температуру, загрузку оперативной памяти и swap, заполненность жесткого диска, температуру жесткого диска.
a1) загрузка CPU - скрипт
#!/bin/sh
sensors | grep -A 1 'Core 0' | awk '{print $3-0 }'
а2) часть в mrtg.cfg
Target[cpu]: `/usr/bin/awk '/cpu /{print $2+$3; print $2+$3+$4; print "Some_time";print "localhost"}'</proc/stat`
Title[cpu]: CPU usage
PageTop[cpu]: <H1>CPU Usage</H1>
MaxBytes[cpu]: 200 #двухядерный процессор
ShortLegend[cpu]: %
YLegend[cpu]: CPU Usage
Legend1[cpu]: Time spent in user mode
Legend2[cpu]: Time spent in user + system mode
LegendI[cpu]: user:
LegendO[cpu]: system:
Options[cpu]: growright,nopercent,transparent,pngdate,noinfo
Unscaled[cpu]: ymwd
b1) температура CPU - скрипт
#!/bin/sh
sensors | grep -A 1 'Core 0' | awk '{print $3-0 }'
b2) часть в mrtg.cfg
#cpu_temp
Target[cpu_temp]: `/home/USER/mrtg/cpu_temp.sh`
Title[cpu_temp]: CPU Temperature
PageTop[cpu_temp]: <h1>CPU Temperature</h1>
MaxBytes[cpu_temp]: 100
ShortLegend[cpu_temp]: C
YLegend[cpu_temp]: Temperature, C
LegendI[cpu_temp]: Core 1
LegendO[cpu_temp]: Core 2
Legend1[cpu_temp]: Core 1
Legend2[cpu_temp]: Core 2
Options[cpu_temp]: gauge,growright,nopercent
#kMG[cpu_temp]: k,M,G,T,P,X
Colours[cpu_temp]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
Unscaled[cpu_temp]: ymwd
c1) загрузка оперативки и своп - скрипт
#!/bin/sh
/usr/bin/free -k | awk '\
NR==3 {ramUsed = $3 }\
NR==4 {swapUsed = $3 }\
END { print swapUsed "\n" ramUsed "\n0\n0" }'
c2) часть в mrtg.cfg
#memory_usage
Target[localmem]: `/home/USER/mrtg/memstat.sh`
Title[localmem]: Mem and Swap Usage
PageTop[localmem]: <h1>Memory and Swap Usage</h1>
MaxBytes[localmem]: 100000000000
ShortLegend[localmem]: B
YLegend[localmem]: Memory&Swap
LegendI[localmem]: Swap
LegendO[localmem]: Memory
Legend1[localmem]: Swap
Legend2[localmem]: Memory
Options[localmem]: gauge,growright,nopercent
kMG[localmem]: k,M,G,T,P,X
Colours[localmem]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
d1) заполненость жесткого диска
#! /bin/bash
df -h | grep "/dev/sd" | grep -Po "[0-9]+(?=%)"
d2) часть в mrtg.cfg
#hdd
Target[hdd]: `/home/USER/mrtg/disk.sh`
Title[hdd]: HDD Usage
PageTop[hdd]: <h1>1 Tb HDD Usage</h1>
MaxBytes[hdd]: 100
ShortLegend[hdd]: %
YLegend[hdd]: Percent
Legend1[hdd]: 100%
Legend2[hdd]: Time spent in user + system mode
LegendI[hdd]: Usage:
#LegendO[hdd]: :
Options[hdd]: gauge,growright,nopercent
Colours[hdd]: RED#bb0000,BLUE#1000ff,GREEN#006600,VIOLET#ff00ff
Unscaled[hdd]: ymwd
e1) температура жесткого диска -скрипт
#!/bin/bash
sudo hddtemp -n /dev/sda #hddtemp без sudo не работает
e2) часть в mrtg.cfg
#hdd temp
Target[hddtemp]: `/home/USER/mrtg/hdd_temp.sh`
Title[hddtemp]: HDD Temp
PageTop[hddtemp]: <h1>HDD Temperature</h1>
MaxBytes[hddtemp]: 110
ShortLegend[hddtemp]: C
YLegend[hddtemp]: Temperature, C
Legend1[hddtemp]: Temp HDD
Legend2[hddtemp]: Temp HDD 2
#LegendI[hddtemp]:Temp HDD 3
Options[hddtemp]: gauge,growright,nopercent
#kMG[hddtemp]: k,M,G,T,P,X
Colours[hddtemp]: VIOLET#ff00ff,RED#bb0000,BLUE#1000ff,GREEN#006600
Unscaled[hddtemp]: ymwd
7. все скрипты должны быть исполняемыми, например:
chmod +x /home/USER/mrtg/hdd_temp.sh
чтобы графики рисовались справо-налево раскомментируем в /etc/mrtg.cfg строку
Options[_]: growright, bits
после заполнения mrtg.cfg делаем:
indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
если вылезают ошибки - исправляем.
8. Если все ок, по адресу http://yourhost/mrtg через какое-то время сможем увидеть примерно следующее:
пятница, 27 сентября 2013 г.
FTP сервер proftpd (установка и настройка).
Возникла надобность обменяться файлами с друзьями. Решил, что лучше всего для выполнения этой задачи подойдет FTP сервер. Сказано - сделано. Поехали.
Оговорка: сервер не находится за NAT, порт смотрит прямо в инет.
1. Устанавливаем proftpd:
apt-get install proftpd
В процессе установки выбираем standalone.
2. Добавим нашего ftp юзера, одновременно запрещая ему доступ к shell:
adduser guest --shell /bin/false
3. Дадим полные права на домашний каталог (с правами будем разбираться в конфиге):
chmod 777 -R /home/guest
4. Откроем proftpd.conf и начнем настройку proftpd:
nano /etc/proftpd/proftpd.conf
тут я опишу что у меня отличается от дефолтного proftpd.conf
DefaultRoot /home/guest # "запираем" пользователя guest в своем каталоге
Port 21 #стандартный FTP порт, его надо открыть или изменить на тот который нравится, в этом случае на стороне клиента придется его указать.
RequireValidShell off # запрещаем shell
PassivePorts 49555 49556 #открываем произвольные порты, нужно для пассивного режима, если FTP клиент в активном режиме, то можно этого не делать
запрещаем юзеру удалять и записывать в домашний католог и вложенные в него (тут можно варьировать, изменяя пути к каталогам и лимиты):
<Directory /home/guest/*>
<Limit DELE WRITE>
DenyAll
</Limit>
</Directory>
Для того, чтобы в логах proftpd отображалось правильное время добавим строки:
TimesGMT off
SetEnv TZ :/etc/localtime
Сохраняем, выходим.
5. Корректно выставляем время:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
6. Проверяем:
ls -l /etc/localtime
7. Перезапускаем proftpd
/etc/init.d/proftpd restart
Если нужные порты открыты, то все должно заработать.
Оговорка: сервер не находится за NAT, порт смотрит прямо в инет.
1. Устанавливаем proftpd:
apt-get install proftpd
В процессе установки выбираем standalone.
2. Добавим нашего ftp юзера, одновременно запрещая ему доступ к shell:
adduser guest --shell /bin/false
3. Дадим полные права на домашний каталог (с правами будем разбираться в конфиге):
chmod 777 -R /home/guest
4. Откроем proftpd.conf и начнем настройку proftpd:
nano /etc/proftpd/proftpd.conf
тут я опишу что у меня отличается от дефолтного proftpd.conf
DefaultRoot /home/guest # "запираем" пользователя guest в своем каталоге
Port 21 #стандартный FTP порт, его надо открыть или изменить на тот который нравится, в этом случае на стороне клиента придется его указать.
RequireValidShell off # запрещаем shell
PassivePorts 49555 49556 #открываем произвольные порты, нужно для пассивного режима, если FTP клиент в активном режиме, то можно этого не делать
запрещаем юзеру удалять и записывать в домашний католог и вложенные в него (тут можно варьировать, изменяя пути к каталогам и лимиты):
<Directory /home/guest/*>
<Limit DELE WRITE>
DenyAll
</Limit>
</Directory>
Для того, чтобы в логах proftpd отображалось правильное время добавим строки:
TimesGMT off
SetEnv TZ :/etc/localtime
Сохраняем, выходим.
5. Корректно выставляем время:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
6. Проверяем:
ls -l /etc/localtime
7. Перезапускаем proftpd
/etc/init.d/proftpd restart
Если нужные порты открыты, то все должно заработать.
понедельник, 2 сентября 2013 г.
Фортунки :)
Узнал на каком-то из форумов, что можно установить пакет
fortunes-ubuntu-server
, который будет показывать разные полезные советы - "фортунки" по Убунту/Линукс. Собственно с помощью этого пакета можно выводить сообщения RSS лент, новости, погоду и т.д.
Меня все же больше интересуют советы по Линукс.
1. Ставим:
apt-get install fortunes-ubuntu-server fortunes fortunes-min fortune-mod fortunes-ru
Проверим:
/usr/bin/ubuntu-server-tip
фортунка должна быть на английском, но нам бы хотелось на русском...
2. Подправим файл /usr/bin/ubuntu-server-tip
на всякий случай я закоментил строку
#FORTUNEDB="ubuntu-server-tips"
и внес другую
FORTUNEDB="ubuntu-server-tips-ru"
3. Проверим:
/usr/bin/ubuntu-server-tip
должно быть на русском.
4. Изначально я хотел не просто читать фортунки, а чтобы они выводились при залогинивании в системе. Для этого:
nano /home/your_name/.profile
в конец внесем строчку:
/usr/bin/ubuntu-server-tip
5. выйдем и залогинимся вновь, теперь нас должна встретить фортунка:
P.S. Так например, с помощью одной из фортунок я узнал о существавании консольного браузера w3m. Наличие которого, полагаю может помочь в трудную минуту.
Вводим в консоли:
w3m http://google.ru
Видим вывод гугла после ввода поискового запроса, кстати в яндексе поиск не заработал.
Меня все же больше интересуют советы по Линукс.
1. Ставим:
apt-get install fortunes-ubuntu-server fortunes fortunes-min fortune-mod fortunes-ru
Проверим:
/usr/bin/ubuntu-server-tip
фортунка должна быть на английском, но нам бы хотелось на русском...
2. Подправим файл /usr/bin/ubuntu-server-tip
на всякий случай я закоментил строку
#FORTUNEDB="ubuntu-server-tips"
и внес другую
FORTUNEDB="ubuntu-server-tips-ru"
3. Проверим:
/usr/bin/ubuntu-server-tip
должно быть на русском.
4. Изначально я хотел не просто читать фортунки, а чтобы они выводились при залогинивании в системе. Для этого:
nano /home/your_name/.profile
в конец внесем строчку:
/usr/bin/ubuntu-server-tip
5. выйдем и залогинимся вновь, теперь нас должна встретить фортунка:
P.S. Так например, с помощью одной из фортунок я узнал о существавании консольного браузера w3m. Наличие которого, полагаю может помочь в трудную минуту.
Вводим в консоли:
w3m http://google.ru
Видим вывод гугла после ввода поискового запроса, кстати в яндексе поиск не заработал.
Подписаться на:
Сообщения (Atom)
