Айтишный BREAD

Итак, приступим.

Мы же сейчас выступаем в виде интересующихся о том, что же делает эта красная кнопочка системных архитекторов и планируем так, чтобы всё идеально работало и был запас на будущее по минимально вложенным средствам.

Имеем сервер обычный комп Athlon X2 c 2 гб памяти и 2 сетевыми картами. А нам больше и не надо для шлюза, он больше 100 мб\с прокачает и не задохнется.

Устанавливаем чистый дебиан без гуя естественно. Размечаем диски таким образом, чтобы для /var и /usr было много места. По сути /home можем даже не выделять в другой раздел, ибо он нам не нужен. Можно просто разметить как корень весь диск. Можно сделать так. / – 20%, /var – 60%, /usr – 20%. Или воткнуть под /var отдельный быстрый диск. Можно оставить это дело великому установщику, который умнее нас и всё правильно сделает. Почему так? Потому что нам надо хранить кучу логов доступа в сеть, архивы хентая кэш прокси, возможно локальный сайт, да и мало ли.

Устанавливаем всё это дело, ставим только стандартные утилиты включаем прозрачность рабочего стола и openssh для наших нужд. После установки нам надо сразу же начать с сети, увидеть обе ли сетевые карты работают, понять какая и куда смотрит по eth0 и eth1. Прописать внутренней сети например eth0 внутренние статические адреса. Для этого открываем редактором файл.

nano /etc/network/interfaces

Пишем в нем строки по сетевым подключениям, типа таких:

allow-hotplug eth0

iface eth0 inet static

            address 192.168.1.10

            netmask 255.255.255.0

 

allow-hotplug eth1

iface eth0 inet dhcp

Закрываем редактор, сохраняем, делаем перезапуск сети:

service network restart /etc/init.d/networking restart.

Теперь «попингуем» внутренние ресурсы. Должна появиться локальная сеть. Далее можем смело отключать клаву, монитор и ставить в самый дальний пыльный темный угол стойку\шкаф и на место будущего включения интернета.

После установки «тудакуданада» и включения, сервер сам должен загрузиться. По идее мы должны были поставить и OpenSSH server. Если это так, то подключаемся к системе удалено. Из под «Винды» с помощью Putty (не забываем сменить кодировку на UTF-8), из под «линухов» с помощью встроенного клиента ssh через терминал ssh sysadmin@192.168.1.10 .

Итак, мы получили подконтрольный нам удаленный доступ к серверу. Подключение к интернету у нас через PPPoE. Чтобы подключиться к интернету мы будем использовать программу pppoeconf , но честно сказать я ставил систему с работающим интернетом и установил эту программу через интернет из репозиториев, а когда интернета нет, то я, надеюсь, она есть на диске с дистрибутивом(не проверял). Чтобы поставить программу с диска введем aptcdrom install pppoeconf и, если она есть там, то она установится. После запуска появится «псевдографическое» окно в терминале. Утилита произведет поиск сетевых устройств и выведет их на экран, далее она произведет поиск концентратора на этих устройствах. Если на этом этапе pppoeconf выдаст отрицательный результат – проверьте правильность подключения и доступность концентраторов. Следующий шаг – выбор «популярных параметров» – в большинстве случаев стоит согласиться. Далее утилита запросит Ваш логин, а затем – пароль. Теперь – выбор способа указания DNS серверов. Опять же, в большинстве случаев следует согласиться на получение адресов DNS серверов автоматически. Далее Вам предложат ограничить размер MSS до 1452-х байт – как правило, стоит согласиться. Следующий вопрос – устанавливать ли подключение автоматически при загрузке компьютера. Последний вопрос утилиты – установить ли соединение сейчас. pppoeconf по-умолчанию создает для подключения имя dsl-provider. Управлять подключением потом можно при помощи команд:

pon dsl-provider # Для подключения

или

poff dsl-provider # Для отключения.

plog для просмотра.

Потом добавим необходимый нам репозиторий. Для этого откроем файл хранения списков доступных репозиториев: nano /etc/apt/source.list . И добавим туда бэкпорты основого репозитория дебиан, а так же возможность устанавливать проприетарные программы не лицензированных под GPL, всё это в таком виде (приведу весь список от 6 го дебиана):

GNU nano 2.2.4               Файл: /etc/apt/sources.list

 

deb http://mirror.yandex.ru/debian/ squeeze main conntrib non-free

