Соединяем сети между Debian и OpenBSD средствами OpenVPN

Без всяких вступлений и тп перейду сразу к делу! Соединяю 2 маршрутизатора. Один под управлением OpenBSD 4.6, а второй с Debian Lenny.
Задача:
увидеть внутреннюю сеть за сервером OpenBSD

Настройки сети на OpenBSD:

root@openek:~# ifconfig
lo0: flags=8049 mtu 33200
priority: 0
groups: lo
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
xl0: flags=8843 mtu 1500
lladdr 00:50:04:00:44:8d
description: INET
priority: 0
groups: egress
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::250:4ff:fe00:448d%xl0 prefixlen 64 scopeid 0x1
inet 10.0.1.111 netmask 0xffffff00 broadcast 10.0.1.255
nfe0: flags=8843 mtu 1500
lladdr 00:13:8f:9a:c4:52
description: LAN
priority: 0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 192.169.100.2 netmask 0xffffff00 broadcast 192.169.100.255
inet6 fe80::213:8fff:fe9a:c452%nfe0 prefixlen 64 scopeid 0x2
enc0: flags=0<> mtu 1536
priority: 0
pflog0: flags=141 mtu 33200
priority: 0
groups: pflog
root@openek:~#

За OpenBSD есть клиенты, тестить будем на некоем 192.169.100.10 — тоесть всеми силами пытаемся попасть в сетку 192.169.100.0/24 и в частности …. проверить работоспособность соединения на некоей внутресетевой машине 192.169.100.10

Убедимся что машинка видна с OpenBSD сервера:

root@openek:~# ping 192.169.100.10
PING 192.169.100.10 (192.169.100.10): 56 data bytes
64 bytes from 192.169.100.10: icmp_seq=0 ttl=128 time=0.282 ms
64 bytes from 192.169.100.10: icmp_seq=1 ttl=128 time=0.287 ms
64 bytes from 192.169.100.10: icmp_seq=2 ttl=128 time=0.261 ms
--- 192.169.100.10 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.261/0.276/0.287/0.022 ms
root@openek:~#

Итак, подготавливаем все необходимое для создания VPN на OpenBSD.

  • конечно же должно быть включено forwarding …. на всяк случай проверяем:
root@openek:/etc/openvpn# sysctl |grep forward
net.inet.ip.forwarding=1
net.inet.ip.mforwarding=0
net.inet6.ip6.forwarding=0
net.inet6.ip6.mforwarding=0
root@openek:/etc/openvpn#

Если не включено (net.inet.ip.forwarding=0) то разкомментировать эту опцию в /etc/sysctl.conf  и присвоить значение 1. После перезагрузки опция применится. Без перезагрузки эта опция включается от рута командой:

root@openek:/etc/openvpn# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
root@openek:/etc/openvpn#
  • OpenVPN я собирал из исходников (если необходимо — установите/обновите порты!)
root@openek:~# cd /usr/ports/net/openvpn
root@openek:/usr/ports/net/openvpn# make install clean
  • Создал директорию для конфигов и ключей /etc/openvpn
root@openek:~# mkdir /etc/openvpn
  • Перешел в эту директорию и сгенерил ключ для авторизации:
root@openek:~# cd /etc/openvpn

root@openek:/etc/openvpn# openvpn --genkey --secret /etc/openvpn/auth.key

Ключ должен получиться в таком духе:

root@openek:/etc/openvpn# cat auth.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
4e36924d67c8c75df3481776cafc1214
6f9d1ca10858ef708c05d7ef437b7f94
5c0d5d012c1c1467f20355448752e08f
6e64ed241898b6b345e3e75efb64fe76
4224b349bea70c341900ff2b3c259232
5a816deaa7ce3c7dece4edd42edc5585
294e941550b5eb14a6aabf0ba56c9edb
cbea81590f3fdf29b5867eda66b43175
5a8db2d381b027e977e17b76ee215777
fc360af042c515f916634751f9e021e6
7cbc386ac9a71d24cef5127c697a3087
e6702d813c12da1c48d49724b968f7a8
1b910bf4e4f8347df773d2de8d35c988
d0bdec0c80e093a8c8e7f6b5aa41ec4c
d99b2fd1882ec4f83ed8ef1866c74950
84816d6338662618eb72da9506eab493
-----END OpenVPN Static key V1-----
root@openek:/etc/openvpn#
  • рихтуем конфиг до вида:
root@openek:/etc/openvpn# cat openbsd-debian.conf
proto udp
dev tun3
port 5000
comp-lzo
ping 15
verb 3
user _openvpn
group _openvpn
remote 10.0.1.13
ifconfig 10.3.0.2 10.3.0.10
#route 192.168.0.0 255.255.255.0 10.3.0.10
secret /etc/openvpn/auth.key
auth MD5
cipher DES-CBC
tun-mtu 1500
root@openek:/etc/openvpn#

Добавляем в /etc/rc.local такие строчки для автоматического поднятия туннеля OpenVPN:

### <- VPN to Debian -> ###
if [ -x /usr/local/sbin/openvpn ]; then
echo -n ' OpenVPN to Debian'; (sleep 3; /usr/local/sbin/openvpn --config /etc/openvpn/openbsd-debian.conf) &
fi

Ну все …. OpenBSD готов принимать гостей 🙂

Подготавливаем Debian для коннекта к OpenBSD

  • Устанавливаем OpenVPN
black:~# apt-get install openvpn
  • Добавляем пользователя openbsd
black:~# useradd openvpn -s /usr/sbin/nologin
  • Рихтуем конфиг по образу и подобию только что настроенного в OpenBSD
black:/etc/openvpn# cat debian-openbsd.conf
proto udp
dev tun
port 5000
comp-lzo
ping 15
verb 3
user openvpn
group openvpn
remote 10.0.1.111
ifconfig 10.3.0.10 10.3.0.2
route 192.169.100.0 255.255.255.0 10.3.0.2
secret /etc/openvpn/auth.key
auth MD5
cipher DES-CBC
tun-mtu 1500
black:/etc/openvpn#
  • После этого копируем ключ auth.key на Debian любым доступным вам способом. Я закинул с OpenBSD на Debian простым scp. Так как у меня открыто ходка на Debian по ssh под root то закидывал прямо в директорию /etc/openvpn
root@openek:~# scp /etc/openvpn/auth.key root@10.0.1.13:/etc/openvpn
  • Перезапускаем сервис openvpn
black:~# /etc/init.d/openvpn restart

Проверяем что поднялся интерфейс:

black:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:11:2f:63:15:1e
inet addr:10.0.1.13  Bcast:10.0.1.255  Mask:255.255.255.0
inet6 addr: fe80::211:2fff:fe63:151e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:169731145 errors:0 dropped:0 overruns:0 frame:0
TX packets:106196175 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3414915304 (3.1 GiB)  TX bytes:1627861190 (1.5 GiB)
Interrupt:17 Base address:0xc400

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:3684864 errors:0 dropped:0 overruns:0 frame:0
TX packets:3684864 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:925925961 (883.0 MiB)  TX bytes:925925961 (883.0 MiB)

