Войти

Показать полную графическую версию : Интернет шлюз на FreeBSD.


Страниц : [1] 2

kyzmi4
22-03-2011, 11:48
Здравствуйте уважаемые форумчанине и форумчанки. =)
История не нова, но всеже.
Завили к нам в здание 10 мбитный интернет. Сразу возник вопрос это раздать, поделить и себя не обделенным оставить. Решение данного вопроса я возложил на себя. В копилке навыков имеется представление о построении сетей, настройки. Также имеется в копилке настройка файлового сервера на FreeBSD с интеграцией с AD. Сейчас есть интернет пропускной способностью 2 мбит, шлюз на слаке и полная анархия, кто торренты качает, кто Youtube, пока лечится только arp -s ip fake_mac. Дабы чувствовать себя в этой теме как рыба в воде, мною был прочитан вдоль и поперек лисяра http://www.lissyara.su, handbook и почитанны местные темы. И прежде чем приступать к практическим действиям, хочу спросить у вас, правильно ли я все понял и вник в суть:

http://cs9644.vkontakte.ru/u11793389/93053836/y_331c684e.jpg
Это как я ее назвал схематическая схема.

Как это должно работать:
1) Есть отдел занимающийся оформлением документов, им кроме как 80, 8080,443 и почтовых портов ничего не надо. (Я так сказал =)) Все они дружно ходят через прозрачный прокси на сквиде, а почта заворачивает на НАТ. Все остальные порты, весело и непринужденно режутся, кромсаются фаерволом. И мало того будет стоять ограничение по ширине канала, отдадим им 2 мбита.
2) Есть Very Important Person, это начальство и другие. Они создают на своем компе VPN подключение через стандартные функции Окон. И качают, и делают что хотят. Их всех заворачивает на НАТ.

Что будет использоватся:
DCHP - isc-dhcp3-relay Для раздачи IP
DNS - BIND Кеширующий
SQUID - Собственно сама прокси
Rejik - Будем резать, будем бить, в интернет сюда ходить, а сюда не ходить.
SAMS - Посмотреть, другим показать, кто куда лазиит.
Apache, MySQL, PHP 5 - для поддержания веб морды SQUID´a
NAT - еще не определился с программой, изучаю этот вопрос.
IPFW - фаервол, отворот-поворот.
VPN - по протоколу PPTP, программы PoPToP или mpd.

Серия вопросов:
1) Помогите определится с NAT.
2) Нужен ли кеширющий ДНС, если есть прокси?
3) При VPN подключении к серверу создается еще один интерфейс, как с этим справится фаер или же в нем можно будет указать список интерфейсов, а не по одному прописывать. (Вопросом еще не занимался, не гуглил)
4) На Сквиде морда Самс, а на Нате как вести статистику?

К процессу преступлю только недельки через две, не хочу прыгать сразу в прорубь.

В процессе, сборки, установки, настройки буду отписываться из чего потом собирем RTFM.

ashota
25-03-2011, 10:52
У меня все точно так же сделано, кроме VPN.
Помогите определится с NAT. »
Для NAT использую ipfw
Нужен ли кеширющий ДНС, если есть прокси? »
Если все только и лезут в инет через прокси, тогда и в принципе не нужен. Но у тебя есть DHCP. А в связке в DDNC очень даже приятная вещь!

kyzmi4
29-03-2011, 17:33
Да, есть DHCP. Щас пытаюсь настроить DDNS. Обложен весь книжками и сотни открытых вкладок. Второй день бьюсь, но никак =\ В книжке написанно настраиваешь ДНС, потом типа делаешь nslookup ya.ru на машине с FreeBSD и приходит ответ Server: my_domain; Address: 127.0.0.1#53; Non-authoritative answer: Other servers. Ну вот не хочет.

Кстати веду блог по моим мучениям http://kyzmi4-freebsd.livejournal.com/ =)

