Шукати в цьому блозі

четвер, 10 лютого 2011 р.

IPv6 - настало время

Собственно поднять туннель для IPv6 проще чем ожидалось.
Идём на http://tunnelbroker.net, регистрируемся, заказываем себе сеть /64.
Далее редактируем /etc/network/interfaces:
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address MY_IPv6
netmask 64
endpoint TUN_IPv4
local MY_IPv4
gateway GW_IPv6
ttl 64
post-up sysctl -p

Редактируем /etc/sysctl.conf:
net.ipv6.conf.default.disable_ipv6 = 0
# простой способ сказать, что на интерфейсе мы не будем использовать IPv6 ;)
net.ipv6.conf.eth0.disable_ipv6 = 1

net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.default.forwarding = 0

net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_ra_defrtr = 0
net.ipv6.conf.all.accept_ra_pinfo = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.forwarding = 0
Ну и далее:
$ sudo ifup he-ipv6

Всё, туннель поднят, можно пробовать пустить ping6 на свой шлюз.
Остаётся отстроить DNS, но об этом в расскажу в ближайшее время.

неділя, 19 грудня 2010 р.

Debian: IPSET, TARPIT и т.д. на ядре 2.6.32 и выше

Для тех кто мучается с netfilter-extension и не понимает, что же делать-то ;)
  1. aptitude install module-assistant xtables-addons-source
  2. module-assistant prepare
  3. module-assistant auto-install xtables-addons-source
  4. depmod -a
Всё! Наслаждаемся екстеншенами.

Новые таржеты для iptables:
  • CHAOS: randomly use REJECT, DELUDE or TARPIT targets. This will fool network scanners by returning random results
  • DELUDE: always reply to a SYN by a SYN-ACK. This will fool TCP half-open discovery
  • DHCPADDR: replace a MAC address from and to a VMware host
  • IPMARK: mark a packet, based on its IP address
  • LOGMARK: log packet and mark to syslog
  • SYSRQ: trigger a sysreq over the network (sending a saK over the network looks like a real funny idea ;)
  • TARPIT: try to slow down (or DoS) remote host by capturing the session and holding it for a long time, using a 0-bytes TCP window. Run that on port 25 if you have no mail server to slow down spammers ;)

Новые совпадения (matches) для iptables:
  • condition: match on boolean value stored in /proc/net/nf_condition/name
  • dhcpaddr: match the DHCP Client Host address in a DHCP message
  • fuzzy: match a rate limit based on a fuzzy logic controller
  • geoip: match a packet by its source or destination country
  • ipp2p: match (certain) p2p protocols
  • portscan: try to match port scanners based on packet contents
  • quota2: named counters

вівторок, 7 грудня 2010 р.

SSH: запретить shell, но разрешить sftp, scp...

Ставим пакет rssh. Редактируем /etc/rssh.conf на предмет разрешения тех или иных сервисов. Меняем у пользователя shell:
usermod -s /usr/bin/rssh user

Jabber сервер Openfire

В связи с полным дебилизмом от ICQ со сменой протокола, с отказом от обслуживания "левых" клиентов пришла таки пора ставить себе jabber-сервер и настроить транспорт в ICQ.
Выбор пал на Openfire.
В репозитории Debian'а Openfire не оказалось, поэтому смело идём на сайт проекта, качаем deb-пакет и устанавливаем его, не забывая про зависимости.
$ sudo dpkg -i openfire_3.6.4_all.deb
Затем создаём базу:
mysql> create database openfire;
Query OK, 1 row affected (0.07 sec)

mysql> create user 'openfire-user'@'localhost' identified by 'your-password';
Query OK, 0 rows affected (0.15 sec)

mysql> grant all on openfire.* to 'openfire-user'@'localhost';
Query OK, 0 rows affected (0.03 sec)
Заходим на http://localhost:9090/ и отвечаем на вопросы по первоначальной настройке. Не забываем указать внешней базой mysql.
После окончания настройки перезапускаем openfire, иначе просто не пустит в админку:
$ sudo invoke-rc.d openfire restart
Идём на http://localhost:9090/login.jsp вводим логин admin и указанный нами пароль.
Наслаждаемся... ;)

пʼятниця, 19 листопада 2010 р.

Фоновая загрузка CPU и renice

Интересное решение для фоновой "загрузки" CPU с наименьшей приоритезацией в renice:
while [ -n "1" ];do echo 1 > /dev/null; done & renice 19 $!
В notes.

пʼятниця, 12 листопада 2010 р.

UUID

