Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: iptables + squid нужен совет  (Прочитано 5755 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн OEvg85

  • Автор темы
  • Участник
  • *
  • Сообщений: 133
  • это я
    • Просмотр профиля
iptables + squid нужен совет
« : 08 Мая 2012, 13:23:12 »
Уже задавал на форуме вопрос про обустройство шлюза для небольшой сети на 30 машин. Благодаря советам форумчан выбрал схему: Ubuntu server 10.04 + iptables 1.4.4-2 + squid 2.7 + squidGuard 1.2. логи анализируются sarg'ом, установлены dhcp3-server и bind9

Крнкретно интересует связка iptables + squid. Уточняю, что в сеть смотрит eth0 (INPUT На склко я понимаю) а в интернет eth1 (OUTPUT), на eth1 динамический адрес (eth0 статика)
Для iptables в инете нарыл слеующее:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A input -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 - j ACCEPT
iptables -P FORWARD DROP
Для сквида конфиг такой:
acl all src all
acl okcana src 192.168.0.102 # Оксана здесь для примера, потом еще юзеры будут
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network

acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
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

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localnet
http_access allow localhost
http_access deny all

icp_access allow localnet
icp_access deny all

http_port 3128

hierarchy_stoplist cgi-bin ?

cache_dir ufs /var/spool/squid 100 16 256

access_log /var/log/squid/access.log squid

url_rewrite_program /usr/bin/squidGuard
url_rewrite_children 6
redirector_bypass on

#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
# example line deb packages
#refresh_pattern (\.deb|\.udeb)$   129600 100% 129600
refresh_pattern . 0 20% 4320

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

extension_methods REPORT MERGE MKACTIVITY CHECKOUT

error_directory /usr/share/squid/errors/ru

memory_pools_limit 20 MB

В данный момент

Вопрос №1: хочу чтобы эта сладкая парочка мом юзерам из локалки разрешала ползоваться только определенными портами (HTTP, HTTPS, FTP, POP3, POP3S, SMTP, IMAP, IMAPS, DNS, TCP 7500, TCP 88). Кому эту задачку лучше поручить (iptabes или squid).

Вопрос №2: посоветуйте значения для (на харде свободно около 35 гб, ОЗУ полный объем 386 МБ пти всегда свбдно около 20 МБ):
cache_dir ufs /var/spool/squid 100 16 256

memory_pools_limit 20 MB

Вопрос №3: В организации 2 подсети, планируется бухгалтерию в 3-ю выделить (и инет им давать только на 1ПК). Как реализовать?

Вопрос №4: Хочу в squid'е авторизовать ползователей по МАК-аресу. Это так:
acl okcana arp МАК ареси как тогда sarg'у объяснить кто есть кто.

 :) Заранее безмерно благодарен, всем кто не пожалеет времени и откликнется

Все говорят, что мы вместе, но не все знают в каком

Оффлайн Silverd23

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #1 : 09 Мая 2012, 08:58:39 »
Почти всё тоже самое интересует, только я на Desktop 12.04 делаю пока что, а разве нужен будет iptables если используешь squid?

Оффлайн OEvg85

  • Автор темы
  • Участник
  • *
  • Сообщений: 133
  • это я
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #2 : 09 Мая 2012, 14:43:13 »
Цитировать
а разве нужен будет iptables если используешь squid?
Мне нужен! А так впринцыпе, если на безопасности не заморачиваться, можно и route обойтись. Сквид маршрутизацией не занимается, он прокси-сервер.

 :D

Все говорят, что мы вместе, но не все знают в каком