dmitryst
29-03-2011, 18:03
По пунктам
1) Помогите определится с NAT.
2) Нужен ли кеширющий ДНС, если есть прокси?
3) При VPN подключении к серверу создается еще один интерфейс, как с этим справится фаер или же в нем можно будет указать список интерфейсов, а не по одному прописывать. (Вопросом еще не занимался, не гуглил)
4) На Сквиде морда Самс, а на Нате как вести статистику? »

1 - В связке ipfw+natd все работает отлично. Будете использовать pf - у него есть своя команда маскарадинга прямо внутри фаерволла (не интересовался, ибо классический вариант устраивает на 100%)
2 - я поставил pdnsd (есть в портах) - маленький, шустрый, без простыней конфигов. Работает отлично.

3 - VPN не использую, использую статику, т.к. так рапределять кто ВИП, а кто негр - проще. Раделение доступа к ресурсам через фаер или SQUID, причем в последнем можно даже по расписанию (типа всем везде можно в воскресенье и в субботу после 5 вечера, удобно)

4 - зачем? на НАТе? статистику? Хотите знать всё - tcpdump дампите и смотрите, смотрите, смотрите... очень долго смотрите ... :biggrin:

kyzmi4
30-03-2011, 11:00
tcpdump, это да хорошо. Но не получается у моего мозга обрабатывать такое количество информации бегущей строкой =) (кто то наверно скажет про опцию -w tcpdump).
Всетаки не могу немного разобратся с DNS.
По моему мнению что я хочу пока добится:
1.) 127.0.0.1 переводится в inet.fms
2.) inet.fms переводится в 127.0.0.1
Подключаю виндовую машину получаю IP 192.168.1.10, делаю nslookup 127.0.0.1 192.168.1.1 получаю:
*** Can´t find server name for address 192.168.1.1: Non-existent domain # Оно и понятно, 192.168.1.1 я не настраивал еще зону
Server: UnKnown
Address: 192.168.1.1

Name: inet.fms
Address: 127.0.0.1

Но вот когда я делаю ping inet.fms, не удалось обнаружить узел, хотя поидеи должен меня пропинговать.

Мои догадки это то что надо настоить zone inet.fms.

Конфиги:
named.conf


options {
directory "/etc/namedb/working";
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.1.1; };
forward first;
forwarders {
21x.45.0.3;
21x.45.2.5;
8x.245.145.6;
};
query-source address * port 59;
};

zone "." {
type hint;
file "/etc/namedb/named.root";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "/etc/namedb/master/localhost.rev";
};
/*
zone "inet.fms" {
type master;
file "/etc/namedb/master/inetfms.db";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/namedb/master/192168.db";
};
*/


localhost.rev
$TTL 3600
@ IN SOA inet.fms. root.inet.fms. (
2011032900 ;Serial
3600 ;Refresh
900 ;Retry
3600000 ;Expire
3600 ) ;Minimum
IN NS inet.fms.
1 IN PTR inet.fms.
inet.fms. IN A 127.0.0.1


rc.conf

hostname="inet.fms"
keymap="ru.koi8-r.win"
font8x8="koi8-r-8x8"
font8x14="koi8-r-8x14"
font8x16="koi8-r-8x16"
keyrate="fast"
defaultrouter="21x.100.148.53"
sshd_enable="YES"
named_enable="YES"
ifconfig_fxp0="inet 21x.100.148.54 netmask 255.255.255.252"
ifconfig_xl0="inet 192.168.1.1 netmask 255.255.255.0"
dhcpd_enable="YES"
dhcpd_ifaces="xl0"

dmitryst
30-03-2011, 11:56
tcpdump, это да хорошо. Но не получается у моего мозга обрабатывать такое количество информации бегущей строкой (кто то наверно скажет про опцию -w tcpdump). »
это был здоровый сарказм :). Ну зачем весь ВЕСЬ траффик, объясните? Для нормальной жизни админа достаточно смотреть логи/статистику SQUID (это http - кто что откуда сколько качал, я пользовался lightsquid), что-нибудь на ftp (topftp или утилиту статистики какую), остальной траффик смотрим iftop-ом или trafshow.
Насчет ДНС - я не понял, вам именно полноценный ДНС нужен? Нужно держать имя для белого IP? Или просто чтобы "всё работало"?

kyzmi4
30-03-2011, 13:15
Ну зачем весь ВЕСЬ траффик, объясните? »
Параноидальный вуеризм =)

Насчет ДНС - я не понял, вам именно полноценный ДНС нужен? Нужно держать имя для белого IP? Или просто чтобы "всё работало"? »
Да, полноценный ДНС, точнее ДДНС. Чтобы к имени компа еще прикручивался домен. Имя для белого IP нет (хотяяя, ну это в будующем). С моими конфигами почему не форвардится inet.fms в 127.0.0.1, товарищ телепат?

P.S. Целый день пытался впихнуть в видеорегистратор 1996 года с IDE HDD, жесткий SATA через переходник SATA -> IDE, не прокатило. Так и не занимался ДДНС, догадываюсь что объема прочитанного достаточно для настройки, но вот не хватает малюсенького пинка =) С горя заказал себе книгу ¨DNS и BIND¨.

dmitryst
30-03-2011, 13:50
Да, полноценный ДНС, точнее ДДНС. »
тут я вам не помощник.

почему не форвардится inet.fms в 127.0.0.1, товарищ телепат? »
товарищ коллега, для начала покажите ваш /etc/hosts (вообще, туда-то и надо добавить 127.0.0.1 inet.fms)

Жёсткий оффтоп! :laugh:
P.S. Целый день пытался впихнуть в видеорегистратор 1996 года с IDE HDD, жесткий SATA через переходник SATA -> IDE, не прокатило. »
у нас продается вот такая кака http://ultra.ge/product_details_eng.php?id_products=3974. С ней работает почти все, где я ее применял. Там чип JB36х, типа стандартный, видится из биоса и прекрасно загружается. Насчет регистратора не знаю.

kyzmi4
31-03-2011, 09:47
Ну вообщем я его победил. Все всем выдается, получается и обновляется.

/etc/hosts
127.0.0.1 localhost

Волнует меня только то, что команда dig @127.0.0.1 localhost. a не выдает ответа =\


Жёсткий оффтоп!
P.S. Выглядит также переходник, только чип на нем JM20330. Терзают мутные сомнения что диск SATA II, а переходник SATA -> IDE.

ashota
31-03-2011, 10:18
У меня сделано так:
1) в файрволе открыл доступ все ко всем по 53 порту
2) файл hosts
::1 localhost localhost.*****ru
127.0.0.1 localhost localhost.*****.ru
192.168.3.254 ****.ru ******
192.168.3.254 *****.ru.
Ну вместо звездочек свой домен
3) конф файл dhcpd.conf
ddns-update-style interim;

default-lease-time 14400;
max-lease-time 16200;
authoritative;

log-facility local7;

subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.1 192.168.3.100;
option routers 192.168.3.254;
option ntp-servers 192.168.3.254;
option subnet-mask 255.255.255.0;
option domain-name "******.ru";
option domain-name-servers 192.168.3.254, DNS провайдера
}

key DHCP_UPDATER {
algorithm HMAC-MD5;
secret "секретный ключ";
};
zone 3.168.192.in-addr.arpa.{
primary 127.0.0.1;
key DHCP_UPDATER;
}
zone *****.ru.{
primary 127.0.0.1;
key DHCP_UPDATER;
}


файл named.conf

acl "corpnets" { 192.168.3.0/24; 192.168.10.0/24; 127.0.0.1; };

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";
version "Xren vam";
max-cache-size 100M;

listen-on {127.0.0.1; 192.168.3.254;};

allow-query { "corpnets"; };
allow-recursion { "corpnets"; };
allow-transfer { "corpnets"; };
};

key DHCP_UPDATER {
algorithm HMAC-MD5;
secret "тот же самый секретный ключ";
};
zone "." {
type hint;
file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "dynamic/localhost.rev";
};

zone "********.ru" {
type master;
file "dynamic/*****";
allow-update { key DHCP_UPDATER; };
};


