пятница, 24 июля 2015 г.

iptables внутри lxc-контейнера

Чтобы iptables завелся внутри lxc-контейнера делаем на хосте:

# mkdir /var/lib/lxc/NAME/rootfs/lib/modules
# echo "iptable_filter" >> /etc/modules


и в конфиг контейнера:

lxc.mount.entry = /lib/modules /var/lib/lxc/NAME/rootfs/lib/modules none ro,bind 0 0

понедельник, 20 июля 2015 г.

Сборка Asterisk 13.x на Debian 8

====== Сборка Asterisk 13.x на Debian 8 ======

Устанавливаем необходимые зависимости:
# aptitude install build-essential libncurses5-dev libssl-dev libxml2-dev uuid-dev libsqlite3-dev libjansson-dev

Дополнительно:
* libnewt-dev - альтернативный интерфейс make menuselector
* libsrtp0-dev - если планируется использовать SRTP (res_srtp.so)
* libspeexdsp-dev - для сборки кодека Speex (codec_speex.so)

Качаем, распаковываем исходники и конфигурируем:
$ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
$ tar -zxvf asterisk*
$ cd ./asterisk*
$ ./configure
$ make menuselect


Минимальный набор модулей:
app_dial.so Dialing Application
bridge_native_rtp.so Native RTP bridging module
bridge_simple.so Simple two channel bridging module
chan_sip.so Session Initiation Protocol (SIP)
codec_alaw.so A-law Coder/Decoder
codec_gsm.so GSM Coder/Decoder
format_gsm.so Raw GSM data
format_pcm.so Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU)
pbx_config.so Text Extension Configuration
res_crypto.so Cryptographic Digital Signatures
res_http_websocket.so HTTP WebSocket Support
res_rtp_asterisk.so Asterisk RTP Stack
res_security_log.so Security Event Logging
res_srtp.so Secure RTP (SRTP)


Для IAX2-транков:
chan_iax2.so Inter Asterisk eXchange (Ver 2)
res_timing_timerfd.so Timerfd Timing Interface


Для AEL:
pbx_ael Asterisk Extension Language Compiler
res_ael_share share-able code for AEL


Дополнительные модули:
app_echo.so Simple Echo Application
app_playback.so Sound File Playback Application
codec_speex.so Speex Coder/Decoder
res_musiconhold.so Music On Hold Resource


$ make
# make install
# make config
# make install-logrotate


=== Запуск сервиса от пользователя asterisk ===
# adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk

/opt/bin/chown_asterisk.sh:
#!/bin/sh
chown -R asterisk:asterisk /var/lib/asterisk/
chown -R asterisk:asterisk /var/log/asterisk/
chown -R asterisk:asterisk /var/run/asterisk/
chown -R asterisk:asterisk /var/spool/asterisk/


/etc/default/asterisk:
AST_USER="asterisk"
AST_GROUP="asterisk"


/etc/logrotate.d/asterisk:
create 640 asterisk asterisk

среда, 16 мая 2012 г.

Кэширующий DNS-server на Debian

Предположим есть машина со свежеустановленным Debian. Доустанавливаем необходимые пакеты:

# aptitude install bind9 vlan

Далее настраиваем сеть. В моей ситуации имеется два VLAN'а: один смотрит во внешку (VLANID 20), второй во внутреннюю сервисную сеть (VLANID 10):

# cat /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 0.0.0.0

# Managment
auto vlan10
iface vlan10 inet static
  address 10.10.0.10
  netmask 255.255.0.0
  vlan_raw_device eth0

# Link to world
auto vlan20
iface vlan20 inet static
  address x.x.x.x
  netmask 255.255.255.252
  gateway x.x.x.y
  dns-nameservers 127.0.0.1
  vlan_raw_device eth0


Приступаем к настройке bind'а:

# cat /etc/bind/named.conf.options

acl ournets {
  127.0.0.1;
  x.x.x.x/24;
  y.y.y.y/24;
  z.z.z.z/24;
};

options {
  directory "/var/cache/bind";

  dnssec-validation auto;

  auth-nxdomain no; # conform to RFC1035
  listen-on-v6 { none; };

  listen-on {127.0.0.1; x.x.x.x;};
  allow-query {"ournets";};
};


В acl ournets {} перечислены сети, которым разрешено делать запросы - опция allow-query {"ournets";}. В listen-on {} задаются интерфейсы, на которых нужно слушать запросы. Также проверим что у нас прописаны корневые серверы в файле named.conf.default-zones:

zone "." {
  type hint;
  file "/etc/bind/db.root";
};


Перечитаем настройки:

# /etc/init.d/bind9 reload

Проверяем:

