LinuxForum.Fans
Тема

Прокси с одной сетевухой

Автор: bitl 17 сообщений 5133 просмотров
#53132

Есть задача, быстро организовать проксик для небольшого офиса, чтобы отдельным юзерам разрешить доступ в web, а другим только почту (pop/smtp), одновременно хочеться вести логи и возможно в будущем лимитировать трафик.

Дано:
- Дохлый системник, со 128 ОЗУ, с одной сетевухой
- Интернет через adsl-модем d-link (pppoe, модем роутером)

Как я сделал:

- Поставил xubuntu, отключил иксы (они всеравно грузились полчаса, и свопило всё).

- Поставил Squid, в конфиг дописал (перечислены адреса кому доступен http):

text
acl Local src 192.168.1.2
acl Local src 192.168.1.3
acl Local src 192.168.1.4
http_port 3128
http_access allow Local
http_access deny all

- Для "мыла" создал такие iptables-правила (добавив скриптик в автозапуск, там где сетка поднимается):

text
iptables -A FORWARD -o eth0 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -o eth0 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 110 -j ACCEPT

iptables -A FORWARD -o eth0 -p tcp -j REJECT

sysctl net.ipv4.ip_forward=1

- На adsl-модеме зафильтровал(запретил) доступ всем кроме "прокси-сервера"
---------------------------------

И собственно вопрос. На сколько это хреново?

Сразу говорю, в iptables я не знаток, сделал почти наугад. А готового решения для такой странной архитектуры (когда сетевых устройств не два, а одно) в инете не видел.

Так что, кто по сетям знаток, раскритикуйте :)

#53152

Даём модему адрес из другого диапозона. Ограничением доступ к нему маской... ВОбщем поднимаем алиас
Допустим eth0 имеет адрес 192.168.0.1 и маску 24. Это сеть для офиса
А вот уже алиас eth0:1 получит адрес 172.16.0.2 и маску 24. Тут будет модем с адресом 172.16.0.1.

Вот так уже будет работать...

#53186
zerg написал:

Вот так уже будет работать...

Да оно вобщем-то и так работает, как я описал.

#53200

bitl, в вашей схеме не весь трафик идёт через прокси, а только трафик в интернет. Остальноё отдаёт сам модем... Дополнительная нагрузка. Запутаная цепочка. Нафиг надо?

#53279

Для нормальной работы сквида - памяти мало. добавьте хотя бы до 512
Это и всей системе на пользу пойдёт.
И зачем вам в правилах форвард?
Во первых карточка одна, во вторых инет "раздаёт" сквид.
У вас должны быть цепочки INPUT
и OUTPUT

#53281

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

#53314
zerg написал:
bitl, в вашей схеме не весь трафик идёт через прокси, а только трафик в интернет. Остальноё отдаёт сам модем... Дополнительная нагрузка. Запутаная цепочка. Нафиг надо?

Непонял. Так мне и надо чтобы трафик интернетовский через прокси шел, зачем ещё какойто? А модем что отдаёт? Он отдаёт только прокси-серверу.

#53316
Vadimsky написал:

И зачем вам в правилах форвард?
Во первых карточка одна, во вторых инет "раздаёт" сквид.
У вас должны быть цепочки INPUT
и OUTPUT

У меня там включен роутинг (sysctl net.ipv4.ip_forward=1). Потом разрешаеющие правила для 25 и 110 порта (FORWARD), и запрет роутинга на все остальные. Так как роутинг через прокси мне нужен только для почты, а http через Squid идёт.

Я вобщемто и интерисуюсь, что я сделал не правильно? Схема работает. Но нехотелось бы чтобы оказалось, что какойто трафик помимо интернетовского стал гонятся через этот "прокси", если на клиентских машинах в "шлюзе" будет указан айпи-шник прокси-сервера. Ну или ещё какаянить хрень.

#53347

bitl, рисуйте карту сети, пишите сетевые адреса над портами, узнайте как работает механизм форфардинга. Я умываю руки (с)

#53374
zerg написал:
bitl, рисуйте карту сети, пишите сетевые адреса над портами, узнайте как работает механизм форфардинга. Я умываю руки (с)

Тоесть сказать, почему и что у меня в данный момент неправильно вы не можете? Зачем писать тогда?

#53381

bitl, схема такая?

text

adsl > switch > proxy-server
              > PC
              > PC
#53407
i2ks написал:
bitl, схема такая?
text

adsl > switch > proxy-server
              > PC
              > PC

Если быть точнее, вот такая:

text

                     users
                        |
                        |
adsl ----NAT---->switch<------> Proxy-server 
                        |
                        |
                     users

Тоесть к модему по сути можно и в обход прокси обратится, но на нем я зафильтровал все клиенские ip-адреса с помощью его встроенного файрвола, кроме проксика.

NAT раздаёт модем. Прокси нужен только чтобы отобрать у некоторых юзеров Web, оставив им только SMTP/POP, ну и на всякий случай журнал вести, чтобы начальство само видело, сколько порнухи накачало :)

#53410