zone "3.168.192.in-addr.arpa" {
type master;
file "dynamic/localnet.rev";
allow-update { key DHCP_UPDATER; };
};

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
algorithm hmac-md5;
secret "тот же самый секретный ключ";
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

в директорию, куда я разместил файлы зон, на него должно быть права на пользователя и группы bind. Еще раз повторюсь, вместо звездочек, свой домен, а секретный ключ можно сгененрировать или создать сам. Да еще нужно создать файл, там же где named.conf rndc.conf
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "тот же самый секретный ключ";
};

options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
Думаю, все что тут написано, ты с умом переведешь на свою систему, все должно работать. У меня работает. Пользовался статьей чуть-чуть подправляя http://www.lissyara.su/articles/freebsd/programms/dns+dhcp/

kyzmi4
31-03-2011, 10:55
Думаю, все что тут написано, ты с умом переведешь на свою систему, все должно работать. У меня работает. »

У меня тоже работает, спасибо. Конфиги выложил у себя http://kyzmi4-freebsd.livejournal.com/
А немоглибы еще показать ваши файлы зон.
Привел host, в ваш вид.
Сейчас меня ждет SQUID. =)

kyzmi4
04-04-2011, 12:16
Помогите в решении вопроса с IPFW.

Есть очевидное правило:

${fwcmd} add allow tcp from any to me dst-port 22

Я полагаю его выполнение, что все (0.0.0.0/0) могут подлючится ко мне на порту 22.
А вот фиг батенька, проходят три пакета и все, putty на ноутбуке сообщает Connection timed out.
tcpdump -ni xl0 port 22:

11:5719.713452 IP 192.168.1.10.8518 > 192.168.1.1.22: Flags [S], seq 1770059954, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 0 ecr 0,nop,nop,sackOK], lenght 0

И так 3 раза, счетчик правила щелкает.
Также с правилом:

${fwcmd} add allow tcp from any to ${oip} 80 via fxp0


ОЧень долго мучался с DHCPD, победил.
rc.conf:

hostname="inet.fms"
keymap="ru.koi8-r.win"
font8x8="koi8-r-8x8"
font8x14="koi8-r-8x14"
font8x16="koi8-r-8x16"
keyrate="fast"
defaultrouter="21x.100.148.53"
firewall_enable="YES"
firewall_script="/etc/rc.firewall.my"
sshd_enable="YES"
named_enable="YES"
#named_flags="-u bind -g wheel"
apache22_enable="YES"
ifconfig_fxp0="inet 21x.100.148.54 netmask 255.255.255.252"
ifconfig_xl0="inet 192.168.1.1 netmask 255.255.255.0"
dhcpd_enable="YES"
dhcpd_ifaces="xl0"
squid_enable="YES"

rc.firewall.my:

#!/bin/sh -
fwcmd="/sbin/ipfw"
#Внешний
oif="fxp0"
oip="21x.100.148.54"

#Внутренний
iif="xl0"
iip="192.168.1.1"
MyLan="192.168.1.0/24"

${fwcmd} -f flush

#loop
${fwcmd} add allow all from any to any via lo0

#ICMP
${fwcmd} add allow icmp from any to any icmptype 0,3,4,8,11

#SSH
${fwcmd} add allow tcp from any to me 22

#DNS
${fwcmd} add allow udp from any to any 53
${fwcmd} add allow udp from any 53 to any

#DHCP
${fwcmd} add allow udp from any to any 67 via ${iif}
${fwcmd} add allow udp from any 68 to any via ${iif}
${fwcmd} add allow udp from any 67 to any via ${iif}
${fwcmd} add allow udp from any to any 68 via ${iif}

#WWW
${fwcmd} add allow tcp from any to ${oip} 80 via ${oif}

#SQID
${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${oif}


Про сквид я вообще пока не зарекаюсь.

Извините меня!
Должны быть правила для входящего и исходящего.
SSH дополнил:
${fwcmd} add allow tcp from me 22 to any И все заработало
WWW дополнил:
${fwcmd} add allow tcp from ${oip} to any via ${oif} И тоже все заработало.
Но все равно, мне кажется, что где-то проще можно сделать =)