tun0 Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.3.0.10  P-t-P:10.3.0.2  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:168 (168.0 B)  TX bytes:168 (168.0 B)

black:~#

Пингуем сервер OpenBSD по адресу туннеля:

black:~# ping 10.3.0.2
PING 10.3.0.2 (10.3.0.2) 56(84) bytes of data.
64 bytes from 10.3.0.2: icmp_seq=1 ttl=255 time=0.923 ms
64 bytes from 10.3.0.2: icmp_seq=2 ttl=255 time=0.710 ms
64 bytes from 10.3.0.2: icmp_seq=3 ttl=255 time=0.904 ms
^C
--- 10.3.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.710/0.845/0.923/0.101 ms
black:~#

И, наконец, пингуем машину из внутрисети за OpenBSD

black:~# ping 192.169.100.10
PING 192.169.100.10 (192.169.100.10) 56(84) bytes of data.
64 bytes from 192.169.100.10: icmp_seq=1 ttl=127 time=1.08 ms
64 bytes from 192.169.100.10: icmp_seq=2 ttl=127 time=0.936 ms
64 bytes from 192.169.100.10: icmp_seq=3 ttl=127 time=0.975 ms
^C
--- 192.169.100.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2009ms
rtt min/avg/max/mdev = 0.936/0.997/1.080/0.060 ms
black:~#

При любых проблемах со связью, не забывайте о настройках pf/iptables …. может чегото залочили???

Удачи!

Подключение к Cyfra по PPPoE в OpenBSD

Давно хочу написать цикл статей под общим названием «Сервер для малых офисов на OpenBSD». В нем более-меее подробно постараюсь описать процессы настройки следующих сервисов:

Положу начало маленькой но очень важной статейкой из будущего цикла. Важность врятли можно оспорить, ведь если у офиса нету интернета, зачем тогда все остальное? Ну я конечно утрирую, можно решать и другие задачи … файлопомойка например или еще чтото местного масштаба. Но учитывая особенности небольших офисов, уклон беру на то, что один сервер предоставляет если не все, то 80-90% необходимого вычислительного функционала. И очень много из этого самого функционала тесно связана с доступом в интернет. Ну чтож … тогда вперед! В моем случае провайдером выступает Cyfra Настроить подключение оказалось совсем несложно. Начнем сначала, с настройки ppp.

В /etc/ppp/ppp.conf добавляем такие строчки (напомню что в этом файле очень важно соблюдать форматирование: название подключения начинается с начала строчки, его параметры — с пробела)

cyfra:
 set device "!/usr/sbin/pppoe -i sk0"
 disable acfcomp protocomp
 set mtu max 1492
 set speed sync
 enable lqr
 set lqrperiod 5
 set cd 5
 set authname _my_cyfra_login_
 set authkey _my_cyfra_password_
 set dial
 set login
 set timeout 0
 enable dns
 enable mssfixup
 add default HISADDR

sk0 — сетевой адаптер в который воткнут шнурок от провайдера 🙂

Ну все! Подключение настроено 🙂 Можно сразу протестить. В консоли из под рута набираем:

root@gw:~# ifconfig -ddial cyfra

Если все пойдет нормально — то вывалится пару строчек в консоль и подключится 🙂 Если чтото не получается — тут уж в каждой ситуации подход индивидуальный. Разобраться несложно, главное сначала проверить физику, уточнить у провайдера о состоянии аккаунта … ну и почитать доки по ppp на крайняк.

Чтобы соединение подымалось автоматически, добавляем несколько строчек примерно такого содержания в /etc/rc.local

echo -n ' Starting PPPoE'
ppp -ddial cyfra
sleep 25

Пробуем перезагрузиться и проверить все ли сработает так как надо 🙂 Также не забываем о применении правил pf  — я подымаю  фаервол после поднятия соединения с Цифрой. Делается это созданием файла /etc/ppp/ppp.linkup с таким содержимым:

root@gw:~# cat /etc/ppp/ppp.linkup
MYADDR:
 !bg sh -c "/sbin/pfctl -e -f /etc/pf.conf"
root@gw:~#

В результате получаем работающее соединения, которое стартует с системой. И работающий firewall, который подымается только после поднятия инета. Наслаждаемся тихой и безглючной работой замечательной OS OpenBSD 😉

Удачи!

Русский перевод темы Arjuna-X для WordPress

Знакомая попросила сваять для нее небольшой простенький сайтик. Конечно же сделал на WordPress. Хорошо хоть сразу предупредил что я не дизайнер, такчто с оформлением какбы не заморачивался особо. Но решил хоть тему покрасивше дефолтной поставить. Понравилась Arjuna-x … только вот она без русского перевода оказалась. Сначала даже както неповерилось — решил проверить:

black:/_some_path_/wp-content# ll themes/arjuna-x/languages/
итого 332
-rw-r--r-- 1 www-data www-data 11894 Фев  7 13:37 de_DE.mo
-rw-r--r-- 1 www-data www-data 20870 Фев  7 13:37 de_DE.po
-rw-r--r-- 1 www-data www-data   544 Фев  7 13:37 default.mo
-rw-r--r-- 1 www-data www-data 16300 Фев  7 13:37 default.pot
-rw-r--r-- 1 www-data www-data 10479 Фев  7 13:37 es_ES.mo
-rw-r--r-- 1 www-data www-data 18047 Фев  7 13:37 es_ES.po
-rw-r--r-- 1 www-data www-data 12524 Фев  7 13:37 fr_FR.mo
-rw-r--r-- 1 www-data www-data 18843 Фев  7 13:37 fr_FR.po
-rw-r--r-- 1 www-data www-data 11772 Фев  7 13:37 it_IT.mo
-rw-r--r-- 1 www-data www-data 19483 Фев  7 13:37 it_IT.po
-rw-r--r-- 1 www-data www-data 10266 Фев  7 13:37 lt_LT.mo
-rw-r--r-- 1 www-data www-data 17415 Фев  7 13:37 lt_LT.po
-rw-r--r-- 1 www-data www-data 13364 Фев  7 13:37 pt_BR.mo
-rw-r--r-- 1 www-data www-data 21131 Фев  7 13:37 pt_BR.po
-rw-r--r-- 1 www-data www-data   377 Фев  7 13:37 something.mo
-rw-r--r-- 1 www-data www-data 13675 Фев  7 13:37 something.po
-rw-r--r-- 1 www-data www-data 10604 Фев  7 13:37 zh_CN.mo
-rw-r--r-- 1 www-data www-data 32167 Фев  7 13:37 zh_CN.po
black:/_some_path_/wp-content#

Мдя уж, подумалось мне … ну чтож — надо переводить. Перед тем как взяться таки за перевод, немнжко помучил google всякими запросами на эту тему — безрезультатно. Тогда за дело!

