пятница, 26 июля 2013 г.

FreeBSD 9. Защита шлюза и настройка прокси-сервера squid. Часть 2

Эта заметка является второй частью из цикла настройки полнофункционального сервера на базе FreeBSD 9. Первая часть тут.
В этой же заметке будет рассказано о базовой настройке кэширующего DNS и прозрачного шлюза natd, а основное внимание будет уделено настройке кэширующего прокси-сервера squid.
Первым делом нужно настроить DNS для преобразования имен в ip-адреса и наоборот.
Отредактируем файл демона named:
# ee /etc/namedb/named.conf
acl ACCESS { 127.0.0.1; 10.0.2.0/24; };
options {
listen-on { 127.0.0.1; 10.0.2.15; }
allow-recursion { ACCESS; };
forwarders {
10.0.2.3;
192.168.0.1;
};
};

Добавим в автозагрузку и запустим демон:
# ee /etc/rc.conf
named_enable="YES"

# /etc/rc.d/named start

Проверка:
# ps -ax | grep named
# dig @127.0.0.1 freebsd.org A

Далее настроим прозрачный шлюз natd и файерволл ipfw для обеспечения доступа к интернету из локальной сети.

Добавим в автозагрузку:
# ee /etc/rc.conf
gateway_enable="YES"
natd_enable="YES"
natd_interface="em0"
firewall_type="/etc/firewall.conf"

Настройка файерволла:
# ee /etc/firewall.conf
add 4000 divert natd ip from any to any via em0
add 65500 allow ip from any to any

# natd -n em0
# /etc/rc.d/ipfw restart

В итоге получился прозрачный шлюз.
Для подключения пользователей windows в сети, необходимо указать ip-адрес сервера 10.0.0.1, как шлюз по умолчанию и DNS сервер.

Так как доступ в интернет у нас настроен, и, по сути, имеется неконтролируемый доступ пользователей сети к интернету, то нужно их определенным способом ограничить. Для это стоит настроить кэширующий прокси-сервер squid.

Установка:
# cd /usr/ports/www/squid
# make install clean

Базовая настройка:
# ee /usr/local/etc/squid/squid.conf
acl localnet src 192.168.0.0/24

# squid -z
# ee /etc/rc.conf
squid_enable="YES"

# /usr/local/etc/rc.d/squid start

Таким образом, для пользования прокси-сервером, нужно записать настройки прокси в браузере (пример Firefox):

На скрине видно, что адрес прокси: 192.168.0.10 (ip-адрес машины, на котором установлен прокси-сервер) и порт 3128 (squid).

Теперь разрешим доступ к интернету только определенному пользователю, например с ip-адресом 192.168.0.90:
# ee /usr/local/etc/squid/users.txt
192.168.0.90

# ee /usr/local/etc/squid/squid.conf
acl localnet src 192.168.0.0/24
acl users src "/usr/local/etc/squid/users.txt"
...
http_access allow users

http_access deny all

# squid -k reconfigure

Теперь можно проверить, для пользователя с ip-адресом 192.168.0.90 доступ в интернет есть, остальным - нет.

Теперь сделаем наоборот, всем разрешим, а нашего предыдущего юзера не пустим в интернет:
# ee /usr/local/etc/squid/squid.conf
...
http_access allow localnet !users
http_access deny all

# squid -k reconfigure

Проверка:

Юзер не может воспользоватсья интернетом.

Сделаем запрет доступа к определенным сайтам, например vk.com youtube.com, сайтам и поисковым запросам, соответствующих регулярному выражению audio, video, fun:
# ee /usr/local/etc/squid/squid.conf
acl localnet src 192.168.0.0/24
acl dom_deny dstdomain vk.com youtube.com
acl url_deny url_regex "/usr/local/etc/squid/url.txt"
...
http_access allow localnet !dom_deny !url_deny

# ee /usr/local/etc/squid/url.txt
audio 
video
fun

Проверка:
Доступ к google.ru у нас разрешен, поэтому проблем нет.
А вот при подключении к vk.com, youtube.com, fun.ru выдается ошибка пользователя прокси.



Защита про регулярке также работает, скриншот, после попытки погуглить на тему "audio":

Сделаем так, чтобы сообщение об ошибке выводилось на русском языке:
# ee /usr/local/etc/squid/squid.conf
error_directory /usr/local/etc/squid/errors/Russian-1251

В squid доступна аутентификация пользователей. То есть, для того, чтобы получить доступ в интернет, нужно ввести логин и пароль пользователя.
# ee /usr/local/etc/squid/squid.conf
auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/squid.passwd
auth_param basic children 4
...
acl localnet src 192.168.0.0/24
acl auth_users proxy_auth REQUIRED
...
http_access allow localnet auth_users
http_access deny all

# grep amet13 /etc/master.passwd >> /usr/local/etc/squid/squid.passwd
# squid -k reconfigure

Прозрачный прокси, это когда весь трафик пользователя принудительно идет через прокси, то есть не надо указывать настройки прокси в браузере. Все что войдет в 80-й порт, перенаправится на порт 3128 squid'а.
Делается это так:
# ee /usr/local/etc/squid/squid.conf
http_port 3128 transparent

# squid -k reconfigure

# ee /etc/firewall.conf
add 4000 divert natd ip from any to any via em0
add fwd 127.0.0.1, 3128 tcp from any to any 80 via em1
add 65500 allow ip from any to any

# /etc/rc.d/ipfw restart

UPD: 28.07.2013
Третья часть тут.

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