Оффлайн Synegami

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #3 : 10 Мая 2012, 12:02:03 »
OEvg85,
Цитировать
Уточняю, что в сеть смотрит eth0 (INPUT На склко я понимаю) а в интернет eth1 (OUTPUT)
Ты немного неверно понимаешь INPUT и OUTPUT цепочки. Это ВХОДЯЩИЙ и ИСХОДЯЩИЙ трафик для твоего локального сервера(т.е. того, на котором ты настраиваешь IPTABLES). А такой трафик может прийти с любого интерфейса: и с eth0, и с eth1.
Цитировать
Вопрос №1: хочу чтобы эта сладкая парочка мом юзерам из локалки разрешала ползоваться только определенными портами (HTTP, HTTPS, FTP, POP3, POP3S, SMTP, IMAP, IMAPS, DNS, TCP 7500, TCP 88). Кому эту задачку лучше поручить (iptabes или squid).
Squid это, как ты и сказал, прокси сервер. С его помощью нельзя блокировать (или разрешать) пользователям доступ к каким-либо портам. Это задача для межсетевого экрана  - IPTABLES. Как правило, IPTALES настраивают по сценарию "запрещено все, кроме того, что разрешено". Кроме того, Squid проксирует только HTTP, HTTPS, FTP и GOPHER траффик. Т.е. POP/IMAP/SMTP и т.д. придется выпускать напрямую через IPTABLES.
Цитировать
Вопрос №3: В организации 2 подсети, планируется бухгалтерию в 3-ю выделить (и инет им давать только на 1ПК). Как реализовать?
А в чем вопрос? Просто воткнешь еще один сетевой адаптер в сервак, задашь ему адрес  из новой подсети и все. Пользователям каждой из подсетей указываешь в качестве шлюза по умолчанию IP адрес соответствующего интерфейса сервера. Даже маршрутизацию настраивать не придется. А насчет инета на 1 ПК тут возможны варианты. Либо с помощью авторизации на SQUID, либо можно запретить доступ к тому же SQUID через IPTABLES.
Цитировать
Вопрос №4: Хочу в squid'е авторизовать ползователей по МАК-аресу. Это так:
Я для этих целей использую SAMS. Не знаю, правда, как там именно с MAC авторизацией обстоят дела.
Цитировать
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A input -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 - j ACCEPT
iptables -P FORWARD DROP
ИМХО, это все неверно. Вообще работать не будет. Мне кажется, у тебя нет понимая цепочек IPTABLES. На самом деле придется почитать мануал. Вкратце так: INPUT - входящий для твоего сервера с IPTABLES трафик (т.е. твой сервер с IPTABLES является пунктом назначения); OUTPUT - соответственно исходящий (этот трафик генерирует не рабочая станция в сети или кто-то в инете, а именно твой сервер с IPTABLES); FORWARD - трафик, для которого твой сервер является промежуточной точкой, т.е. трафик, который будет перенаправлен (FORWARD) или в локальную сеть, или в Интернет. POSTROUTING и PREROUTING - специфические цепочки. Про них в доке почитаешь.
Прежде чем писать правила, я бы рекомендовал на бумажке нарисовать/написать то, что ты хочешь получить, а потом, опираясь на этот рисунок/список, записывать правила. Ну, например:
1.По умолчанию всем все запрещено.
2.Всем пользователям локальной сети разрешено соединяться с моим сервером.
3.NAT для трафика всех пользователей локальной сети.
4.IP которому можно ходить в инет по POP3.
Правила будут приблизительно такими.
IPTABLES -P INPUT DROP #Политика по умолчанию для цепочки INPUT
IPTABLES -P FORWARD DROP #Политика по умолчанию для цепочки FORWARD
IPTABLES -P OUTPUT ACCEPT DROP #Политика по умолчанию для цепочки OUTPUT
IPTABLES -t nat -A POSTROUTING -o eth1 -j MASQUERADE #NATим весь исходящий трафик
IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT #Разрешаем ответный трафик из инета
IPTABLES -A INPUT -i eth0 -j ACCEPT #Разрешаем соединятся с нашим сервером из локальной сети ВСЕМ
IPTABLES -A FORWARD -i eth0 -s 192.168.1.1 -p tcp --dport 25 -j ACCEPT #Разрешаем станции с IP 192.168.1.1 POP3 в инет
Как то так. Не даю гарантии, что правила заработают, т.к. я не проверял их, да и упустить что-то мог. Но общий смысл таков.
« Последнее редактирование: 11 Мая 2012, 11:31:23 от Synegami »

Оффлайн OEvg85

  • Автор темы
  • Участник
  • *
  • Сообщений: 133
  • это я
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #4 : 10 Мая 2012, 21:42:26 »
Верно подмечено:
Цитировать
Мне кажется, у тебя нет понимая цепочек IPTABLES.
Я только начинаю с этим разбираться. До этого юзал Win2k3 + Kerio Winrote Firewall. Отрывочных знаний на уровне школьной информатики вполне хватило для его настройки.
Цитировать
На самом деле придется почитать мануал.
На самом деле, не плохо было бы начать с толмута под названием "Теория передачи данных". А так я и сам этот мануал находил, только не все понятно мне... опять же из-за пробелов в знаниях.

А за советы спасибо огромное.

Хм...
это правило натит весь исходящий трафик
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
это правило разрешает уже установленные соединения
iptables -A input -m state --state ESTABLISHED,RELATED -j ACCEPT
это разрешает все обращения на интерфейс loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
это сответственно правила ля форвардинга
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 - j ACCEPT
iptables -P FORWARD DROP

правила рабочие...

Добавляю еще:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -s 192.168.0.0/24 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -s 192.168.0.0/24 -j REDIRECT --to-ports 3128