Итак, что имеем:

  • На сервере Debian Lenny
  • На машине где я работаю стоит Gentoo 10.0 (точнее это ноут)
  • Версия WordPress — 2.9.1
  • Версия темы Arjuna-X — 1.1.4

Что нужно:

  • Сделать перевод темы с English на русский язык

Идем на официальный сайт разработчиков темы и ищем чегото полезное по этому поводу. Как не странно, но довольно быстро нашел вот тут небольшое FAQ для таких трудяг как я, которое розьясняет как правильно действовать в моей ситуации:

I want to help and make this theme available in my language. How do I translate the theme properly?

Translation is rather easy. Please follow the steps below to translate the project into your own language.

  1. Download and install Poedit (availabe for Windows, Mac OS X, and Linux).
  2. Open Poedit. Click on File > New catalog from POT file… and select the default.POT file in the /languages directory of Arjuna (from the WordPress root: wp-content\themes\Arjuna\languages).
  3. Poedit will ask for some information regarding the new catalog you are about to create. Most important: Select the language that you will create. In addition, you can specify the Arjuna version that your translation applies to. The other fields are optional. There is no need to go to the other two tabs Paths or Keywords.
  4. Click OK. Poedit will then ask you to save the translated file. Save it as a valid language file. This is usually <language abbreviation>_<country code>, whereas the language abbreviation is defined in ISO 639-1 and the country code is defined in ISO 3166 alpha 2. Example: en_GB (English, Great Britain), en_US (English, United States) or de_DE (German, Germany).
  5. Once saved, all you need to do is translate each and every string by clicking on it, and translating it in the box on the very bottom of Poedit.
  6. Save the catalog by pressing CTRL + S or going to File > Save. Poedit will automatically create a .po and a .mo file.
  7. That’s it. We would appreciate if you shared your newly translated catalog with us (the .po file will be sufficient). We will make it publicly available in the next Arjuna release. Thank you.

Ну, вроде, не все так сложно, как кажется на первый взгляд 🙂 Главным инструментом для нас, как написано выше, должен быть некий poedit, который предлагают одкудато качать и ставить руками … фееее. Идем в рутовую консоль и ищем что в гентушных портах есть подобного:

laptop ~ # eix poedit
[I] app-i18n/poedit
Available versions:  1.4.2 ~1.4.3 ~1.4.4 {spell}
Installed versions:  1.4.2(13:44:19 07.02.2010)(spell)
Homepage:            http://poedit.sourceforge.net/
Description:         Cross-platform gettext catalogs (.po files) editor.
laptop ~ #

Ну вот — все оказывается под носом 🙂 Устанавливаем:

laptop ~ # emerge -av app-i18n/poedit

После сборки перегенерил меню своего e16 и прога появилась в разделе Development 🙂 Запускаем — все работает … имеет приятный внешний вид и понятный русский интерфейс. Вот скриншот:

После этого необходимо заполучить заготовки из темы Arjuna-x для перевода. Я не заморачивался особо, и стянул себе на ноут весь каталог с темой 🙂 Сделал это с помощью rsync. Вот так:

black@laptop ~ $ rsync -Par remote_user@server.net:/_some_path_/wp-content/themes/arjuna-x /home/black/mysor/www/

Ну чтож, дальше согласно интсрукции нам предлагают открыть некий файл-заготовку для перевода default.pot Открываем его с помощью свежеустановленной poedit. Как пользоваться прогой — понятно и младенцу. Просто переводим а потом делаем «Сохранить как» и в том же каталоге из которого открыли default.pot сохраняем переведенный файл под именем локали. Я сохранил как ru_RU.po при этом автоматически создастся файлик ru_RU.mo Ну вот и все. Теперь закидываем файлики назад на сервер в директорию languages. И наслаждаемся русскими надписями 🙂

О своем переводе скажу пару слов — перевел 87% если верить poedit-у Плохо знаю English — поэтому перевод чуть неполный получился. Значение некоторых фраз мне осталось непонятным … но судя по всему они неособо важны.

Выкладываю свои файлики ru_RU.po и ru_RU.mo в архивчике. Если кому надо — юзайте на здоровье!

arjune_ru.tar

Домашний сервер с Debian — Firewall + NAT

Появилось сегодня настроение «покрутить за настройки» свой домашний сервер с Debian Lenny на борту 🙂 С чего бы это вдруг … даже не спрашивайте — чето захотелось срочно поадминить 😀 Ну чтоже настраивать то? Вроде и так все работает и даже кушать не просит! Однакоже, давно мне не давала покоя мысль что firewall у меня дома, ну вообще не по фэншую настроен. Чего только стоит default policy ACCEPT во всех цепочках 😀 Из умений нынешних стоит отметить лиш NAT — работает исправно, не ломался пока еще, и вообще проблем никаких. Вот так вот … на работе сижу вылизываю все, а дома когдато поднял по быстрячку, лиш бы работало — и сплю спокойно! Все как обычно — сапожник без сапог … но это поправимо! Вот, собственно, нашелся обьект «донастройки»? Вполне подойдет, подумалось мне, и взялся я за него основательней!

Итак, задача видется мне так:

1. Улучшить защиту домашнего сервера со стороны интернета

  • перейти на Default Policy — DROP в цепочках INPUT и FORWARD
  • дать доступ к серверу из интернета только на такие сервисы DNS, HTTP, SSH

2. Роздать интернет клиенту из внутрисети, имея настройки:

  • внешний фиксированный ipaddress сервера — 123.123.123.123
  • ipaddress/netmask внутреннего интерфейса — 192.168.0.1/24
  • ipaddress/netmask клиента — 192.168.0.3/24 (в последствии дал доспут по mac address чтобы не зависеть от ip)

3. Предоставить доступ клиенту из внутрисети ко всем доступным на сервере сервисам (samba, imap, ssh, smtp, http)

4. Пробросить порты tcp {4662} и udp {4672, 4665} из внешнего интерфейса сервера на клиента. Открываем «прямой» доступ из интернет для amule на клиенте, ато с low id много не накачаеш 😉

Ну чтож, вроде все вполне очевидно — клиент должен ходить везде (весь интернет + сервисы на домашнем сервере), а из интернета на сервер можно попасть только на порты ssh (мне же нужна админская ходка), на apache (лежит несколько сайтов) и на DNS (чтобы отрезолвить несколько моих и неочень зон).

Для того чтобы все это организовать, достаточно одной только программы — iptables. Нужно также знать, что iptables можно «поднимать» по разному. Можно запускать как сервис при старте системы, а можно только при поднятии интерфейсов скриптом. А если заморочиться … то по любому пришедшему в голову системному событию (параноидальная мысль) 🙂 Я выбрал вариант включения фаервола скриптом с нужными правилами при поднятии сетевых интерфейсов.
В этом случае, скриптик приведенный ниже, надо положить в /etc/network/if-pre-up/ Даже видно из названия директории в которую я его поместил, что он запустится перед поднятием сетевых интерфейсов. Название дал ему 00-snat, вы можете назвать как пожелаете. Главное чтобы у него был бит X — тоесть розрешен запуск. Итак, скрипт:

#!/bin/sh
### - Delete All Rules - ###
iptables -F
iptables -F -t nat
### - Rules For IP from INET - ###
iptables -N from_inet
iptables -A from_inet -p tcp -m conntrack --ctstate NEW,INVALID --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
iptables -A from_inet -p tcp -m multiport --dports 22,53,80 -j ACCEPT
iptables -A from_inet -p udp -m multiport --dports 53 -j ACCEPT
iptables -A from_inet -p icmp --icmp-type 8 -j ACCEPT
#iptables -N from_lan
#iptables -A from_lan -p tcp -m multiport --dports 22,53,80,139,445 -j ACCEPT
#iptables -A from_lan -p udp -m multiport --dports 53,137,138 -j ACCEPT
#iptables -A from_lan -p icmp -j ACCEPT
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j from_inet
### - Rules For IP from LAN - ###
#iptables -A INPUT -i eth1 -j from_lan
iptables -A INPUT -i eth1 -j ACCEPT
### - FWD Rules - ###
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m mac --mac-source 00:CC:AA:FF:AA:FF -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.0.3 --dport 4662 -j ACCEPT
### - NAT - ###
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 123.123.123.123
### - Default Policies - ###
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
## - DNAT for AMule - ###
iptables -t nat -A PREROUTING -i eth0 -p tcp --destination-port 4662 -j DNAT --to-destination 192.168.0.3:4662
iptables -t nat -A PREROUTING -i eth0 -p udp --destination-port 4672 -j DNAT --to-destination 192.168.0.3:4672
iptables -t nat -A PREROUTING -i eth0 -p udp --destination-port 4665 -j DNAT --to-destination 192.168.0.3:4665

Даем права на запуск:

# chmod +x /etc/network/if-pre-up/00-snat

Вот такой скрипт 🙂 Ничего сложного и непонятного тут нету. Все предельно просто.

Как видите есть даже заготовка для случая с недоверенной локальной сетью. Если необходимо — просто розкомментируйте все что касается from_lan и закомментируйте правило:

#iptables -A INPUT -i eth1 -j ACCEPT

В результате все что придет на внутренний интерфейс сервера в цепочку INPUT будет направляться в цепочку from_lan и обрабатываться ее правилами, а уж что неполучит ACCEPT в цепочке from_lan, согласно default police для INPUT, будет молча игнорироваться — DROP! Тоесть мы получим еще и полный контроль над траффиком который приходит из внутрисети непосредственно на внутренний интерфейс сервера 🙂

Кроме того, я заморочился, и разрешил forwarding только для одного mac адреса — конечно, клиентского. Чегото захотелось выпендриться. Можете смело заменить на правило с ip, а то что с mac убрать 🙂

Тоесть, заменяем вот это правило с mac address:

iptables -A FORWARD -m mac --mac-source 00:CC:AA:FF:AA:FF -j ACCEPT

На правило с конкретным ip (если доступ нужно дать только одному клиенту) :

iptables -A FORWARD -s 192.168.0.3 -j ACCEPT

Или на приавило вида ip/mask (если доступ надо дать целой подсети):

iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

Ну вот и все! Скажу лиш напоследок, что данный набор правил работает у меня дома вполне исправно уже несколько месяцев. К томуже, написан весьма прозрачно для дополнительных правок, поэтому легко можно модифицировать и под более сложные задачи 😉

Также замечу, что для еще большей безопасности, использую программку fail2ban которая очень эффективно защищает от атак называемых bruteforce. После нескольких неверных попыток авторизации или поиска у нас на сервере чегото непонятно чего (Error 404 в Apache) клиент блочится фаерволом на определенный промежуток времени. Все это достаточно тонко настраивается, может напишу в следующих заметках. Данная утилитка позволяет защищать сервер от какеров которые пытаются сломать ssh, apache, dovecot, разные ftp и много всего (правила для срабатывая блокировки описываются перловыми regexp-ами — это дает нам возможность защитить что угодно при условии наличия логов).

За сим все … всем удачи и супер-пупер безопасности! И чтобы спалось спокойно ….

Настройка urxvt

Linux есть Linux! И без консоли в нем ну никак не выживеш. Когото это пугает, когото наоборот — хлебом не корми, дай в консоли посидеть. Чтоже за консольные эмуляторы для X11 предлагает нам Linux? Их много, я бы даже сказал — очень много. Сам их перепробовал около десятка … от xterm до konsole но понравился больше всего rxvt-unicode. Как видно из названия, он поддерживает Unicode, а также XFT. Вот собственно и все чем он отличается от своего родителя — rxvt. Примечательна в нем возможность покрутить очень много настроек. Использую даную прогу как в Gentoo  так и в Debian. Собственно о настройке этого прекрасного x11 terminal-эмулятора и хотел сказать несколько слов.

Ну во-первых — установка:

  • Для Debian выглядит так:
# apt-get install rxvt-unicode
  • Для Gentoo тоже неособо сложно, за исключением того что следует обратить внимание на USE флаги 😉
# emerge -av x11-terms/rxvt-unicode

У меня, к примеру, собран вот так:

laptop ~ # eix rxvt-unicode
[I] x11-terms/rxvt-unicode
Available versions:  9.06-r3 ~9.07 {afterimage iso14755 perl truetype vanilla wcwidth xterm-color}
Installed versions:  9.06-r3(15:15:42 10.01.2010)(perl truetype vanilla -afterimage -iso14755 -wcwidth -xterm-color)
Homepage:            http://software.schmorp.de/pkg/rxvt-unicode.html
Description:         rxvt clone with xft and unicode support

laptop ~ #

Этого вполне хватает для псевдопрозрачности и поддержки перловых модулей 🙂 Только не забываем как установить обоину на рабочий стол, говорю это скорее для себя, так как использую fluxbox на работе. В fluxbox это делается командочкой:

fbsetbg /_path_to_picture_

В Gentoo использую e16, тут проще — есть специальная настройка в менюшке 🙂

Во-вторых — настройка! Что нам предлагает man страница? Насколько я понял, (и проверил на практике в последствии) конфигурировать вид терминала можно как с помощью конфига $HOME/.Xdefaults так и запуская сам терминал с нужными ключами. Оба метода являются вполне приемлемыми и рабочими. Итак, моя настройка в gentoo несколько странная. Почему то я заюзал одновременно оба метода … в итоге часть настроек у меня в конфиге и также некоторые опции передаю в виде ключей при запуске. Почему так сложилось — уже не помню, настраивал очень давно. Вот что в $HOME/.Xdefaults

black@laptop ~ $ cat .Xdefaults
urxvt*saveLines: 2024
urxvt*transparent: true
urxvt*shading: 40
urxvt*background: Black
urxvt*foreground: Grey
urxvt*scrollBar: false
urxvt*cursorColor: Grey
urxvt*tintColor: Black
urxvt*blurRadius: 3
urxvt*font:-*-terminus-medium-*-*-*-14-*-*-*-*-*-*-r
urxvt*geometry: 155x62
urxvt*cursorBlink: true
URxvt.tabbed.tabbar-fg: 7
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg:    0
URxvt.tabbed.tab-bg:    8
black@laptop ~ $

И запускаю я его используя hotkeys Win+T  командой

 urxvt -vb -pe tabbed

В итоге получаю псевдопрозрачный терминал с поддержкой tab-ов примерно такого вида:

Вчера настраивал в Debian с нуля 🙂 Решил все что мне нужно прописать в $HOME/.Xdefaults Вот что получилось:

black@black:~$ cat .Xdefaults
URxvt*font: -*-terminus-medium-r-*-*-16-*-*-*-*-*-*-u
URxvt*background: black
URxvt*foreground: grey
URxvt*cursorColor: grey
URxvt*transparent: true
URxvt*tintColor: black
URxvt*shading: 70
URxvt*scrollBar: false
URxvt*cursorBlink: true
URxvt*pointerBlank: true
URxvt*pointerBlankDelay: 13
URxvt.perl-ext-common: default,tabbed
URxvt.tabbed.tabbar-fg: 6
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 0
URxvt.tabbed.tab-bg: 7
black@black:~$

Запускаю уже без какихлибо ключиков! Выглядит терминал с данным конфигом примерно так:

Помоему получилось красиво 🙂 Что означают каждая из опций, понятно и просто прочитав их. Думаю коментарии излишни 🙂 Юзаем, наслаждаемся 🙂

Зеркало для Symantec Offline Updates

Многие знают о софтварных продуктах компании Symantec. Антивирус разработанный этой компанией используется у нас на работе. Оличительные черты данного антивируса пожалуй невсех впечатлят, но всеже:

  • вменяемая корпоративная лицензия
  • возможность централизированного управления и мониторинга
  • неслабая тормознутьсть в работе 🙂

Есть еще много всяких плюшек и радостей. Мне, к примеру, нравится наличие так называемых Offline Updates. Это обычные exe файлы, предназначенные для обновления антивируса на машинах которые не имеют доступа к интернету. Такие экзешнички можно скачать из офсайта symantec или с ftp. Для того чтобы иметь актуальную версию этих обновлений — приходилось частенько их качать (они обновляются примерно раз в сутки). Поэтому сама собой появилась задача:

  1. сделать на своей машине зеркало нужных мне директорий с симантековского ftp
  2. роздать доступ к ним в сети по samba (поскольку клиенты восновном с WinXP)

Учитывая особенности моего доступа в интернет, нужно чтобы скрипт работал через http прокси-сервер http://my.proxy:3128 (тем у кого прямой доступ в интернет необходимо просто закомментировать первых 6 строчек скрипта, там где задаются переменные ftp_proxy и http_proxy)
Ну чтож, покопавшись немного с bash, родился вот такой скрипт под названием /root/scripts/symantec_update.sh

#!/bin/bash
if [ -z ${ftp_proxy} ]; then
 export ftp_proxy="http://my.proxy:3128"
fi
if [ -z ${http_proxy} ]; then
 export http_proxy="http://my.proxy:3128"
fi
#URL="ftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp/"
WORK_DIR="/opt/symantec"
[ -d ${WORK_DIR} ] || mkdir ${WORK_DIR} ; mkdir ${WORK_DIR}/{SAV,SEP}
### <- Remove ALL OLD MD5 Summs -> ###
find ${WORK_DIR} -atime +1 -exec rm '{}' \;
cd ${WORK_DIR}

check_md5 () {
MD5_SYMANTEC="md5-hash.txt"
FILES=`ls |grep .exe`
for FILE in ${FILES}
do
   if [ -f ${FILE/exe/md5} ]; then
     continue
   else
     MD5_ORIG=`grep ${FILE} ${MD5_SYMANTEC} |tr [A-Z] [a-z] |cut -d' ' -f1`
     echo "${MD5_ORIG}  ${FILE}" > "${FILE/exe/md5}"
     md5sum --check --status "${FILE/exe/md5}"
     # echo "For file ${FILE} exit status = $?"
        if [ $? -ne 0 ]; then
          echo "${FILE} --- bad checksum !!!" > ../md5sum_${FILE}.log
        else
          [ -f ../md5sum_${FILE}.log ] && rm ../md5sum_${FILE}.log
        fi
   fi
done
}
get_updates_SAV () {
lftp -c 'open -e "mirror -e -c --no-recursion -i -x86.exe -i md5-hash.txt" hftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp'
}

get_updates_SEP () {
lftp -c 'open -e "mirror -e -c --no-recursion -i -v5i32.exe -i md5-hash.txt" hftp://ftp.symantec.com/AVDEFS/symantec_antivirus_corp'
}

cd SAV
get_updates_SAV
check_md5
cd ../

cd SEP
get_updates_SEP
check_md5
cd ../

Возможно, он далек от совершенства, но главное работает!

Добавляем запись в crontab для автоматического запуска каждых 8 часов в 53 минуты

53    0-23/3    *    *    *    /root/scripts/symantec_update.sh

Конфиг /etc/samba/smb.conf для роздачи этих двух директорий по samba выглядит так:

[global]
realm = MY.DOMAIN
netbios name = black
workgroup = WORK
security = ads
idmap uid = 10000-20000
idmap gid = 10000-20000
disable spoolss = Yes
show add printer wizard = No
template shell = /bin/bash
template homedir = /home/%D/%U
winbind use default domain = yes

[Symantec Updates]
comment = Symantec Offline Updates
path = /opt/symantec
browseable = yes
writable = no
create mask = 0664
directory mask = 0777
valid users = @"WORK\domain admins", @"WORK\domain users"

Обьяснения что к чему, думаю ненужны. Особенно учитывая то что в передыдущей записи я рассказывал о вводе своей машинки в домен 🙂

Ну вот и все! С заданием справились на 100% — апдейты автоматом качаются, и роздаются по samba с авторизацией в домене 🙂

Создаем с нуля LiveUSB на базе Debian Lenny

Давно когдато сделал себе LiveUSB брелок из старой флешки на 1GB. На днях случайно её форматнул 🙁 Ну чтож …. бывает — делал dd и случайно перепутал место назначения (упс!) Ну вот … вспоминаем как это делается. Заодно и запишем — ато вспоминается уже с трудом :-[ Вообщето по этому поводу есть целый проэкт с отличной документацией на офсайте вот тут. Согласно документации делаем так:

убедимся что в sources.list есть backports репозитарий — из него устанавливается наш главный инструмент для сборки:

black:~# grep backports /etc/apt/sources.list
deb http://www.backports.org/backports.org/ lenny-backports main contrib non-free
black:~#

Также процесс создания требует выполнения всего нескольких действий из под root, поэтому я основную массу действий производил под обычным пользователем black и переходил под root только если это действительно необходимо. Поэтому напоминаю: знак ‘$’ в приветствии означает ограниченный пользователь, а знак ‘#’ — пользователь root. Будьте внимательны!

Ставим пакет live-helper даже из названия ясно что он то нам поможет в процессе создания LiveUSB системы на все 100%:

black:~# apt-get install live-helper

Создаем директорию в которой будем собирать свой образ:

black@black:~$ mkdir work/LiveUSB

и переходим в нее:

black@black:~$ cd work/LiveUSB

Теперь выполняем следующие команды:

black@black:~work/LiveUSB$ lh_clean --binary
black@black:~work/LiveUSB$ lh_config -b usb-hdd

Это создаст необходимые для настройки и сборки директории. Вот они:

black@black:~/work/LiveUSB$ ls -a
.  ..  config  scripts  .stage
black@black:~/work/LiveUSB$

Обратите внимание на директорию config — она нам понадобится в будущем!

В принципе используя следующую команду, запущенную от root, можно уже собрать свой LiveUSB:

black:/home/black/work/LiveUSB# lh_build

После отработки данной команды появится собственно образ нашего свежесобранного LiveUSB в чем можно убедиться:

black@black:~/work/LiveUSB$ ls -lh
total 142M
drwxr-xr-x  6 root  root  4.0K 2010-01-27 17:37 binary
-rw-r--r--  1 root  root  143M 2010-01-27 17:37 binary.img
-rw-r--r--  1 root  root  2.2K 2010-01-27 17:37 binary.list
-rw-r--r--  1 root  root   16K 2010-01-27 17:36 binary.packages
drwxr-xr-x  6 root  root  4.0K 2010-01-27 17:36 cache
drwxr-xr-x 20 root  root  4.0K 2010-01-27 17:38 chroot
drwxr-xr-x 22 black black 4.0K 2010-01-27 16:52 config
drwxr-xr-x  2 black black 4.0K 2010-01-27 16:52 scripts

black@black:~/work/LiveUSB$

binary.img — это и есть наш образ 🙂 НО! Он был создан с умолчательными конфигами.  Вполне работоспособный, кстати.

На офсайте в работоспособности предлагают убедиться с помощью эмулятора qemu. Установим-ка и попробуем запустить то что собрали.

black:/home/work/LiveUSB# apt-get install qemu

Пробуем запустить:

black@black:~/work/LiveUSB$ qemu -hda binary.img

У меня получилось, и даже вполне успешно!

Однако, незнаю как вы, но я собираюсь собрать этот образ с некоторыми своими дополнительными настройками и пакетами.

  • Хочу добавить такие пакеты:

gzip bzip2 rar unzip mc vim rsync lftp elinks ntfsprogs smbfs ntfs-3g e2fsprogs xfsprogs reiserfsprogs mkisofs cdrecord jfsutils dosfstools centerim-utf8 nmap tcpdump iftop mtr-tiny

  • установить locale по умолчанию ru_RU.UTF8

Для того чтобы при следующей сборке все это поставилось, нужно немножко подправить файлы конфигурации в директории config (либо же можно использовать команду lh_config с огромным количеством ключей и параметров). Как видите, не все эти пакеты можно получить из директории main в репозитариях — а по умолчанию настроена только она. Добавить директории contrib и non-free можно вот здесь:

black@black:~/work/LiveUSB$ grep -i categories config/bootstrap
# $LH_CATEGORIES: select categories to use
LH_CATEGORIES="main contrib non-free"
black@black:~/work/LiveUSB$

Список пакетов для установки при сборке можно добавить вот тут:

black@black:~/work/LiveUSB$ grep -i lh_packages config/chroot
# $LH_PACKAGES: set packages to install
LH_PACKAGES="gzip bzip2 rar unzip mc vim rsync lftp elinks ntfsprogs smbfs ntfs-3g e2fsprogs xfsprogs reiserfsprogs mkisofs cdrecord jfsutils dosfstools centerim-utf8 nmap tcpdump iftop mtr-tiny"
# $LH_PACKAGES_LISTS: set package list to install
LH_PACKAGES_LISTS="standard"
black@black:~/work/LiveUSB$

Теперь очищаем остатки от предыдущей сборки:

black:/home/black/work/LiveUSB# lh_clean --binary
black:/home/black/work/LiveUSB# lh_clean

locale установим простенькой командой, заодно и тип LiveCD установим usb-hdd (мне же на флешку образ нужен):

black:/home/black/work/LiveUSB# lh_config -b usb-hdd "locale=ru_RU.utf8 keyb=us"

Мне этого достаточно — теперь еще раз соберем образ:

black:/home/black/work/LiveUSB# lh_build

В результате сборки получаем такойже binary.img но уже чуть побольше размером (наши пакеты все таки поставились).

locale такой как надо — вот скриншот 🙂

Все! Можем протестить опять же в qemu или сразу записать образ на флэшку (у меня флешка /dev/sdb) командой:

black:/home/black/work/LiveUSB# dd if=binary.img of=/dev/sdb

После окончания записи на флешку — можно пробовать забутиться с нашей новоиспеченной LiveUSB системы 🙂
Единственное что мне не понравилось в итоге — ожидающий нажатия Enter загружчик Syslinux — оказалось тоже легко поправить 🙂 Примонтировал раздел с ливкой и поправил в файлике /media/DEBIAN_LIVE/syslinux/prompt.cfg параметр timeout с 00 на 5.
Помните упоминал о том что конфигурить сборку можно одной «километровой» командой? Так вот пример такой команды:

black:/home/black/work/LiveUSB# lh_config -a i386 -d lenny -p xfce --categories "main contrib non-free" --linux-flavours 686 -b usb-hdd --packages "vim mc gzip bzip2 ntfs-3g ntfsprogs rar unzip rsync lftp elinks smbfs e2fsprogs xfsprogs reiserfsprogs mkisofs cdrecord jfsutils dosfstools centerim-utf8 nmap tcpdump iftop mtr-tiny screen"

Также нужные нам файлы можно закидывать в Live систему посредством папки config/chroot_local-include (напрмер я подложил свой vimrc сюда config/chroot_local-include/etc/vim/vimrc чтобы он применился в ливке). Короче конструктор еще тот …. вот подумываю создать из него роутер 🙂

Такой вот «хитрый брелок» я таскаю с собой почти всегда 🙂 Очень удобно — часто выручала. Надеюсь и вам поможет в нужный момент 😉

Вводим Debian в домен под управлением Win2k8 Server

Задание: дать доменным пользователям из групп «domain users» и «domain admins» на работе доступ на свою машину по samba.

Дополнительные начальные данные:

  • на моей «рабочей лошадке» стоит Debian Lenny
  • пользователи которых я хочу пустить к себе по samba работают под WinXP с авторизацией через домен my.domain поднятый на Win2k8 (контроллер домена — controller.my.domain)
  • права на запись в моих шарах должны иметь только некоторые доменные админские группы, остальным — только чтение
  • учетная запись доменного админа Admin (он может ввести машину в домен)
  • рабочая группа — WORK ( наследство от давно почившего контроллера домена под Win NT 4)
  • имя моей машины — black

Итак, начнем! Сначала ставим необходимые пакетики:

black:~# aptitude install krb5-user winbind samba

Начинаем веселиться — вот такие у меня конфиги:

black:~# cat /etc/krb5.conf |grep -v ^#
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = MY.DOMAIN
 krb4_config = /etc/krb.conf
 krb4_realms = /etc/krb.realms
 kdc_timesync = 1
 ccache_type = 4
 forwardable = true
 proxiable = true

v4_instance_resolve = false
v4_name_convert = {
host = {
 rcmd = host
 ftp = ftp
}
plain = {
 something = something-else
}
}
fcc-mit-ticketflags = true

[realms]
MY.DOMAIN = {
 kdc = controller.my.domain
 admin_server = controller.my.domain
}
[domain_realm]
 .my.domain = MY.DOMAIN
 my.domain = MY.DOMAIN
[login]
 krb4_convert = true
 krb4_get_tickets = false

Минимально необходимый конфиг samba выглядит вот так:

black:~# cat /etc/samba/smb.conf |grep -v ^#
[global]
 realm = MY.DOMAIN
 workgroup = WORK
 netbios name = black
 disable spoolss = Yes
 show add printer wizard = No
 security = ads
 idmap uid = 10000-20000
 idmap gid = 10000-20000
 template shell = /bin/bash
 template homedir = /home/%D/%U
 winbind use default domain = yes

[share]
 comment = Write for Domain Users
 path = /media/samba/share
 browseable = yes
 writable = yes
 create mask = 0664
 directory mask = 0777
 valid users = @"WORK\domain admins", @"WORK\domain users"
 write list = @"WORK\domain admins", @"WORK\domain users"

После того как настроили samba, надо бы ее перегрузить:

black:~# /etc/init.d/samba restart

И winbind не помешает передернуть:

black:~# /etc/init.d/winbind restart

Правим nsswitch.conf примерно до такого вида:

black:~# cat /etc/nsswitch.conf |grep -v ^#

passwd:         files winbind
group:          files winbind
shadow:         files winbind

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 winbind
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Чтобы вступили в силу изменения в конфиге /etc/nsswitch.conf без перегарузки, нужно от рута дать команду:

black:~# ldconfig

Перед тем как вводить машину в домен нужно сначала синхронизировать время с домен-контроллером:

black:~# ntpdate controller.my.domain

После удачной синхронизации времени мы готовы стать полноценным участником домена my.domain. Чтобы войти в домен выполняем от рута:

black:~# net ads join -W my.domain -S master -U Admin

password for Admin:

Admin— доменный администратор который имеет право ввести комп в домен

В ответ на это нас должны спросить доменный пароль для доменного пользователя Admin. После ввода пароля — МЫ В ДОМЕНЕ!!! Если конечно не вывалилась какаято ошибка. Проверить то что мы таки вошли в домен можно например набрав команду:

black:~# wbinfo -u

audit1

audit2

test_1

test_2

..........

В ответ на которую мы должны увидеть перечень доменных пользователей.

Для того чтобы в нашу систему можно было логиниться под доменными аккаунтами нужно привести конфиги PAM к такому виду:

black:~# cat /etc/pam.d/common-account
account sufficient pam_winbind.so
account required pam_unix.so

black:~# cat /etc/pam.d/common-auth
auth sufficient pam_winbind.so
auth required pam_unix.so use_first_pass

black:~# cat /etc/pam.d/common-session

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session sufficient pam_winbind.so
session required pam_unix.so

Вот и все! Можно пробовать зайти, например, по ssh или samba на наш компьютер. Пользователей входящих в группы «domain admins» и «domain users» должно пускать без проблем (даже не спрашивая пароль).

всегото чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:
всегото чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:

apt-cacher in Debian

На работе у меня 2 компьютера работают под Debian. Все вродебы отлично с ними, но вот надоело мне на каждом из них одни и теже обновления тягать через интернет. Совсем уж это не дело … подумалось мне, тягать одно и тоже несколько раз по великой и могучей всемирной паутине! Решил проявить смекалку и чего-то ка-то куда-то настроить ….. ну да, а что настраивать то? Почесав слегка затылок, решил что можно и по nfs все это организовать. Сначала обновиться на первой машине -> розшарить на ней же по nfs директорию /var/cache/apt/archives/ -> подмонтировать на второй машине эту директорию туда же через nfs -> и насладиться жизнью! Но! Чтото мне это непонравилось, а захотелось странного. И захотелось потому, что кроме Debian у меня на работе еще живет Ubuntu и AltLinux. И тоже не в единственных экземплярах. Так вот, фишка с nfs актуальна если используется только один дистрибутив, если же таковых целый зоопарк — надо настраивать apt-cacher! Ну или глобально прокси-сервер с кэшем побольше 🙂

Собственно установка:

# apt-get install apt-cacher

Настройку же условно можна розделить на два этапа:

  • настройка apt-cacher сервера
  • настройка клиентов для работы с apt-cacher сервером

Настройка сервера неособо трудная.

Создадим заранее директорию куда apt-cacher будет складывать закэшированное. Очень желательно чтобы на разделе где мы ее создаем было достаточно места — хотябы несколько гигабайт. У меня она после полугода использования занимает 2.1 GB

# mkdir /opt/apt-cache

Даем нужные права на эту директорию (чтобы apt-cacher мог в нее писать):

# chown -R www-data:www-data /opt/apt-cache

Теперь нужно чуток поправить умолчательный конфиг. Привожу свой с небольшими коментариями:

black:~# cat /etc/apt-cacher/apt-cacher.conf
#################################################################
# This is the config file for apt-cacher. On most Debian systems
# you can safely leave the defaults alone.
#################################################################

# Тут храним все закэшированное - убедитесь что на разделе есть хоть пара GB!
cache_dir=/opt/apt-cache

# email админа - сюда шлем важные замечания если все плохо :)
admin_email=root@localhost

# Для опций автозапуска демона рекомедовано править /etc/default/apt-cacher

# порт на котором apt-cacher слушает подключений от клиентов
daemon_port=3142

# Опционально. Юзер/группа от которой запускается apt-cacher
group=www-data
user=www-data

# optional setting, binds the listening daemon to one specified IP. Use IP
# ranges for more advanced configuration, see below.
# daemon_addr=localhost

# Ну тут все просто - для каких IPv4 розрешено подключаться
# Допустимыми являются записи (кроме 127.0.0.1 который всегда розрешен)
# Если ставим "*" означает "allow all".
# Также можно использовать такие форматы записей 10.0.0.0/22 , "192.168.0.3-192.168.0.56'
allowed_hosts=*
denied_hosts=

#Тоже самое что и выше только уже для адресов семейства IPv6
allowed_hosts_6=
denied_hosts_6=*

# This thing can be done by Apache but is much simplier here - limit access to
# Debian mirrors based on server names in the URLs
#allowed_locations=ftp.uni-kl.de,ftp.nerim.net,debian.tu-bs.de

# Apt-cacher can generate usage reports every 24 hours if you set this
# directive to 1. You can view the reports in a web browser by pointing
# to your cache machine with '/apt-cacher/report' on the end, like this:
#      http://yourcache.example.com/apt-cacher/report
# Generating reports is very fast even with many thousands of logfile
# lines, so you can safely turn this on without creating much
# additional system load.
generate_reports=1

# Apt-cacher can clean up its cache directory every 24 hours if you set
# this directive to 1. Cleaning the cache can take some time to run
# (generally in the order of a few minutes) and removes all package
# files that are not mentioned in any existing 'Packages' lists. This
# has the effect of deleting packages that have been superseded by an
# updated 'Packages' list.
clean_cache=1

# Сюда пишутся все логи
logdir=/var/log/apt-cacher

# apt-cacher can use different methods to decide whether package lists need to
# be updated,
# A) looking at the age of the cached files
# B) getting HTTP header from server and comparing that with cached data. This
# method is more reliable and avoids desynchronisation of data and index files
# but needs to transfer few bytes from the server every time somebody requests
# the files ("apt-get update")
# Set the following value to the maximum age (in hours) for method A or to 0
# for method B
expire_hours=0

# Apt-cacher can pass all its requests to an external http proxy like
# Squid, Это мне подходит! В инет какраз хожу через http proxy
# format is 'hostname:pory' Так и пишем ;-)
http_proxy=my.cool.proxy:3128

# Use of an external proxy can be turned on or off with this flag.
# Value should be either 0 (off) or 1 (on).
use_proxy=1

# Если на прокси-сервере для выхода в инет нужна авторизация
# пишем сюда в формате: 'username:password'
#http_proxy_auth=proxyuser:proxypass

# Используем авторизацию на прокси для инета или нет?
# Допустимыми аргументами есть: 0 (off) или 1 (on).
use_proxy_auth=0

# Тут можно ограничить maximum bandwidth в Байтах за секунду
# для скачиваемых файлов. Синтаксис аналогичен  wget-вскому
#Используем 'k' для килобит и 'm' для мегабит. Пример: 'limit=100k'
limit=0

#Если есть проблемы с работой apt-cacher - пользуемся debug режимом
#незабываем настроить выше logdir и ставим этот параметр в 1 - будет вам куча инфы в логах :)
debug=0

# А вот это самый интересный параметр - назначение имен для нужных на клиентах репозитариев.
# Каждый репозитарий записывается через точку с запятой. При этом запись одного репозитария состоит собственно из
# 2 имен - виртуальное имя (так мы будем представлять этот репозитарий клиенту) и реальное имя (реальный URL репозитария)
# Тоесть запись debian ftp.debian.org/debian ; означает что ftp.debian.org/debian мы предоставляем клиентам как просто debian
# В конечном итоге эта запись непосредственно влияет на дальнейшую настройку sources.list на клиентах
path_map = debian ftp.debian.org/debian ; backports www.backports.org/backports.org/ ; multimedia ftp.debian.org.ua/debian-multimedia/ ; security security.debian.org/ ; elive repository.elive-systems.com/ ; volatile volatile.debian.org/debian-volatile/

Настройка клиентов тоже труда не составляет. Поскольку сам сервер тоже является клиентом в плане скачивания пакетов, то на сервере и клиентах с Debian приводим /etc/apt/sources.list в такой вид:

black:~# cat /etc/apt/sources.list
##### get packages via apt-cacher #####
deb http://black:3142/debian lenny main contrib non-free
deb http://black:3142/backports lenny-backports main contrib non-free
deb http://black:3142/multimedia lenny main
deb http://black:3142/security lenny/updates main
deb http://black:3142/elive lenny main elive drivers tests efl ports
deb http://black:3142/volatile lenny/volatile main contrib non-free

Если захотим и с Ubuntu обновлять/устанавливать пакеты через наш apt-cacher сервер — надо будет всегото чуток дополнить параметр path_map убунтовскими репозитариями. И конечно sources.list для ubuntu будет выглядеть несколько поиному — но я думаю разобраться по аналогии вышеописанного труда несоставит 🙂

Как видите все просто! В итоге наш сервер кэширует все что ставится из репозитариев любым из клиентов с таким вот sources.list. Поэтому скачиваться пакеты на втором клиенте уже фактически будут из кэша сервера — считай со скоростью локалки 😉 Интернету же предоставим гонять полезную инфу, а не одно и тоже раз за разом ….

Gentoo & tmpfs — ускоряем сборку пакетов

Не секрет что сборка пакетов в Gentoo — это каааайф! Ну да, что еще нужно настощему гентушнику? Конечно же полночи пялиться в монитор на красиво бегущие букавки кода при сборке очередного «очень нужного» пакета 🙂 Но иногда приходят мысли и о ускорении этого процесса. Тут мне хотелось бы коснуться производительности дисковой подсистемы — конечно же это основной тормоз подавляющего большинства компов. И как не крути, а винчестер используется тоже неслабо при сборке, особенно больших пакетов. У меня, например, Gentoo стоит на ноуте — производительность HDD, конечно же, оставляет желать лучшего, особенно если сравнивать со скоростью работы RAM памяти. «Причем тут одно к другому?» — может спросить ктото, но ответ тут очень прост —  tmpfs! Вот кто нам поможет превратить часть нашей шустрой оперативной памяти в «жесткий диск». RAM-ы же у нас достаточно? Нетакли 🙂 ? У меня на ноуте 2G — если верить conky постоянно запущеному на ноуте, то даже не припомню когда последний раз больше 1G использовалось …. такчтоооо ….. приступая к очередной «большой сборке» я делаю так:

# mount -t tmpfs tmpfs -o size=850M,nr_inodes=1M /var/tmp/portage

В итоге получаю 850MB оперативной памяти использованой как раздел и примонтированной в /var/tmp/portage В инете проводили некоторые исследования по этому поводу — говорят что такой вот финт сокращает время сборки больших пакетов до 10%

Также отдаю 256MB оперативки «под разтерзание» общесистемным темпам. Делается это записью в /etc/fstab вот такого содержания:

laptop ~ # grep tmp /etc/fstab
tmpfs        /tmp        tmpfs    size=256M,mode=0777        0    0
laptop ~ #

Ну какбы все! Наслаждаемся тем что наш HDD уже не занимается возней с временными файликами 🙂