апреля 22 2009 10:59 пп

Шлюз корпоративной сети на базе FreeBSD 7.1 с прокси сервером Squid и фаерволом PF

freebsd_corp_server.png

В данной статье описано как поднять шлюз для небольшой корпоративной сети, пробросить порты на внутренние сервера, поднять прокси сервер и DNS, настроить межсетевой экран на базе PF. Данная статья не является исчерпывающим руководством с пошаговыми инструкциями, но довольна подробно описывает как и что, и содержит примеры файлов конфигурации для настраиваемых сервисов. NAT и проброс портов реализован с помощью PF, Squid отвечает за раздачу интернета пользователям в рабочее время, а так же ограничивает доступ к нежелательным ресурсам, запрещает загрузку нежелательных файлов и посещение закрытых сайтов. DNS сервер отвечает за обслуживание локального домена и перенаправляет запросы пользователей локальной сети к DNS серверу провайдера. И так, приступим к настройке.

Установка FreeBSD и сборка ядра для поддержки PF.

Устанавливаем FreeBSD в комплектации без иксов, игр и коллекции пакетов. В конце настраиваем сетевые интерфейсы и включаем ssh.

После загрузки системы собираем ядро для поддержки PF. Вообще этот шаг можно пропустить в случае если вы не собираетесь использовать всякие очереди, приоретезацию трафика и ограничение скорости. Единственное — при подгрузке правил фаера будет мозолить глаза сообщение о том что в ядре нет поддержки всяких ALTQ…

Код:


# cd /usr/src/sys/i386/conf/
# cp GENERIC ROUTER

Правим конфиг нового ядра:

Код:


...
cpu I686_CPU
ident ROUTER
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
...

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

Код:


# cd /usr/src
# make buldkernel KERNCONF=ROUTER
# make installkernel KERNCONF=ROUTER

Прописываем в rc.conf:

Код:


pf_enable="YES"
pf_program="/sbin/pfctl"
pf_flags=""
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
pflog_flags=""

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

Код:


# pfctl -sa

Установка DNS сервера.

По умолчанию bind уже установлен, нужна только настройка.

Нам нужен DNS сервер, который будет держать внутреннюю зоны компании, а запросы к внешним серверам будет перенаправлять на dns серверы
провайдера.

Код:


# cat /etc/namedb/named.conf
// Logging:
logging {
channel syslog {
syslog daemon;
severity info;
print-category yes;
print-severity yes;
};
category xfer-in { syslog; };
category xfer-out { syslog; };
category config { syslog; };
category default { null; };
};
options {
// Relative to the chroot directory, if any
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
listen-on { 127.0.0.1; 192.168.0.1; };
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
forwarders {
135.11.0.77;
135.11.127.77;
};
query-source address * port 53;
};
zone "." { type hint; file "named.root"; };
// RFC 1912
zone "localhost" { type master; file "master/localhost-forward.db"; };
zone "127.in-addr.arpa" { type master; file "master/localhost-reverse.db"; };
zone "255.in-addr.arpa" { type master; file "master/empty.db"; };
// RFC 1912-style zone for IPv6 localhost address
zone "0.ip6.arpa" { type master; file "master/localhost-reverse.db"; };
// "This" Network (RFCs 1912 and 3330)
zone "0.in-addr.arpa" { type master; file "master/empty.db"; };
// Private Use Networks (RFC 1918)
zone "10.in-addr.arpa" { type master; file "master/empty.db"; };
zone "16.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "17.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "18.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "19.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "20.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "21.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "22.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "23.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "24.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "25.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "26.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "27.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "28.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "29.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "30.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "31.172.in-addr.arpa" { type master; file "master/empty.db"; };
zone "168.192.in-addr.arpa" { type master; file "master/empty.db"; };
// Link-local/APIPA (RFCs 3330 and 3927)
zone "254.169.in-addr.arpa" { type master; file "master/empty.db"; };
// TEST-NET for Documentation (RFC 3330)
zone "2.0.192.in-addr.arpa" { type master; file "master/empty.db"; };
// Router Benchmark Testing (RFC 3330)
zone "18.198.in-addr.arpa" { type master; file "master/empty.db"; };
zone "19.198.in-addr.arpa" { type master; file "master/empty.db"; };
// IANA Reserved - Old Class E Space
zone "240.in-addr.arpa" { type master; file "master/empty.db"; };
zone "241.in-addr.arpa" { type master; file "master/empty.db"; };
zone "242.in-addr.arpa" { type master; file "master/empty.db"; };
zone "243.in-addr.arpa" { type master; file "master/empty.db"; };
zone "244.in-addr.arpa" { type master; file "master/empty.db"; };
zone "245.in-addr.arpa" { type master; file "master/empty.db"; };
zone "246.in-addr.arpa" { type master; file "master/empty.db"; };
zone "247.in-addr.arpa" { type master; file "master/empty.db"; };
zone "248.in-addr.arpa" { type master; file "master/empty.db"; };
zone "249.in-addr.arpa" { type master; file "master/empty.db"; };
zone "250.in-addr.arpa" { type master; file "master/empty.db"; };
zone "251.in-addr.arpa" { type master; file "master/empty.db"; };
zone "252.in-addr.arpa" { type master; file "master/empty.db"; };
zone "253.in-addr.arpa" { type master; file "master/empty.db"; };
zone "254.in-addr.arpa" { type master; file "master/empty.db"; };
// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa" { type master; file "master/empty.db"; };
zone "3.ip6.arpa" { type master; file "master/empty.db"; };
zone "4.ip6.arpa" { type master; file "master/empty.db"; };
zone "5.ip6.arpa" { type master; file "master/empty.db"; };
zone "6.ip6.arpa" { type master; file "master/empty.db"; };
zone "7.ip6.arpa" { type master; file "master/empty.db"; };
zone "8.ip6.arpa" { type master; file "master/empty.db"; };
zone "9.ip6.arpa" { type master; file "master/empty.db"; };
zone "a.ip6.arpa" { type master; file "master/empty.db"; };
zone "b.ip6.arpa" { type master; file "master/empty.db"; };
zone "c.ip6.arpa" { type master; file "master/empty.db"; };
zone "d.ip6.arpa" { type master; file "master/empty.db"; };
zone "e.ip6.arpa" { type master; file "master/empty.db"; };
zone "0.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "1.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "2.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "3.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "4.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "5.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "6.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "7.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "8.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "9.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "a.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "b.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "0.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "1.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "2.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "3.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "4.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "5.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "6.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "7.e.f.ip6.arpa" { type master; file "master/empty.db"; };
// IPv6 ULA (RFC 4193)
zone "c.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "d.f.ip6.arpa" { type master; file "master/empty.db"; };
// IPv6 Link Local (RFC 4291)
zone "8.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "9.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "a.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "b.e.f.ip6.arpa" { type master; file "master/empty.db"; };
// IPv6 Deprecated Site-Local Addresses (RFC 3879)
zone "c.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "d.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "e.e.f.ip6.arpa" { type master; file "master/empty.db"; };
zone "f.e.f.ip6.arpa" { type master; file "master/empty.db"; };
// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int" { type master; file "master/empty.db"; };
zone "domain.local" {
type master;
file "master/domain.local";
allow-transfer
{
192.168.1.225;
};
};
zone "0.168.192.in-addr.arpa" {
type master;
file "master/0.168.192";
allow-transfer
{
192.168.1.1;
};
};
zone "1.168.192.in-addr.arpa" {
type master;
file "master/1.168.192";
allow-transfer
{
192.168.1.1;
};
};

Файлы внутренней зоны:

Код:


# cat /etc/namedb/master/domain.local
$TTL 86400
domain.local. IN SOA ns.domain.local. admin.domain.local. (
2006240801 ; Serial (YYYYDDMM plus 2 digit serial)
86400 ; refresh (1 day)
7200 ; retry (2 hours)
8640000 ; expire (100 days)
86400) ; minimum (1 day)
IN NS ns.domain.local.
localhost IN A 127.0.0.1
ns IN A 192.168.0.1
bsd IN A 192.168.0.1
mail IN A 192.168.0.2
pbx IN A 192.168.1.3
....

Код:


# cat /etc/namedb/master/0.168.192
$ORIGIN .
$TTL 86400
0.168.192.in-addr.arpa IN SOA ns.domain.local. admin.domain.local. (
2006082401 ; Serial (YYYYDDMM plus 2 digit serial)
86400 ; refresh (1 day)
7200 ; retry (2 hours)
8640000 ; expire (100 days)
86400)
NS ns.domain.local.
$ORIGIN 0.168.192.in-addr.arpa
$TTL 86400
1 PTR bsd.domain.local.
1 PTR ns.domain.local.
2 PTR mail.domain.local.
...

Добавляем в rc.conf:

Код:


named_enable="YES"
named_flags="-u bind"

Запускаем:

/etc/rc.d/named start

Установка прокси сервера Squid.

Код:


# cd /usr/ports/www/squid
# make install clean

Настраивам конфиг сквида:

Код:


# cat /usr/local/etc/squid/squid.conf
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
acl Safe_ports port 80 # http
acl CONNECT method CONNECT
acl flv urlpath_regex -i \.flv$
acl mov urlpath_regex -i \.mov$
acl mp3 urlpath_regex -i \.mp3$
acl wav urlpath_regex -i \.wav$
acl ogg urlpath_regex -i \.ogg$
acl asf urlpath_regex -i \.asf$
acl avi urlpath_regex -i \.avi$
acl mpeg urlpath_regex -i \.mpeg$
acl inet_full src "/usr/local/etc/squid/inet_full"
acl deny_domains dstdomain "/usr/local/etc/squid/deny_domains"
acl work_time time MTWHF 10:00-18:00
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access allow inet_full
http_access deny work_time deny_domains
http_access deny avi
http_access deny wav
http_access deny mp3
http_access deny mpeg
http_access deny flv
http_access deny mov
http_access deny ogg
http_access deny asf
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
http_port 3129 transparent
hierarchy_stoplist cgi-bin ?
access_log /squid/logs/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 256 MB
cache_dir ufs /squid/cache 51200 64 512

Резюме по этому конфигу: вырезаем весь мультимедиа контент и запрещаем в
рабочее время сайты, лежащие в файле deny_domains. Ограничения не
касаются тех, кто прописан в файле inet_full. Под сквид у меня отдельный
раздел /squid где находится кеш и логи.

Дальше создаем необходимые файлы и папки, настриаваем права:

Код:


# chown -R squid:squid /squid

Создаем кэш:

Код:


# squid -z

Прописывем сквид в rc.conf:

Код:


squid_enable="YES"

Запускаем и проверяем:

Код:


# /usr/local/etc/rc.d/squid start
# ps -waux | grep squid
squid 854 0,0 0,2 7060 2424 ?? Is 18:50 0:00,00 /usr/local/sbin/squid -D
squid 943 0,0 30,5 320404 314888 ?? S 18:50 2:24,12 (squid) -D (squid)
squid 944 0,0 0,1 1376 604 ?? Ss 18:50 0:00,94 (unlinkd) (unlinkd)
squid 945 0,0 0,1 3308 928 ?? Ss 18:50 0:06,90 (pinger) (pinger)
root 3653 0,0 0,1 3336 956 p1 R+ 11:32 0:00,00 grep squid

Настройка PF.

Итак, у нас сеть за натом и на внешнем интерфейсе у нас несколько
реальных ip адресов.

Прописываем алиасы для внешних адресов:

Код:


# cat /etc/rc.conf
defaultrouter="135.61.11.222"
gateway_enable="YES"
hostname="bsd"
ifconfig_em0="inet 192.168.0.1 netmask 255.255.254.0"
ifconfig_em1="inet 135.61.11.223 netmask 255.255.255.240"
ifconfig_em1_alias0="inet 135.61.11.224 netmask 255.255.255.240"
ifconfig_em1_alias1="inet 135.61.11.225 netmask 255.255.255.240"
ifconfig_em1_alias2="inet 135.61.11.226 netmask 255.255.255.240"
.....

Пишем конфиг для PF:

Код:


# cat /etc/pf.conf
# pf.conf
# Written By Alchemist 20.03.2009
# http://alchemist-unix.blogspot.com/
#################################################################
#################################################################
# Опции
#################################################################
# Интерфейсы
ext_if = "em1"
int_if = "em0"
# IP адреса
extnet = "135.61.11.222/28"
lannet = "192.168.0.0/24"
ext_ip = "135.61.24.223/32"
ext_ip_bserv = "135.61.11.225/32"
ext_ip_963 = "135.61.11.226/32"
ext_ip_pbx = "135.61.11.227/32"
bsd = "192.168.0.1/32"
mail = "192.168.0.100/32"
dc = "192.168.0.2/32"
pbx = "192.168.0.3/32"
serv1 = "192.168.0.4/32"
serv2 = "192.168.0.5/32"
terminal = "192.168.0.6/32"
root = "192.168.0.10/32"
serv3 = "192.168.0.7/32"
friends = "{ XXX, XXX }"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
# Порты
client_ports = "{ 21, 22, 25, 110, 123, 80, 443, 3128, 3129, 3389,8080, >=49151 }"
admin_ports = "{ 5190, 33330:33340 }"
pbx_udp = "{ 2727, 4520, 4569, 5036, 5060, 10000:20000 }"
pbx_tcp = "{ 5060 }"
#------------------------------
# Нормализация
#------------------------------
# Определяем политику при блокировке пакетов
set block-policy drop
# Поведение пакетного фильтра при использовании таблицы состояний
set state-policy floating
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
# Нормализация всего входящего трафика на всех интерфейсах
scrub in all
#------------------------------
# NAT & RDR
#------------------------------
# NAT для Asterisk
# Из-за ната Астериск работал с кучей косяков, поэтому пришлось сделать бинат
binat on $ext_if inet from $pbx to any -> $ext_ip_pbx
# NAT для локалки
nat on $ext_if inet from $lannet to any -> $ext_ip
# Отправляем локальных интернетчиков на squid.
rdr on $int_if proto tcp from $lannet to any port www -> 127.0.0.1 port 3129
# Пробрасываем порты на Asterisk
rdr on $ext_if from any to $ext_ip_pbx -> $pbx
# Пробрасываем порты на web сервер
rdr on $ext_if proto tcp from any to $ext_ip_bserv port www -> $bserv
# Пробрасываем порты на почтовый сервер - smtp для всех.
rdr on $ext_if proto tcp from any to $ext_ip port smtp -> $mail
# Пробрасываем порты на почтовый сервер - pop3 для филиалов.
rdr on $ext_if proto tcp from $friends to $ext_ip port pop3 -> $mail
# Пробрасываем порты на почтовый сервер - https вебморда для всех.
rdr on $ext_if proto tcp from any to $ext_ip port https -> $mail
# Пробрасываем порты на виндовый терминальный сервер.
rdr on $ext_if proto tcp from any to $ext_ip port rdp -> $terminal
# Пробрасываем еще один rdp.
rdr on $ext_if proto tcp from any to $ext_ip port 3390 -> $serv3 port 3389
# Пробрасываем порты на root
rdr on $ext_if proto tcp from any to $ext_ip port 44444 -> $root port 44444
# Пробрасываем SSH
rdr on $ext_if proto tcp from any to $ext_ip port 33330 -> $mail port 22
rdr on $ext_if proto tcp from any to $ext_ip port 33331 -> $pbx port 22
rdr on $ext_if proto tcp from any to $ext_ip port 33332 -> $dc port 22
rdr on $ext_if proto tcp from any to $ext_ip port 33333 -> $serv1 port 22
rdr on $ext_if proto tcp from any to $ext_ip port 33334 -> $serv2 port 22
rdr on $ext_if proto tcp from any to $ext_ip port 33335 -> $pdc port 22
#------------------------------
# Правила фильтрации
#------------------------------
# Защита от спуфинга
antispoof quick for { lo0, $int_if, $ext_if }
# Блокируем всё
block log all
# Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any
# Разрешаем icmp
pass inet proto icmp icmp-type echoreq
# Разрешаем DNS для локалки
pass in on $int_if proto udp from $lannet to $bsd port domain
# Разрешаем NTP для локалки
pass in on $int_if proto udp from $lannet to $bsd port ntp
# Тестовый полный выход для отладки
#pass in on $int_if from $lannet to any
# Выпускаем Asterisk
pass in on $int_if from $pbx to any
# Выпускаем почтовик
pass in on $int_if proto tcp from $mail to any port smtp
# Выпускаем админские сервисы
pass in on $int_if proto tcp from $root to any port $admin_ports
# Выпускаем клиентске сервисы
pass in on $int_if proto tcp from $lannet to any port $client_ports
# Разрешаем нашему шлюзу полный выход с обоих интерфейсов
pass out on $ext_if proto tcp from any to any
pass out on $ext_if proto udp from any to any keep state
pass out on $int_if proto tcp from any to any
pass out on $int_if proto udp from any to any keep state
#------------------------------
# Icoming #
# Разрешаем входящий ssh
pass in log on $ext_if proto tcp from any to $ext_ip port 33339 flags S/SA synproxy state
pass in log on $ext_if proto tcp from any to $mail port 22 flags S/SA synproxy state
pass in log on $ext_if proto tcp from any to $pbx port 22 flags S/SA synproxy state
pass in log on $ext_if proto tcp from any to $dc port 22 flags S/SA synproxy state
pass in log on $ext_if proto tcp from any to $serv1 port 22 flags S/SA synproxy state
pass in log on $ext_if proto tcp from any to $serv2 port 22 flags S/SA synproxy state
# Разрешаем входящий smtp для всех
pass in on $ext_if proto tcp from any to $mail port smtp flags S/SA synproxy state
# Разрешаем входящий https
pass in on $ext_if proto tcp from any to $mail port https flags S/SA synproxy state
# Разрешаем входящий www
pass in on $ext_if proto tcp from any to $ext_ip port www flags S/SA synproxy state
# Разрешаем входящий ftp
pass in on $ext_if proto tcp from any to $ext_ip port ftp flags S/SA synproxy state
# Разрешаем входящий pop3 для филиалов
pass in on $ext_if proto tcp from $friends to $mail port pop3 flags S/SA synproxy state
# Разрешаем входящий rdp
pass in log on $ext_if proto tcp from $friends to $terminal port rdp flags S/SA synproxy state
# Разрешаем входящий rdp еще на один виндовый сервер
pass in log on $ext_if proto tcp from $friends to $serv3 port rdp flags S/SA synproxy state
# Проброс на root
pass in log on $ext_if proto tcp from any to $root port 4899 flags S/SA synproxy state
# Разрешаем входящий Asterisk
pass in on $ext_if proto tcp from any to $pbx port $pbx_tcp flags S/SA synproxy state
pass in on $ext_if proto udp from any to $pbx port $pbx_udp keep state
# Разрешаем входящий www на serv1
pass in on $ext_if proto tcp from any to $bserv port www flags S/SA synproxy state

Перед загрузкой проверим правила:

Код:


# pfctl -nf /etc/pf.conf

Если все ок, то загрузим:

Код:


# pfctl -f /etc/pf.conf

Посмотрим правила трансляции:

# pfctl -sn

Правила фильтрации:

# pfctl -sr

Посмотрим стстистику по внешнему интерфейсу:

# pfctl -si

Просомтреть всё скопом можно так:

# pfctl -sa

На этом статья заканчивается, при написании использовались следующие материалы
http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html
http://www.lissyara.su/?id=1671
http://www.lissyara.su/?id=1833

Оригинал статьи: http://www.opennet.ru




Комментариев нет »


Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »

  • Реклама

  • Ссылки



  • Теги



Server load average: 0.00, 0.00, 0.00
Server uptime: 21 days, 3:50
Your IP is: 54.198.134.32.