Задался вопросом, а откуда можно взять UUID устройств, для fstab'а, grub'а и т.д.
Всё оказалось проще чем думалось:
$ blkid 
/dev/sda9: UUID="34d86afb-97be-46aa-baa7-37ff65926829" LABEL="home" TYPE="reiserfs" 
/dev/sda1: LABEL="/" UUID="6d33b948-9e55-47b6-bfa5-52a1339624a8" TYPE="reiserfs" 
/dev/sda5: LABEL="/usr" UUID="a2b2ce57-fa58-4ca6-a997-3648f9c83e0d" TYPE="reiserfs" 
/dev/sda6: TYPE="swap" 
/dev/sda7: LABEL="/var" UUID="8821d5eb-e545-43e1-8d17-407e1e5e2126" TYPE="reiserfs" 
/dev/sda8: LABEL="/tmp" UUID="02af6195-2841-4ee9-8c0e-7c5b20a4b4e5" TYPE="reiserfs"

понеділок, 6 вересня 2010 р.

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

Ну, что думаете, что система управления доступом в Linux'е заканчивается chown'ом и chmod'ом? Ошибаетесь - есть ещё ACL!

Итак, файловые системы extN, а так-же reiserfs (относительно других - просто не проверял) поддерживают ACL, но только в том случае когда они смонтированы с опцией acl:
sudo mount -o remount,acl /tmp

Конечно более кошерно это сделать через /etc/fstab:
/dev/cciss/c0d0p6 /tmp reiserfs rw,acl 0 0

Если acl активированы, управлять ими можно при помощи утилит setfacl и getfacl, которые устанавливаются с пакетом acl:
aptitude install acl

Попробуем разобраться что тут да к чему.

Создадит файл foo с правами 0x600:
~$ cd tmp
~/tmp$ touch foo
~/tmp$ chmod 600 foo
~/tmp$ ls -l foo
-rw------- 1 bar bar 0 Сен  6 13:57 foo

Глянем теперь в getfacl, что у нас получилось:
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
group::---
other::---

Видим, что автоматически добавились три раздела, соответствующие обычным правам доступа. В дальнейшем эти разделы автоматически синхронизирутся с обычными правами доступа - chmod, chown - и в то же время обычные права доступа можно обновить через setfacl.
Создадим теперь несколько ACL'ов, добавим право на чтение и запись для пользователя mysql и только для чтения пользователю dovecot:
~/tmp$ setfacl -m u:mysql:rw foo
~/tmp$ setfacl -m u:dovecot:r foo
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
user:dovecot:r--
group::---
mask::rw-
other::---

Станет немного сложнее если захотет задать маску ACL. Маски используется при ограничении доступа явно поименованных пользователей и групп и не затрагивает права файла. Установим маску только для чтения и снова посмотрим на ACL:
~/tmp$ setfacl -m m::r foo
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-            #effective:r--
user:dovecot:r--
group::---
mask::r--
other::---

Обращаем внимание, что права для пользователя mysql были ограничены установленной маской; теперь это только чтение, а не чтение и запись.

Ну и напоследок, ACL можно удалить таким образом:
~/tmp$ setfacl -x u:dovecot: foo 
~/tmp$ getfacl foo 
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---


Кстати, все операции можно проводить не только с пользователями, но и с группами:
~/tmp$ setfacl -x u:dovecot: foo 
~/tmp$ getfacl foo 
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

~/tmp$ setfacl -m g:dovecot:r foo 
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
group:dovecot:r--
mask::rw-
other::---

~/tmp$ setfacl -x g:dovecot: foo 
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

Заметим, что команда ls -l пусть и не пытается отобразить расширенные ACL, но даёт понять, что они есть (знак + после стандартных прав доступа):
~/tmp$ ls -l foo
-rw-rw----+ 1 bar bar 0 Сен  6 13:57 foo

Кстати, getfacl и setfacl могут работать в контейнерной обработке. Например, чтобы скопировать права доступа с foo на foo1 достаточно сделать так:
~/tmp$ touch foo1
~/tmp$ getfacl foo | setfacl --set-file=- foo1
~/tmp$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

~/tmp$ getfacl foo1
# file: foo1
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::---
mask::rw-
other::---

Ну и самое интересно. Можно указать унаследуемые от прав каталога ACL:
~/tmp$ mkdir acltest
~/tmp$ setfacl -d -m u:mysql:rw acltest
~/tmp$ getfacl acltest
# file: acltest
# owner: bar
# group: bar
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:mysql:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

~/tmp$ cd acltest
~/tmp/acltest$ touch foo
~/tmp/acltest$ getfacl foo
# file: foo
# owner: bar
# group: bar
user::rw-
user:mysql:rw-
group::r-x   #effective:r--
mask::rw-
other::r--

Насколько часто пользоваться acl - дело каждого, тут не может быть универсальных советов.

setfacl -m u:foo:rw файл(ы)
| |  |  |
| |  |  +-- права rwx
| |  |
| |  +----- пользователь (или группа) заданные по имени или uid/gid
| |
| +-------- u = пользователь
|           g = группа
|           o = другие
|           m = маска
+--------- -m = изменить ACL
-x = удалить ACL