# nslookup ya.ru localhost
Server: localhost
Address: 127.0.0.1#53

Non-authoritative answer:
Name: ya.ru
Address: 87.250.251.3
Name: ya.ru
Address: 93.158.134.3
Name: ya.ru
Address: 93.158.134.203
Name: ya.ru
Address: 213.180.193.3
Name: ya.ru
Address: 213.180.204.3
Name: ya.ru
Address: 77.88.21.3
Name: ya.ru
Address: 87.250.250.3
Name: ya.ru
Address: 87.250.250.203


Осталось настроить iptables. Я просто разрешаю domain запросы извне и ssh из сервисной сети. Для удобства правила пропишем в init-скрипте:

# cat /etc/init.d/iptables
PATH='/sbin'

case "$1" in
start)
echo "Starting iptables"

iptables -F

iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p icmp -j ACCEPT

iptables -A INPUT -i vlan10 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -i vlan20 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i vlan20 -p udp --dport 53 -j ACCEPT
;;

stop)
echo "Stopping iptables"

iptables -F

iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
;;

*)
echo "Usage: /etc/init.d/iptables {start|stop}"
exit 1
;;
esac

exit 0


Делаем его исполняемым и запускаем:

# chmod +x /etc/init.d/iptables
# update-rc.d iptables defaults
#
# /etc/init.d/iptables start


Все.

Источники:
http://irternus.blogspot.com/2012/01/bind9-dns.html
http://www.linuxgeek.ru/2011/01/iptables-debian.html

Update: В последних версиях Debian лучше использовать пакет iptables-persistent вместо самописного скрипта

понедельник, 12 марта 2012 г.

Устанавливаем локаль en_RU

Многие предпочитают локаль en_US.UTF-8, но не всем удобна американская система велечин, дат и т.п. Установка таких переменных как LC_TIME не всеми приложениями адекватно воспринимается. На помощь приходит локаль en_RU.UTF-8.

1. Скачиваем саму локаль и кладем ее рядом с остальными:

# curl http://catap.ru/stuff/en_RU > /usr/share/i18n/locales/

2. Прописываем её:

# echo "en_RU.UTF-8 UTF-8" >> /usr/share/i18n/SUPPORTED

В Debian также пришлось прописать:

# echo "en_RU.UTF-8 UTF-8" >> /etc/locale.gen

а в Ubuntu:

# echo "en_RU.UTF-8 UTF-8" >> /var/lib/locales/supported.d/en

и пересобирать локали:

# locale-gen

3. Переконфигурируем пакет с локалями:

# dpkg-reconfigure locales

Debian мне предложил выбрать локаль по умолчанию. В Ubuntu же придется вносить

LANG=en_RU.UTF-8

вручную в файл /etc/default/locale для всей системы, либо для отдельного пользователя через export в ~/.profile

4. Перелогиниваемся и проверяем

Источники:
http://catap.ru/blog/2009/09/03/en_ru-install-to-your-system/
http://ubuntudrom.blogspot.com/2010/04/enru.html

среда, 7 марта 2012 г.

Собираем Java в deb-пакет

Как известно, в Debian недавно перестали собирать пакеты Java от Oracle. На помощь приходит скрипт java-package:

1. Ставим пакеты необходимые пакеты:

# apt-get install debhelper fakeroot

2. Скачиваем сам скрипт java-package:

$ git clone git@github.com:cedricpineau/java-package.git && cd java-package

3. Скачиваем нужный архив Java SE JRE или JDK

4. Собираем пакет:

$ J2SE_PACKAGE_LIBDIR=./lib ./make-jpkg downloaded-archive

5. Ставим:

# dpkg -i oracle-java6-*.deb

p.s. Для Ubuntu есть специальный репозиторий: ppa:ferramroberto/java

суббота, 7 августа 2010 г.

Использование sudо без пароля

1. Если не стоит sudo, то ставим его:

# aptitude install sudo

2. Добавляем пользователя в группу sudo (вместо username пишем свой логин):

# adduser username sudo

3. В файле /etc/sudoers раскомментируем группу sudo:

%sudo ALL=NOPASSWD: ALL

Это позволит пользователям, входящим в группу sudo, выполнять привилегированные операции без ввода пароля.

P.S. За удобство вы платите безопасностью системы - я предупредил.

среда, 23 июня 2010 г.

Удобные алиасы для работы с пакетами

Добавляем алиасы в ~/.bashrc:

alias apu='sudo aptitude update'
alias apf='sudo aptitude full-upgrade'
alias app='sudo aptitude purge'
alias api='sudo aptitude install'
alias aps='aptitude search'
alias apv='apt-cache policy'