dmitryst
04-04-2011, 12:35
Но все равно мне кажется что гдето проше можно сделать »
Номера правил принято ставить явно ;)
${FW} add 10 allow log tcp from any to me 22 via ${out_if}
${FW} add 11 allow tcp from me 22 to any via ${out_if}

например

kyzmi4
04-04-2011, 14:25
Да, да товарищь телепат. А еще у меня ядро собрано без IPFIREWALL_DEFAULT_TO_ACCEPT. Тобишь:
${fwcmd} add allow tcp from any to me 22, будет конектится в одну сторону, но обратно ответа не будет и получим Connection timed out.
Но если добавить правило ${fwcmd} add allow tcp from me 22 to any, то все заработает. Хотя почитав повнимательнее мануал, я узнал о функции keep-state. Но почемуто ${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${oif} keep-state, не работает, то есть работает но страница пишет: Error The requested URL could not be retrieved, Система вернула: (13) Permission denied. Это пока главная задача.

dmitryst
04-04-2011, 17:05
Но почемуто ${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${oif} keep-state, не работает, то есть работает но страница пишет: Error The requested URL could not be retrieved, Система вернула: (13) Permission denied. Это пока главная задача. »
невнимательно мануал читали, товарищ коллега :)
Чтобы использовать keep-state, сначала надо определить правило с setup, а вот дальнейшие пакеты как раз и пойдут по правилу с keep-state (т.е. первый пакет смотрит правило с sеtup-ом, если все нормально, то в дальнейшем все пакеты этого сеанса идут по правилу с keep-state). Я динамическими правилами не пользуюсь, хватает обычных.

${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${oif} keep-state, не работает »
уберите keep-state, тут он вообще не нужен

PS. нумерация правил таки хорошая вещь ;)

kyzmi4
04-04-2011, 22:11
уберите keep-state, тут он вообще не нужен »
Ну без него он вообще ничего не делал. ^_^ Теперь хоть страницу с ошибкой выдает.
А почему же у меня работает такое правило:
${fwcmd} add allow tcp from any to me 22 keep-state, а
просто ${fwcmd} add allow tcp from any to me 22 ужо не работает?

Делаю прокси прозрачным, с подключенной машины пытаюсь выйти в инет. Мне выдается


Error The requested URL could not be retrieved
Система вернула: (13) Permission denied.



А в cache.log пишет:

IpIntercept.cc(250) IpfInterception: NAT open failed : (2) No such file or directory.


В гугле искал, вроде нашел решение, но он не сработало.
https://wiki.andrewmercer.net/index.php/Squid_-_Transparent_Proxy
Там помогло, пересобрать сквид с поддержкой всех фаерволов.
Нат, не запущен, ибо пока он вообще не нужен. Настроен DHCP, DDNS, IPFW c правилом в конце deny all.

dmitryst
04-04-2011, 22:41
Нат, не запущен, ибо пока он вообще не нужен. »
это как? ))) Что, прям вся сетка со своих 192,168,х,х ломится в интернет, что ли?
Делаю прокси прозрачным, с подключенной машины пытаюсь выйти в инет. Мне выдается »
дайте конфиг ipfw

kyzmi4
04-04-2011, 22:50
это как? ))) Что, прям вся сетка со своих 192,168,х,х ломится в интернет, что ли? »
На прозрачный прокси ломится, кроме www им ничего не надо. (Я так сказал =)) Конечно потом будет нат, но урезанно до почты и аськи например.

Товарищь телепат, время уже позднее, конфиги на сервере, по ssh у меня рут заблокирован, кофиг ipfw отказывается читаться. Приятного вам вечера с чаем за познанием не познанного. Утром обязательно скину =)

dmitryst
05-04-2011, 01:31
На прозрачный прокси ломится, кроме www им ничего не надо. (Я так сказал ) Конечно потом будет нат, но урезанно до почты и аськи например. »
ну и как, по-вашему, из сети 192,168,1,0 комп пошлет пакет, скажем, 8,8,8,4 и примет его? (Хотя, спорить не буду, я уже тоже в отключке, завтра с утра вырублю НАТ и посмотрим, кто куда через прокси пойдет...)
Приятного вам вечера с чаем за познанием не познанного. »
спасибо, взаимно.
конфиги на сервере, по ssh у меня рут заблокирован, кофиг ipfw отказывается читаться. »
вот и оно, непознанное! :laugh: НЕ РАБОТАЙТЕ ОТ РУТА!!! Заведите себе пользователя с неадекватным логином и таким же паролем, пропишите в sudo.conf - и все. Зашел юзером, sudo -i - рут!

kyzmi4
05-04-2011, 10:49
вот и оно, непознанное! НЕ РАБОТАЙТЕ ОТ РУТА!!! Заведите себе пользователя с неадекватным логином и таким же паролем, пропишите в sudo.conf - и все. Зашел юзером, sudo -i - рут! »
Не, я чего-то там в конфигах накосипорил. Вообщем хотел, чтобы залогинится можно только под юзером, а потом sudo и пароль рута ввести.
завтра с утра вырублю НАТ и посмотрим, кто куда через прокси пойдет... »
Жду =)

Конфиги:
rc.firewall.my

#!/bin/sh -
fwcmd="/sbin/ipfw"
#Интернет
oif="fxp0"
oip="21x.100.148.54"

#Локалка
iif="xl0"
iip="192.168.1.1"
MyLan="192.168.1.0/24"

${fwcmd} -f flush
${fwcmd} add check-state

#Loop
${fwcmd} add allow all from any to any via lo0

#Я тут король
#${fwcmd} add allow tcp from me to any out via ${oif} setup keep-state uid root

#ICMP
${fwcmd} add allow icmp from any to any icmptype 0,3,4,8,11

#SSH
${fwcmd} add allow tcp from any to me 22 keep-state

#DNS
${fwcmd} add allow udp from any to any 53
${fwcmd} add allow udp from any 53 to any

#DHCP
${fwcmd} add allow udp from any to any 67 via ${iif}
${fwcmd} add allow udp from any 68 to any via ${iif}
${fwcmd} add allow udp from any 67 to any via ${iif}
${fwcmd} add allow udp from any to any 68 via ${iif}

#WWW
${fwcmd} add allow tcp from any to ${oip} 80 via ${oif} keep-state
#${fwcmd} add allow tcp from ${oip} 80 to any via ${oif}

#SQID
${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${iif} keep-state

#Iperf
${fwcmd} add allow tcp from any to me 5002 via ${oif}
${fwcmd} add allow tcp from me 5002 to any via ${oif}

Только не надо пристреливать меня сразу =)

rc.conf

hostname="inet.fms"
keymap="ru.koi8-r.win"
font8x8="koi8-r-8x8"
font8x14="koi8-r-8x14"
font8x16="koi8-r-8x16"
keyrate="fast"
defaultrouter="21x.100.148.53"
firewall_enable="YES"
firewall_script="/etc/rc.firewall.my"
sshd_enable="YES"
named_enable="YES"
#named_flags="-u bind -g wheel"
apache22_enable="YES"
ifconfig_fxp0="inet 21x.100.148.54 netmask 255.255.255.252"
ifconfig_xl0="inet 192.168.1.1 netmask 255.255.255.0"
dhcpd_enable="YES"
dhcpd_ifaces="xl0"
squid_enable="YES"


UPDATE:
после правила ${fwcmd} add fwd 127.0.0.1,3128 tcp from ${MyLan} to any 80 via ${iif}, добавил ${fwcmd} add allow all from any to any и все заработало. Но теперь получается я весь открыт. =\ Где то я пропустил образовательный процесс, ведь мне надо чтобы по умолчанию все закрыто было, вот и собрал без IPFIREWALL_DEFAULT_TO_ACCEPT, чтобы самому открыть все что надо.




© OSzone.net 2001-2012