deb-src http://mirror.yandex.ru/debian/ squeeze main

 

deb http://security.debian.org/ squeeze/updates main

deb-src http://security.debian.org/ squeeze/updates main

 

# squeeze-updates, previously known as ‘volatile’

deb http://mirror.yandex.ru/debian/ squeeze-updates main

deb-src http://mirror.yandex.ru/debian/ squeeze-updates main

 

#Бэкпорты

deb http://backports.debian.org/debian-backports squeeze-backports main

 

Для 7ой версии тоже самое, только название дистрибутива меняется.

Ну и начнем со стандартного: aptget update && aptget upgrade . Обновились на последние стабильные версии программ и ядра. Приступим к установке нужных нам программ (на сервер я устанавливаю все программы по одной, а не скопом, чтобы прочитать, кто что требует и на что ругается): apt-get install <имя программы>. Нам приблизительно нужны основные htop, ntop, dstat, clamav, dnsmasq, mc, squid3, openvpn и еще может что то по мелочи, а так же понадобится в дальнейшем java, perl, apache2 и php, но их будем ставить во время настройки статистики.

SQUID3.

Приступим к настройке squid3.

Файлы конфигурации хранятся по пути nano /etc/squid3/squid.conf . Там очень много строк конфигураций, действительно нужных в той или иной сфере применения, данный прокси-сервер очень гибок в настройке и его можно допилить напильником под практически любые нужды и нагрузки в пределах корпоративной сети. Полное освоение данного программного продукта вполне реализуемо, в сети множество простых и сложных схем реализации и описаний что к чему и как в конфигах, да и сам конфиг подробно описан и задокументирован. Замечу лишь одну деталь, с настройками кэша на диске и в оперативной памяти следует разбираться на месте в конкретной сети. Универсального способа не существует, но если совсем ничего не хочется настраивать, то можно оставить все параметры по умолчанию – работать точно будет.

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

root@gateway:/home/sysadmin# cat /etc/squid3/squid.conf | grep -v ‘^#’ | sed ‘/^$/d’ | more

acl manager proto cache_object

acl localhost src 127.0.0.1/32 ::1

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

acl localnet src 192.168.1.0/24 # RFC1918 possible internal network

acl localopenvpn src 192.168.10.0/24 # Сетка локальная openvpn

acl SSL_ports port 443

acl Safe_ports port 80         # http

acl Safe_ports port 82         # http://95.167.0.226:82 Площадка по промышленной безопасности.

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 9443       # https://sbi.sberbank.ru:9443/ic/ Сбербанк бизнесхуизнес

acl CONNECT method CONNECT

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access allow localhost

http_access allow localopenvpn

http_access deny all

http_port 8080 intercept

http_port 192.168.10.1:8080 intercept

cache_mem 512 MB

maximum_object_size_in_memory 1024 KB

cache_dir ufs /var/spool/squid3 20128 16 256

maximum_object_size 50096 KB

coredump_dir /var/spool/squid3

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

 

Таков полный вид конфигурации прокси-сервера. Проверим раздает ли он интернет, прописав в браузере ip адрес и порт сервера(192.168.1.10:8080). Если страницы открываются, значит всё хорошо и можно приступать дальше.

IPTABLES.

Далее мы приступим к самому интересному, к настройке iptables. Вообще это очень хороший инструмент для работы с сетью, позволяет делать из линукса полноценный гибкий транзитный маршрутизатор. Для ознакомления я даже приведу ссылку http://www.opennet.ru/docs/RUS/iptables/ и это отче наш в мире пакетного фильтра iptables. Без первоначального понятия сетевой модели и как идет пакет, сложно понять как идет пакет уже по цепочкам iptables и в ядре. А для применения правил фильтра, необходимо знать и четко представлять прохождение пакетов через цепочки правил и каким образом делается выбор о дальнейшей жизни трафика.

Просмотр текущих правил:

Iptableslist ,

Просмотр счетчиков трафика по каждому правилу

IptablesLvn

 

Приведу полный скрипт iptables, у меня он лежит тут.

/etc/start_fw

Данный скрипт засовываем в автозапуск, не забыв сделать его исполняемым и дать права на запись только владельцу root’у:

chmod –x /etc/start_fw

chmod 711 /etc/start_fw

