Настраиваем
роутер на Linux Ubuntu NAT + Squid для ADSL модема
Установка и
настройка первоначальных параметров.
На
установки сильно заморачиваться не
будем, сложного в ней нет не чего, пройдем
по самому основному.
Для
начала нам потребуется диск с сервером
убунту (который можно скачать по адресу
http://ubuntu.ru/get
), комп прмерно пень III с частотой700MHz,
винт 40Гигов и 256 мб оперативки на борту,
я для себя ставил 512, 2 сетевухи СиДиРОМ,
клава, монитор и AGP.
Ну
поехали!
Этап
установки стандартны выбираем язык,
раскладку, место расположения, Дальше
выбираем главную сетевуху смотрящую в
нет, даем адрес, маску, днс сервера, даем
имя компу в моем случае это router, заводим
юзера, и выбираем ПО которое будем
устанавливать. Нам понадобиться только
SSH Server. Рестарт высовываем диск, отключаем
клаву, монитор они нам больше не
понадобятся, можно отключить СиДюк для
экономии энергии и улучшению быстродействия
еже с ним флоп, ЮСБ, комы и всякую ересь
которая нам нах не пригодиться на
роутере.
Идем
по SSH к нашему серверу, я со своей убунту
захожу встроенной прогой (просмотр
удаленных рабочих столов), для винды
есть хорошая утилитка PuTTY,
для корректного отображения символов
перед подключением необходимо на
закладке Window - Translation выбрать кодировку
UTF8. Если есть необходимость ограничения
доступа к серверу можно дописать в файл
/etc/ssh/sshd_config параметр AllowUsers, указав
пользователя, который имеет удаленный
доступ по SSH, например пользователь
admin:
AllowUsers admin
Для разрешения
доступа группе пользователей используют
параметр AllowGroups, а для блокировки доступа
определенным группам или пользователям
используют DenyGroups и DenyUsers.
Пробуем нет:
ping google.ru
Если все ОК
идем дальше
Обновляем список
доступного программного обеспечения:
sudo apt-get update
А затем
обновляем их до актуальной версии:
sudo apt-get upgrade
Следующим этапом
устанавливаем файловый менеджер подобный
к Norton Commander или Far — Midnight Commander (mc):
sudo apt-get install mc
Идем в sudo mcedit /etc/network/interfaces
Дописываем
второй интерфейс, пример моего конфига:
# The loopback network interface
auto lo
iface lo inet loopback
# Смотрит в нет
auto eth1
iface eth1 inet static
address 192.168.1.4 #Адрес сетевой
смотрящей в нет
netmask 255.255.255.0
#Маска сети
network 192.168.1.0
#Начало сети
broadcast 192.168.1.255
#Конец сети
gateway 192.168.1.1
#Ай-пишник модема
# dns-* options are implemented by the resolvconf
package, if installed
dns-nameservers 192.168.1.1
#Ай-пишник модема
dns-search ubuntu.local
#Как искать сервак в сети
# Смотрит в локалку
auto eth2
iface eth2 inet static
address 198.162.5.222
# Адрес сетевухи смотрящей
в локалку
netmask 255.255.255.0
#Маска сети
gateway 192.168.1.4
#Адрес сетевухи
смотрящей в нет
post-up /etc/nat-up #Это будет
позже пока несмотрим
Идем дальше, настраиваем
DNS:
sudo nano /etc/resolv.con
В данном файле нужно
указать DNS провайдера или адреса DNS
серверов иначе несможете просматривать
сайты. OpenDNS:
#OpenDNS Servers nameserver 192.168.1.1 nameserver
192.168.1.4
nameserver 198.162.5.222
Далее сохраняем
настройки и перезагружаемся. Также
вместо перезагрузки можно перезапустить
сетевые службы:
sudo /etc/init.d/networking restart
Пробуем пинг:
ping google.ru
Дальше пишем фаервол:
sudo mcedit /etc/
Настраиваем NAT
Для того чтобы
организовать общий доступ к сети интернет
нужно настроить трансляцию сетевых
адресов (NAT), это позволяет сетевым
службам внутренней сети получить доступ
к внешней сети. Для данной настройки
достаточно будет выполнить одну команду,
правда есть одна особенность: все будет
работать только до перезагрузки. На
данный момент в Linux нет механизма
сохраняющего настройки iptables при
перезагрузке сети или сервера. Для
устранения данного неудобства мы вынесем
эти настройки в отдельный скрипт, который
запускается при загрузке системы. Для
начала создаем файл скрипта:
sudo touch /etc/nat-up
Открываем его sudo mcedit
/etc/naе-up и прописаваем следующее:
#!/bin/sh
# очищаем все настройки
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#активируем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Всегда принимаем трафик на
loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
#Настройки почты
t nat -A PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp
--dport 80
j REDIRECT --to-port 3128
-A FORWARD -s 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -p tcp --dport 50 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -p tcp --dport 587 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p tcp --sport 25 -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p tcp --sport 50 -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p tcp --sport 53 -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p tcp --sport 587 -j ACCEPT
-A FORWARD -d 192.168.1.0/24 -p tcp --sport 110 -j ACCEPT
-t nat -A POSTROUTING -o eth2 -s 192.168.1.0/24 -j SNAT
--to-source 198.162.5.222
# Разрешаем соединения, которые
инициированы внутри (eth2)
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j
ACCEPT
iptables -A INPUT -m state –state NEW -i ! eth1 -j
ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -m state –state
ESTABLISHED,RELATED -j ACCEPT
# Разрешаем доступ из LAN-сети к
внешнему миру
iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Запрещаем форвардинг из внешнего
мира во внутреннюю сеть
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
# заворачиваем пакеты на 80 и 8080
порты на прокси. У кого нет – строчку
удаляем.
iptables -t nat -A PREROUTING -i eth2 -d ! 198.162.5.0/24
-p tcp -m multiport –dport 80,8080 -j DNAT –to 198.162.5.254:3128
Внеся вышеуказанные
настройки, сохраняем их (F2), а для
автоматического запуска скрипта вновь
открываем sudo mcedit /etc/network/interfaces и в самом
конце файла дописываем:
post-up /etc/nat-up
Также не забываем
дать нашему скрипту права на исполнение:
sudo chmod +x /etc/nat-up
Перезапускаем сеть:
sudo /etc/init.d/networking restart
# Generated by iptables-save v1.3.8 on Wed Nov 18 16:04:19
2009
*filter
:INPUT DROP [13831:1215721]
:FORWARD ACCEPT [618:276119]
:OUTPUT ACCEPT [1555106:1014694429]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 198.162.5.0/255.255.255.0 -i eth2 -j ACCEPT
COMMIT
# Completed on Wed Nov 18 16:04:19 2009
# Generated by iptables-save v1.3.8 on Wed Nov 18 16:04:19
2009
*nat
:PREROUTING ACCEPT [5562:487193]
:POSTROUTING ACCEPT [14944:918733]
:OUTPUT ACCEPT [14944:918733]
-A PREROUTING -s 198.162.5.0/255.255.255.0 -p tcp -m tcp
--dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 198.162.5.0/255.255.255.0 -o eth1 -j SNAT
--to-source 192.168.1.4
-A POSTROUTING -p tcp -m tcp -m multiport --ports
21,25,50,53,587,110,21002,16401,16402 -j MASQUERADE
COMMIT
# Completed on Wed Nov 18 16:04:19 2009
Если нигде
небыли допущены ошибки все будет
работать. Для того чтобы проверить
работоспособность, на машинах внутренней
сети укажем в качестве шлюза и DNS адрес
нашего роутера: 198.162.5.222 и пропингуем
любой внешний адрес, к примеру один из
OpenDNS серверов: 192.168.1.1. Вы, наверное,
удивитесь — интернет не работает.
Почему? Ведь мы указали наш роутер в
качестве DNS сервера, а он пока что таким
не является. Конечно, можно прописать
DNS на клиентской машине, но если внезапно
изменяться DNS сервера? Очень неудобно
будет каждый раз бегать их перепрошивать. Самым
приемлемым решением будет поднять на
нашем роутере полноценный DNS сервер,
но, как правило, это избыточно, поэтому
ограничиваемся простым DNS (а также и
DHCP) сервером Dnsmasq.
sudo apt-get install dnsmasq
После выполнения
установки открываем sudo mcedit /etc/dnsmasq.conf,
находим, раскомментируем и вносим
изменения в строку, что разрешает серверу
принимать DNS запросы из внутренней сети:
listen-address=127.0.0.1, 198.162.5.222
Перезапускаем
DNS сервер:
sudo /etc/init.d/dnsmasq restart
После правильного
выполнения вышеуказанных настроек на
клиентских машинах начнет работать
интернет.
Если кому
интересно Настраиваем DHCP я для себя не
делал так что у меня этот шаг пропущен.
###############################################################################
Теперь, когда наш сервер начал работу
необходимо настроить клиентские машины.
Конечно, все нужные параметры можно
прописать вручную, но что делать, если
клиентских машин слишком много, и они
расположены по всему зданию? В этом
случае мы и воспользуемся протоколом
DHCP. Он позволяет
автоматически получать все, необходимые
для корректной работы, сетевые настройки.
Ранее установленный Dnsmasq и выступит в
качестве DHCP сервера,
который очень просто настроить. Для
этого открываем /etc/dnsmasq.conf и указываем
диапазон выдаваемых адресов (в нашем
случае 10.0.0.100-150), сетевую маску и время
использования IP адреса:
dhcp-range=198.162.5100,198.162.5.150,255.255.255.0,12h
Адреса DNS сервера и шлюза сервер из
системных настроек берет автоматически.
Затем еще раз перезапускаем Dnsmasq:
sudo /etc/init.d/dnsmasq restart
После проделанной работы можно
выставить на клиенте автоматическое
получение IP адреса и убедиться в
нормальной работе сервера. Выданные
адреса можно посмотреть, выполнив
команду:

cat /var/log/syslog | grep DHCPOFFER
Все выданные IP адреса и MAC адреса
будут перечислены, с указанием кому они
присвоены.
###############################################################################
Настройка кэширующего прокси-сервера
Squid.
В достаточно большой
сети некоторая часть трафика повторяется,
и часть его иногда достигает 50%. Очень
удобно кэшировать часто повторяющиеся
запросы, снизив нагрузку на канал, тем
самым ускорить выдачу пользователю
запрашиваемых страниц и сэкономить
входящий трафик. Для выполнения этих
задач используем Squid - кэширующий прокси
с огромными возможностями.
sudo apt-get install squid
Устанавливаем
прокси-сервер и настраиваем его:
sudo /etc/init.d/squid stop
Открываем
/etc/squid/squid.conf, находим и корректируем
следующие строки, не забыв их
раскомментировать:
Указываем порт:
http_port 3128 #Кто ставил DHCP Делаем
прозрачность http_port 3128 transparent
Выполняем настройки
кэша:
cache_dir ufs /var/spool/squid 4096 32 256
Устанавливаем
лимит использования памяти:
memory_pools
on memory_pools_limit 50 MB
Задаем язык вывода
ошибок для пользователя
error_directory
/usr/share/squid/errors/Russian-koi8-r
Важное замечание! В версии Ubuntu 9.10
эта строка может выглядеть так, поэтому
рекомендуем проверить правильность
пути:
error_directory
/usr/share/squid/errors/ru
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
########################################################
#Тем кто делал по DHCP
#Указываем внутренние
сети, лишние комментируем:
# acl localnet src 10.0.0.0/24 #
RFC1918 possible internal network # #acl
localnet src 172.16.0.0/12 # RFC1918 possible internal network #
#acl localnet src 192.168.0.0/16 # RFC1918
possible internal network
#Разрешаем доступ из внутренних сетей
(найти и раскомментировать):
# http_access allow localnet
########################################################
acl ftp proto FTP
always_direct allow ftp
########################################################
acl Safe_ports port 21002
acl Safe_ports port 16401
acl Safe_ports port 16402
#########################################################
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl allow_ip src "/etc/squid/allow_ip"
#Это фаил
со списком юзеров которым даю нет
#
Создадим его sudo touch /etc/ squid/allow_ip
#
и вписуем ip юзеров в столбик
# сохраняем закрываем
#####################################################################
acl special_client src 198.162.5.14
#
Этот айпишник ходит только
acl special_url url_regex .privatbank.ua
# на
определенный адрес
acl utszn_client src 198.162.5.67
#
У этого еше и
acl utszn_url url_regex 213.186.218.163:7778
#
определенный порт
acl comodo_client src 198.162.5.0/198.162.5.224
# Обновление
антивируса комодо
acl comodo_url url_regex .download.comodo.com
# для всей
локалки
#Закрываемся:
http_access allow allow_ip
http_access allow special_client special_url
http_access deny special_url
http_access allow utszn_client utszn_url
http_access deny special_url
http_access allow comodo_client comodo_url
http_access deny comodo_url
http_access deny all
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
############################################################################
Строим кеш:
#Suggested default:
#refresh_pattern ^ftp: 1440 20% 10080
#refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern . 0 20% 4320
##############################################################################################
refresh_pattern \.bz2$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.exe$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.gif$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.gz$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.ico$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.jpg$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.mid$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.mp3$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.pdf$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.swf$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.tar$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.tgz$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.zip$ 43200 100% 43200
override-lastmod override-expire ignore-reload ignore-no-cache
################################################################################################
Затем сохраняем
файл конфигурации. Теперь строим кэш и
запускаем:
sudo /usr/sbin/squid -z sudo
/etc/init.d/squid start
Для того чтобы
проверить настройки на клиентской
машине в браузере указываем использование
прокси-сервера с адресом 198.162.5.222 и портом
3128 и убеждаемся что все исправно
работает. Теперь остается только
настроить работу прокси-сервера, чтобы
http трафик заворачивался на Squid автоматом,
без прописывания прокси на клиенте. Для
этого следует открыть sudo mcedit
/etc/nat-up и дописать
в конце строку:
# Заворачиваем http на прокси iptables
-t nat -A PREROUTING -i eth1 -d ! 198.162.5.0/24 -p tcp -m multiport
--dport 80,8080 -j DNAT —to 198.162.5.222:3128
Перезапускаем сеть:
sudo /etc/init.d/networking restart
Теперь
приступим к файрволу.
Для ознакомления и изучения, рекомендую
почитать здесь.
Тогда вы будете вносить осмысленные
изменения в систему, а не повторять мои
ошибки (=
Включим в системе форвардинг. В файле
/etc/sysctl.conf раскомментируем
строчку net.ipv4.ip_forward=1
Итак, на
текущий момент мы имеем полностью
сброшенные настройки файрвола (iptables).
Сбрасываем
цепочки: $
sudo iptables -F $
sudo iptables -F -t nat Запрещаем
все входящие и разрешаем все исходящие
и форвардинг: $
sudo iptables -P INPUT DROP $
sudo iptables -P OUTPUT ACCEPT $
sudo iptables -P FORWARD ACCEPT Разрешаем
принимать ответ на УЖЕ установленный
соединени: $
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j
ACCEPT Разрешаем
loopback-трафик: $
sudo iptables -A INPUT -i lo -j ACCEPT Разрешаем
весь трафик с нашей внутренней сети
(возьмем подсеть 5): $
sudo iptables -A INPUT -s 198.162.5.0/24 -i eth2 -j ACCEPT И,
залог прозрачности! Перенапрявляем
весь
исходящий
http-трафик
(на
порт
80) на
порт
сквида
3128: $
sudo iptables -t nat -A PREROUTING -s 198.162.5.0/24 -p tcp -m tcp
--dport 80 -j REDIRECT --to-ports 3128 $
sudo iptables -t nat -A POSTROUTING -s 198.162.5.0/24 -o eth1 -j SNAT
--to-source 192.168.1.4
Проверяем на клиенте интернет. Напомню,
что если прокси указывать не обязательно,
шлюз выставить необходимо! Однако,
после первой же перезагрузки, мы поймем,
что все наши старания ушли впустую. Научим
же их выживанию! Итак, сохраним всё
то, чем мы тут занимались: $
sudo iptables-save > /etc/firewall.conf У
меня с судо этот финт не получился (хотя
в теории вроде должен…), потому можно
сделать влогинившись в рута полностью
(su) и запустив команду, но без sudo. А
теперь создадим скрипт, заставляющий
ifupdown воскрешать наш файрвол: $
sudo nano /etc/network/if-up.d/00-iptables Впишем
в него следующее: #!/bin/sh iptables-restore
< /etc/firewall.conf Выставим
права на исполнение: $
sudo chmod +x /etc/network/if-up.d/00-iptables Не
забываем перекреститься и перезапускаем
сеть sudo /etc/init.d/networking restart/перезагружаемся
sudo reboot. Должно работать В принципе
у нас есть рабочий файрвол с прозрачным
прокси!
Все настройки выполнены, и мы можем
наслаждаться работой нашего сервера,
который позволяет не только организовать
общий доступ к сети интернет, но и
кэширует http трафик и DNS запросы, а также
кто ставил dhcp раздает клиентским машинам
для работы в сети необходимые настройки,
кто не ставил мы настроили юзеров с
общим доступом к нету, юзеров у которых
доступ к определенным сайтам по портам.
Для начала этого хватить должно, по
этим примерам можете настраивать как
фантазии хватит.
Удачи!
|