По идее эти правила должны заворачивать http и https трафик на порт сквида, но на клиентских машинах соединения по протоколу http проходят, а по протоколу https нет. Браузер сообщает об ошибке SSL. Что не так :(
« Последнее редактирование: 10 Мая 2012, 22:03:16 от OEvg85 »

Все говорят, что мы вместе, но не все знают в каком

Оффлайн Synegami

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #5 : 11 Мая 2012, 11:20:09 »
Цитировать
По идее эти правила должны заворачивать http и https трафик на порт сквида, но на клиентских машинах соединения по протоколу http проходят, а по протоколу https нет. Браузер сообщает об ошибке SSL. Что не так
Я так понимаю. ты пытаешься прозрачный прокси организовать? Тогда, интернет говорит, что если сквид версии 3 - то в конфиге надо надо сроку подправить:
http_port 3128 transparentЕсть такое? А сами правила IPTABLES верные.
Цитировать
правила рабочие...
Да, рабочие (почти). Я недостаточно внимательно просмотрел их в первый раз. Мне всегда проще свои с нуля написать, чем разобраться в чужих :).
Цитировать
iptables -A INPUT -i lo -j ACCEPT
Хорошее правило, я про него забыл :).
А вот это правило вызывает вопросы:
Цитировать
iptables -A INPUT -j REJECT
Ты вежливо отклоняешь ВСЕ коннекты, к своему серверу. Странно, как вообще squid работает в таком случае. Ты telnet соединение на 3128 можешь установить? Я так думаю, что не сможешь. Предположу, что это правило должно было ограничивать соединения из инета. Тогда разумнее написать два таких правила:
Цитировать
IPTABLES -P INPUT DROP #Политика по умолчанию для цепочки INPUT
IPTABLES -A INPUT -i eth0 -j ACCEPT #Разрешаем соединятся с нашим сервером из локальной сети ВСЕМ

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #6 : 11 Мая 2012, 12:00:28 »
Цитировать
Странно, как вообще squid работает в таком случае.
Ничего не странно, перед ним есть правило
Код: (text) [Выделить]
iptables -A input -m state --state ESTABLISHED,RELATED -j ACCEPT
OpenWrt 19.07

Оффлайн Synegami

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #7 : 11 Мая 2012, 12:16:06 »
KT315,
И что из этого? Где там NEW? Только ESTABLISHED, RELATED. Или squid уже сам инициализирует соединения с клиентом?

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #8 : 11 Мая 2012, 13:52:05 »
Только ESTABLISHED, RELATED.
Т.е RELATED тебе ни о чём не говорит? Ну и кроме того, есть правила цепочки PREROUTING таблицы nat.
OpenWrt 19.07

Оффлайн Synegami

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #9 : 11 Мая 2012, 14:02:18 »
KT315
Цитировать
Т.е RELATED тебе ни о чём не говорит?
А о чем мне должно говорить RELATED? Оно мне говорит о том, что разрешены СВЯЗАННЫЕ соединения. Например, для FTP. Управляющая сессия идет на 21 порту. Клиент и сервер договорились, что данные сервер будет отдавать на 5555 порту. Клиент устанавливает tcp- соединение на 5555 порт сервера и у него это получается, не смотря на то, что не 5555 порт не открыт непосредственно в IPTABLES. Потому что RELATED -j ACCEPTED. Не?
Вот из переведенного мана выдержка:
Цитировать
Состояние RELATED одно из самых "хитрых". Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED. Это означает, что соединение получает признак RELATED тогда, когда оно инициировано из уже установленного соединения, имеющего признак ESTABLISHED. Хорошим примером соединения, которое может рассматриваться как RELATED, является соединение FTP-data, которое является связанным с портом FTP control, а так же DCC соединение, запущенное из IRC. Обратите внимание на то, что большинство протоколов TCP и некоторые из протоколов UDP весьма сложны и передают информацию о соединении через область данных TCP или UDP пакетов и поэтому требуют наличия специальных вспомогательных модулей для корректной работы.
Цитировать
Ну и кроме того, есть правила цепочки PREROUTING таблицы nat.
И что, что они есть? В них же просто dport подменяется. Разве это каким-то образом отменяет действие iptables -A INPUT -j REJECT?
« Последнее редактирование: 11 Мая 2012, 14:11:31 от Synegami »

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #10 : 11 Мая 2012, 15:12:49 »
Ты прав. Какие-то правила у OEvg85 вероятно еще присутствуют.
OpenWrt 19.07

Оффлайн OEvg85

  • Автор темы
  • Участник
  • *
  • Сообщений: 133
  • это я
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #11 : 11 Мая 2012, 18:36:55 »
Ты прав. Какие-то правила у OEvg85 вероятно еще присутствуют.

Сегодня вообще вот так пробовал:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
#обращаю внимание ВСЕ, что понаписал удаляю
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -s 192.168.0.X -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -s 192.168.0.X -j REDIRECT --to-ports 3128

И опять 25 по протоколу http комп клиент ходит без всяких проблем, набираю https://money.yandex.ru/, в ответ от MSIE8 получаю:

Цитировать
Internet Explorer не может отобразить эту веб-страницу
   
        Подробнее

Эта проблема может быть вызвана различными причинами, например:

•Потеряно подключение к Интернету.
•Этот веб-узел временно недоступен.
•Нет доступа к DNS-серверу.
•На DNS-сервере не найден адрес для домена этого веб-узла.
•Возможно, сделана опечатка в адресе.
•Если это безопасный адрес (HTTPS), выберите команду "Сервис", "Свойства обозревателя", "Дополнительно", и проверьте, что протоколы SSL и TLS в секции безопасности включены.
 

делаю редирект для ругих SSL портов (в squid.conf указаны которые), то же самое получаю...

в /var/log/squid/cache.log вижу следующее:

Цитировать
2012/05/11 20:04:16| parseHttpRequest: Unsupported method ''
2012/05/11 20:04:16| clientTryParseRequest: FD 19 (192.168.0.102:1451) Invalid Request
2012/05/11 20:04:16| clientTryParseRequest: FD 19 (192.168.0.102:1453) Invalid Request
2012/05/11 20:04:22| parseHttpRequest: Unsupported method ''
2012/05/11 20:04:22| clientTryParseRequest: FD 35 (192.168.0.102:1468) Invalid Request
2012/05/11 20:04:22| parseHttpRequest: Unsupported method ''
2012/05/11 20:04:22| clientTryParseRequest: FD 28 (192.168.0.102:1470) Invalid Request
2012/05/11 20:04:23| clientTryParseRequest: FD 35 (192.168.0.102:1479) Invalid Request
2012/05/11 20:04:23| clientTryParseRequest: FD 35 (192.168.0.102:1481) Invalid Request
2012/05/11 20:12:46| clientTryParseRequest: FD 26 (192.168.0.102:1809) Invalid Request
2012/05/11 20:12:46| clientTryParseRequest: FD 26 (192.168.0.102:1811) Invalid Request
2012/05/11 20:12:46| clientTryParseRequest: FD 26 (192.168.0.102:1813) Invalid Request
2012/05/11 20:12:46| parseHttpRequest: Unsupported method ''
2012/05/11 20:12:46| clientTryParseRequest: FD 26 (192.168.0.102:1815) Invalid Request
2012/05/11 20:20:56| parseHttpRequest: Unsupported method ''
2012/05/11 20:20:56| clientTryParseRequest: FD 19 (192.168.0.102:2312) Invalid Request

и еще кучу подобного...

При этом если в соответвствующих натройках того же IE8 прописать прокси-сервер
serv:3128
на тот же самый https://money.yandex.ru/ IE Заходит без проблем.

Все говорят, что мы вместе, но не все знают в каком

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #12 : 11 Мая 2012, 23:17:44 »
Вообще если очень хочется пустить https (что есть костыль) советуют собирать squid с поддержкой ssl (в 10.04 - squid в репазитариях собран без ssl), и в нём подпихивать свои сертификаты.
https_port 3129 transparent cert=/path/to/cert.pem key=/path/to/key.pemРаботает оно или нет в transparent'e, не в курсе.
OpenWrt 19.07

Оффлайн Synegami

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #13 : 12 Мая 2012, 09:41:50 »
OEvg85,
Вот что нашел на opennet'е:
Цитировать
Всем привет, уважаемые коллеги. Итак для того что бы РАБОТАЛО надо:
1. Чтобы при проверке версии squid в строке конфигурации обязательно была опция '--enable-ssl' иначе кина небудет, и не мечтайте.

2. Если версия >= libssl0.9.6  При создании сертификатов и ключей оперироваться командами для создания ключей:
openssl genrsa -out /etc/squid/ssl/squid.key
openssl req -new -key /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.csr
openssl x509 -req -days 3650 -in /etc/squid/ssl/squid.csr -signkey /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.pem

3. Конфигурация squid согласно портов должна иметь такой вид:
http_port 192.168.0.254:3128 transparent                                                           
https_port 192.168.0.254:3129 transparent key=/etc/squid/ssl/squid.key cert=/etc/squid/ssl/squid.pem

4. iptables nat правила:
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 443 -j REDIRECT --to-ports 3129

* Проверено на Ubuntu 10.04 LTS
* Работает даже на одном порту

Оффлайн OEvg85

  • Автор темы
  • Участник
  • *
  • Сообщений: 133
  • это я
    • Просмотр профиля
Re: iptables + squid нужен совет
« Ответ #14 : 13 Мая 2012, 11:08:41 »
Спаибо всем, попробую отпишусь ;)

Все говорят, что мы вместе, но не все знают в каком

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.