В модем-роутер редактируем таблицу "настройки фаирвола". В моём модем-роутере она так и называется: "Firewall Rules".

1. Добавляем правило о разрешении доступа нашего гейта ко всему.
2. Добавляем запрет доступа всех ко всему.

В моём модем-роутере таблица выглядит так:

text
Outbound Services
#        Enable    Service Name  Action        LAN Users  WAN Servers     Log
1        Yes       Any(ALL)      ALLOW always  172.17.0.2 Any           Never
2        Yes       Any(ALL)      BLOCK always  Any        Any           Never
Default  Yes       Any           ALLOW always  Any        Any           Never

Порядок строк важен. Но в вашем модем-роутере, возможно, нужно поменять строки 1-2 местами. Проверьте что всё работает как ожидается перед тем как двигаться дальше.

--------------------------------------------------------

Устанавливаем сквид:

text
aptitude -y install squid

В файле /etc/squid/squid.conf примерно в строку номер ~630 добавляем:

text
acl Local src 172.17.0.4
acl Local src 172.17.0.5
...

где ip адреса - это адреса компутеров, которых надо пропустить в интернет.

В спроку номер ~679, перед строкой "http_access deny all" добавляем:

text
http_access allow Local

Затем перезапускаем сквид:

text
/etc/init.d/squid restart

--------------------------------------------------------

Убедитесь что команда

text
cat /proc/sys/net/ipv4/ip_forward

выдаёт ноль. Это означает, что перенаправление трафика выключено, и пользователи никак не смогут попасть в интернет кроме как через сквид. Конфигурировать ip_tables так же не требуется.

--------------------------------------------------------

Установите в браузерах клиентов ип-адрес прокси сервера и порт 3128 в конфигурации "прокси-сервер". Настройки сети клиента изменять НЕ нужно. Т.е. клиенты должны принимать свой адрес и адрес гейта по dhcp от adsl-модема (таково поведение по умолчанию). Выход в интернет через гейт мы закрыли в начале инструкции.

--------------------------------------------------------

Это всё. Пользователи могут ходить в инетрент через сквид и никак иначе. Значение переменной ip_forward установленное в ноль (что проверено выше) гарантирует, что пользователи изолированы от интернета, и единственным их проводником является сквид.

Так же можно установить программу squidview и полюбоваться, как пользуються вашим прокси-сервером.

text
aptitude -y install squidview

Для вывода статистики, ограничения и подсчёта трафика требуються дополнительные настройки сквида.

#53413

flaf, ты сделал всё как я и описывал. За исключением того, что у тебя нет форварда, а сквид не проксирует POP и SMTP, а у меня какраз ради этого проброс и сделан, чтобы мыло работало прозрачно. Да, трафик мыла не будет учитыватся сквидом, но в моем случае это не критично.

#53420

bitl, можно личный вопрос? если вы не учитываете почтовый трафик - зачем вам вообще учет трафика? почта - это основная дыра через которую гигабайтами спамят зараженные компы. это почти 60% от всего трафика, иногда и все 90% если совсем тяжелая эпидемия.

#53473

вот хорошый пример конфига есть в этой статье: http://www.netlly.ru/index.php?option=com_content&view=article&id=18&Itemid=24

добавь в шапку запускающего скрипта вот это:

text
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle

iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD [b]DROP[/b]

это обнадёжит, что ничего кроме указанных портов 25/110 не форвардиться. ну и строка @iptables -A FORWARD -o eth0 -p tcp -j REJECT@ тогда уже не нужна.

Так же не пойму, как это у тебя работает без трансляции адресов.

text
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Установи политику по умолчанию "FORWARD DROP", и конфиг можно считать хорошим.



Есть ещё другие варианты работы клиентов с почтой:

1. Использование "port mapper"-ов на компьютере клиента. Т.е. пользователи виндовс должны будут доустановить и настроить программу HTTPort, пользователи линух - Desproxy (в репе дебиана имеется). Эти программы позволяют пробрасывать трафик с любого порта на любой другой с использованием прокси-сервера. Что позволяет слать почту через тот же сквид. Программу надо установить на клиент. Сервер остаётся без изменений.

2. Установить на сервер программу почтового сервера, например postfix или exim, и настроить в них переадресацию почты. Это позволит не включать форвардинг и нат, отфильтровывать спам, логировать почтовые запросы и т.п.



Как не странно, с gmail выданная в топике конфигурация у меня не заработала. Разберусь в течении недели и отпишу снова.

#53583
system-root написал:
bitl, можно личный вопрос? если вы не учитываете почтовый трафик - зачем вам вообще учет трафика? почта - это основная дыра через которую гигабайтами спамят зараженные компы. это почти 60% от всего трафика, иногда и все 90% если совсем тяжелая эпидемия.

в данной организации основная утечка трафика, это юзверьё, которое смотрит видео-ролики, качает что попало.

Но если бы я мог логировать сквидом почтовый трафик, было бы чудесно. Но как Squid'ом это сделать?

Войдите или зарегистрируйтесь, чтобы ответить.