И дописываем скрипт в автозагрузку последним модулем, то есть в файл nano /etc/rc.local перед exit 0 впишем наш исполняемый файл:

  /etc/start_fw

 

exit 0 .

 

 

Скрипт без комментов:

root@gateway:/home/sysadmin# cat /etc/start_fw | grep -v ‘^#’ | sed ‘/^$/d’ | more

INET=”ppp0″

IPINET=”*.*.*.*”

LOCAL=”192.168.1.10″

LOCALNET=”192.168.1.0/24″

SQUIDPORT=”8080″

SYSADMIN=”192.168.1.5″

OTHERPORTS=”1024:65535″

WFBOB=”192.168.1.99″

WFPIZZA=”192.168.1.98″

LOCALOPENVPN=”192.168.10.0/24″

iptables -F INPUT

iptables -F FORWARD

iptables -F OUTPUT

iptables -t nat -F PREROUTING

iptables -t nat -F POSTROUTING

iptables -t mangle -F

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

iptables -A INPUT -d $IPINET -p TCP ! –syn -m state –state NEW -j DROP

iptables -A INPUT -d $IPINET -p TCP –syn ! –dport 1723 -j DROP

iptables -A INPUT -m conntrack –ctstate NEW -s 192.168.1.0/24 -j ACCEPT

iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p TCP -d $IPINET –dport 1723 -j ACCEPT

iptables -A INPUT -p 47 -j ACCEPT

iptables -A INPUT -p UDP –dport 5352 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p TCP -m multiport –dports 20,21,22,25,110,443,667,4949,8080 -j ACCEPT

iptables -A INPUT -i eth2 -p UDP –dport 67:68 –sport 67:68 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p icmp -j ACCEPT

iptables -t nat -A PREROUTING -s $LOCAL -p tcp –dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -s $LOCALNET ! -d $LOCALNET -p tcp –dport 80 -j REDIRECT –to-port 8080

iptables -t nat -A PREROUTING -s 192.168.10.1 -p TCP –dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -s $LOCALOPENVPN ! -d $LOCALOPENVPN -p TCP –dport 80 -j REDIRECT –to-port 8080

iptables -t mangle -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

iptables -A FORWARD -m conntrack –ctstate NEW -s 192.168.1.0/24 -j ACCEPT

iptables -A FORWARD -m conntrack –ctstate NEW -s 192.168.10.0/24 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 20,21,22 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 20,21,22 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 80,443,445,5190 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 80,443,445,5190 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 8000,9443,10080 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 8000,9443,10080 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 25,110,143,465,587,993,995,2525 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 25,110,143,465,587,993,995,2525 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 3000,3389,4899,5900,8888,10000 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 3000,3389,4899,5900,8888,10000 -j ACCEPT

iptables -A FORWARD -p udp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –sports 53,1701,24542 -j ACCEPT

iptables -A FORWARD -p udp -m conntrack –ctstate ESTABLISHED,RELATED -m multiport –dports 53,1701,24542 -j ACCEPT

iptables -A FORWARD -p icmp -j ACCEPT

iptables -A FORWARD -p udp –dport 24542 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED –dport 5001:5030 -j ACCEPT

iptables -A FORWARD -p tcp -m conntrack –ctstate ESTABLISHED,RELATED –sport 5001:5030 -j ACCEPT

iptables -A FORWARD -m conntrack –ctstate NEW -p tcp –dport 0:65535 -j LOG –log-level debug –log-prefix “[DROP] TCP CONNTRACK NEW: “

iptables -A FORWARD -p tcp –syn -j LOG –log-level debug –log-prefix “[DROP] TCP SYN: “

iptables -t nat -A PREROUTING -d $IPINET -p tcp –dport 80 -j DNAT –to-destination 192.168.1.7

iptables -A FORWARD -d 192.168.1.7 -p tcp -m tcp –dport 80 -j ACCEPT

iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT

iptables -A INPUT -p ALL -s 192.168.1.0/24 -i lo -j ACCEPT

iptables -A INPUT -p ALL -s 192.168.10.0/24 -i lo -j ACCEPT

iptables -A INPUT -p ALL -s $IPINET -i lo -j ACCEPT

iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT

iptables -A OUTPUT -p ALL -s $IPINET -j ACCEPT

iptables -A OUTPUT -p ALL -s 192.168.1.0/24 -j ACCEPT

iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT

iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

echo “1” > /proc/sys/net/ipv4/ip_forward

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *