Posts Tagged ‘ Debian

Настройка модема CCU-550 от People.net в Debian GNU Linux

Держу вот в руках модемчик CCU-550 который достался мне с карточкой от people.net. В добавок к модему выдали творческую задачу — настроить доступ в инет через этот модем в Debian Linux. Листик с заветной парочкой login/password я тоже получил 🙂  Зачада вродебы не сложная 🙂 Итак, пробуем!

Для начала поставил wvdial

root@gw:~# apt-get update && apt-get install wvdial

Потом пробуем запустить wvdialconfig — он задает кучу всяких каверзных вопросов. Ответил как смог на них. Но главное теперь у меня появился конфиг /etc/wvdial.conf с некоторыми настройками …. покрутив то тут то там в итоге остановился на таком вот конфиге:

root@gw:~# cat /etc/wvdial.conf

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Phone = #777
ISDN = 0
Username = ***********@people.net.ua
Init1 = ATZ
Password = ******
Modem = /dev/ttyACM0
Baud = 460800
root@gw :~#

В опциях где стоят звездочки должны быть вписаны user/password соответственно настройкам провайдера.

Дальше из консоли скомандовал

root@gw:~# wvdial

И УРА!  В логах появились многозначительные упоминания о сеансе ppp

Mar 26 01:54:00 gw kheaders: Adjusting kernel headers: succeeded
Mar 26 01:54:05 gw pppd[7248]: pppd 2.4.4 started by root, uid 0
Mar 26 01:54:05 gw pppd[7248]: Using interface ppp0
Mar 26 01:54:05 gw pppd[7248]: Connect: ppp0 <--> /dev/ttyACM0
Mar 26 01:54:10 gw pppd[7248]: CHAP authentication succeeded
Mar 26 01:54:10 gw pppd[7248]: CHAP authentication succeeded
Mar 26 01:54:10 gw kernel: [   75.548984] PPP BSD Compression module registered
Mar 26 01:54:10 gw kernel: [   75.567224] PPP Deflate Compression module registered
Mar 26 01:54:11 gw pppd[7248]: replacing old default route to eth0 [192.168.0.1]
Mar 26 01:54:11 gw pppd[7248]: local  IP address 109.167.3.39
Mar 26 01:54:11 gw pppd[7248]: remote IP address 77.109.0.225
Mar 26 01:54:11 gw pppd[7248]: primary   DNS address 77.109.1.8
Mar 26 01:54:11 gw pppd[7248]: secondary DNS address 77.109.1.9
Mar 26 01:54:11 gw pppd[7248]: Script /etc/ppp/ip-up finished (pid 7262), status = 0x0

Появился интерфейс ppp0 и инет вполне так заработал 🙂

Вот хочу еще заморочиться и сделать правило для udev по которому соединение с инетом будет устанавливаться автоматом всякий раз когда модем воткнуть в USB. Но это чуть позже … а пока и так серфим 🙂

Всем удачи! А еще стойкого и четкого сигнала в модеме!

Настройка GPRS модема Wavecom M1306B для Киевстар в Linux

Никаких особых «фишек». Все просто и лаконично.

Создаем конфиги с таким содержимым:

[root@test ~]# cat /etc/ppp/peers/gprs
/dev/ttyS0 115200
nobsdcomp
nodeflate
connect '/usr/sbin/chat -v -f /etc/ppp/chat-gprs'
noauth
noipdefault
usepeerdns
defaultroute
#debug
#nodetach
persist
## new ###
novj
crtscts
modem
lock
user igprs

[root@test ~]#

Читать полностью

Настройка fetchmail для сбора почты

Так уж сложилось исторически что у меня около 10 email адресов. Потихоньку-помаленьку в силу разных нужд и обстоятельств заводились то один то второй 🙂 Так насобиралось их уже немерено с разными login/password, на разных серваках … запоминать все эти данные уже стало трудновато, а следить то за почтой надо. Вобщем после очередной переустановки ОС настраивать MUA (читай почтовый клиент) на все эти ящики было совсем лениво. Поэтому решил подумать как же все это настроить по фэн-шую … чтобы почта собиралась гдето в одном месте. Ведь клево будет — настраиваеш только одну учетку в MUA на которую сыпется вся почта из всех ящиков. Придумать удалость только 2 пути решения:

  1. На одной из web-mail настроить сбор почты из других аккаунтов (такое поддерживает gmail)
  2. На своем собственном домашнем сервере настроить сбор почты всех учеток средствами fetchmail и потом роздать в локальную домашнюю сеть по IMAP (настроить dovecot)

Я выбрал второй вариант — итак, настраиваем fetchmail!

Начальные данные:

  • внешний ip домашнего сервера — 123.123.123.123 ;
  • внутренний ip домашнего сервера — 192.168.0.1 ;
  • пользователь на домашнем сервере для которого будем качать всю почту — user ;
  • на домашнем сервере установлен Debian ;

Из под root делаем 2 вещи:

  • Устанавливаем fetchmail
black:~# apt-get install fetchmail
  • Добавляем в /etc/rc.local такую строчку для автозагрузки fetchmail:
su - user -c "fetchmail -k"

Прим: ключик -k (keep) нужен если вы не хотите чтобы сообщения удалялись с сервера. (Оставлять копии сообщений на сервере). Если ненужно — можете убрать!

Дальше делаем уже из под пользователя user:

  • правим конфиг fetchmail-а (который находится в хомяке пользователя) ~/.fetchmailrc до такого состояния:
set daemon 300
#
poll mail.miha.net.ua proto pop3
user "user_131" with pass "11223344" is user here;
poll mail.mazzza.net.ua proto pop3
user "mysorka" with pass "bellstore" is user here;
poll mail.best.ua proto pop3
user "funbmw" with pass "my_password_here" is user here;
poll pop3.mail.ru proto pop3
user "user...11" with pass "mail_pass" is user here;
poll freemail.ukr.net proto pop3
user "lamer" with pass "lamers_pass" is user here;
poll freemail.ukr.net proto pop3
user "user99" with pass "users" is user here;
poll pop.gmail.com proto pop3 port 995
user 'user_23@bigmir.net' with pass "bigmir_pass" is user here ssl;
poll pop.gmail.com proto pop3 port 995

user 'Bestuser.ua' with pass "megagmailpass" is user here ssl;

Как видите, настройка проще простого!

set daemon 300 — одначает что процесс демонизируется и проверяет новую почту каждые 5 минут (300 секунд)

Вот запись для учетки на некоем сервере mail.miha.net.ua:

который дает мне почту по pop3 для пользователя user_131 с паролем 11223344

is user here — означает что в нашей системе почта предназначена пользователю user

Проще не придумаеш 🙂

С серверами у которых подключение по ssl чуть сложнее — но тоже неособо:

имея учетку на gmail мы легко тянем из нее почту используя данные:

  • порт подключения — 995
  • защищенное соединение ssl — да
  • пользователь — Bestuser.ua
  • пароль — megagmailpass

Ну вот и закончилась настройка 🙂

Теперь просто в консоли из под пользователя user запускаем fetchmail -k чтобы запустить сбор почты. При следующей загрузке системы он запустится автоматически, мы же его добавили в автозапуск 😉

Про настройку dovecot расскажу какнибудь позже … потому что я там несколько игрался с sieve — поэтому статейка тоже немаленькая получится :). Накрайняк если нужно быстро поднять IMAP сервер — нужно просто поставить dovecot.

black:~# apt-get install dovecot-imapd

Он сразу же после установки готов к роздаче почты ( с авторизацией для реальных системных пользователей на сервере)  на 100 %

Всем удачи 🙂

Задачу решили — можно и пива попить!

Скрываем информацию про Apache2 и версию PHP

Если ктото из вас читал хоть какую-нибудь книгу или статью о взломе, тот знает, что первым делом злоумышленник пытается собрать максимально возможное количество информации о жертве, и только потом, учитывая эти данные, принимает решение про алгоритмы и инструменты для своего «черного дела».

Главным образом помогает взломщику информация о названии и версии того или иного сервиса в системе жертвы. В данном случае, я решил посмотреть какое же инфо мне готов предоставить о себе мой собственный web server.

Итак, смотрим (на приглашение сервера после успешного конекта надо ввести команду «HEAD / HTTP/1.0» и 2 раза Enter):

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 09:56:18 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny6 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-1+lenny6
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=ffffebc04d32c2e035055dd5259b2d19; expires=Tue, 23 Mar 2010 13:29:38 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 09:56:18 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Как видите, информации даже через чур много, и это настрораживает. Наш собственный web server радостно готов рассказать кому угодно не только о себе но и о названии/версии системы в которой он работает. Короче, предатель еще тот 😀 Ну чтож ….  вразумить его не делать это довольно легко!

Делаем следующее:

  • переходим под root:
black:~$ su -

Enter password:
  • открываем любимым редактором главный конфигурационный файл apache2:
black:~# vim /etc/apache2/apache2.conf

конфиг довольно большой …. листаем в самый конец

  • добавляем пару вот таких опций:
### Hide Version of Apache ###
ServerTokens ProductOnly
ServerSignature Off

названия опций довольно красноречиво рассказывают о себе 🙂

  • перезагружаем apache2 одной из команд (кому что больше нравится):
black:~# apache2ctl restart

или так:

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

И снова пробуем спросить заголовки у apache2 с помощью telnet

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 09:57:57 GMT
Server: Apache
X-Powered-By: PHP/5.2.6-1+lenny6
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=81a8530d7e6a33847a5542ac544dfa74; expires=Tue, 23 Mar 2010 13:31:17 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 09:57:57 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Ну вот …. так то гораздо лучше, web server теперь просто и лаконично говорит что он apache … и все! Лишнее,  правда, еще болтает php. Ну тогда давайте и его уговорим не болтать все подряд про наш супер секюрный сервак 🙂

  • опять же из под root на web сервере открываем конфиг /etc/php5/apache2/php.ini любимым редактором:
black:~# vim /etc/php5/apache2/php.ini
  • ищем опцию:
expose_php = On
  • и присваиваем ей значение Off … тоесть редактируем до такого состояния:
expose_php = Off
  • сохраняем, выходим с редактора
  • перезапускаем apache2
black:~# apache2ctl restart

снова пробуем прочитать заголовки telnet-ом

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 10:36:40 GMT
Server: Apache
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=b37412aa627d01ed985f36207276cef2; expires=Tue, 23 Mar 2010 14:10:00 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 10:36:40 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Красота! Про php теперь вообще молчок 🙂  Вот то чего я и добивался … ээээх кайф!

На последок скажу, что многие считают подобные меры предосторожности излишними, мол что такого если и подсмотрят … всеравно же софтина очень надежная и секюрность ее проверена годами! Но я всегда руководствуюсь иным принципом — «Безопасности много не бывает!» Поэтому, надеюсь помог тому кто действует по схожим принципам, а тем кто не заморачивается — может задумаются, делов то на минуту 🙂 А какерам досадно 🙂

Засим спешу откланяться! Всем удачи и супер-пупер секюрности!

Соединяем сети между 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 …. может чегото залочили???

Удачи!

Домашний сервер с 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:~$

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

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

Создаем с нуля 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. Поэтому скачиваться пакеты на втором клиенте уже фактически будут из кэша сервера — считай со скоростью локалки 😉 Интернету же предоставим гонять полезную инфу, а не одно и тоже раз за разом ….