Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Как запретить клиенту обращаться к DNS провайдера (http://forum.oszone.net/showthread.php?t=13352)

Ak74 04-12-2003 10:24 71506

Есть Linux 7.2 - шлюз в интернет для локальной сети, ходят через squid. Трафик интернета каждого пользователя считается. Проблема - если я заперещаю доступ к интернет в сквиде для конкретного IP, а у клиента в свойствах прописан DNS провайдера, то он все равно ходит в интернет (в логе сквида есть записи куда ходит этот IP). Подскажите, как запретить такому клиенту доступ к интернет?

Guest 80 247 100 04-12-2003 13:11 71507

ну это вряд ли из-за ДНС, это скорей всего как-то не так запрещаете, напишите как...

а чтобы запретить доступ к ДНС провайдера нужно подънять файрволл и закрыть доступ на 53 порт во внешней сети из внутренней сети...

Ak74 05-12-2003 11:40 71508

Guest 80 247 100
пока я еще никак не запрещаю клиентам доступ к DNS провайдера, ищу варианты - как это можно сделать.

Файрволл - ipchains, но в правилах я не могу полностью разобраться, на два интерфейса eth0, eth1 их прописано примерно 200 - это нормально?

а 53 порт я могу закрывать только файрволом?

Guest 80 247 100 05-12-2003 11:49 71509

Ak74
Цитата:

eth0, eth1 их прописано примерно 200 - это нормально?
да это нормально.
Я имел ввиду покажите конфиг squid-а в том месте где вы пытаетесь запретить
Цитата:

доступ к интернет в сквиде для конкретного IP, а у клиента в свойствах прописан DNS провайдера, то он все равно ходит в интернет (в логе сквида есть записи куда ходит этот IP).
и то место в логе тоже покажите:up:

Guest 05-12-2003 15:28 71510

1. Можно установить внутренние днс сервера(лучше два)
Один на шлюзе для внешней и внутренней сети(если например есть свой домен аля 2-3 уровня), второй во внутренней сети и для нее предназначенный во сновном(secondary dns, подойдет любой старый комп ибо на нем будет только днс). Итого:
а) на клиентах мы прописываем только наши днс - этим мы снимаем трафик к днс от клиентов во внешнюю сеть
б) на первом сервере(шлюзе) мы указываем днс провайдера в resolv.conf и соответственно через опции для наймеда - forward
в) на втором сервере мы указываем только днс к шлюзу...(он для этого и служит чтоб держать клиентов внутренней сети, заадно будет еще и кэшировать их запросы...)
2. Читаем книгу Брондмауэры в линукс и идем на сайт авторов там берем файло для настройки firewall-а для ipchains (Он очень подробный.... только немного подправить под себя...)
3. Нужно - еще желательно настороить нат... для заворота всех запросов от клиентов по 80 порту на 3128(аля прозрачное проксирование, и для всех остальных используемых портов -21 итд)
_____________________
by sergleo

Ak74 08-12-2003 14:43 71511

Guest 80 247 100
В сквиде я никак не запрещаю доступ от клиента с прописанным ДНС провайдера - я не знал, что можно такое делать :-(

Цитата:

Я имел ввиду покажите конфиг squid-а в том месте где вы пытаетесь запретить
В конфиге сквида в acl прописано имя файла - перечень IP, которым разрешено ходить в инет. Когда пользователь выбирает свой месячный лимит - я комментирую его IP до следующего месяца. Но несколько умных узнали ДНС провайдера, прописали его у себя и ходят в интернет, когда доступ в сквиде для них закрыт, причем сквид ведет на закрытые IP- адреса лог. Вот я и хочу запретить им такой трюк. Только ipchains?

Guest 80 247 100 09-12-2003 06:19 71512

Цитата:

Только ipchains?
да так просче будет

Ak74 09-12-2003 12:31 71513

Почитал ipchains-howto

Насколько я понял - надо клиентам внутренней сети закрыть порт 53 (eth0-внутренний интерфейс, eth1-наружный)

ipchains -A input -p tcp 53 -i eth0 -s 10.0.0.0/255.255.255.0 -j DENY
так?

ooptimum 09-12-2003 23:17 71514

Ak74
Ну, примерно так. Только надо написать еще точно такое же правило, но для протокола UDP. И потом, если у тебя на eth0 висит только сеть 10.0.0.0/255.255.255.0, то либо условие "-s", либо условие "-i" являются избыточными. В принципе, наличие обоих условий одновременно не является ошибкой, но можно обойтись и более простым правилом.

Хотя, как тут правильно указали, проблема не в том, как запретить доступ к DNS средствами ipchains, а в том, как правильно закрывать доступ squid'ом. Т.е. не надо пытаться удалить гланды через задний проход.

Ak74 10-12-2003 13:36 71515

ooptimum
Плиз, подскажите хать в каком направлении рыть в squid, чтобы закрыть клиентам DNS-запросы. В доках по squid я не встречал такой возможности, у меня стоит squid 2.3

bystander 12-12-2003 12:08 71516

2Ak74

Да не нужно им закрывать DNS-запросы, пойми ты наконец. Хрен с ними, пусть резолвят. Главное, чтобы коннекции наружу у них не удавались. Иначе следующий этап твоих вопросов будет - "а они теперь напрямую по IP-адресам ходить начали" :)

Говорят тебе - конфиг squid'а покажи. Ну, забей то, что конфиденциально, буквами какими там...

Ak74 13-12-2003 09:55 71517

 Мой squid.conf. Squid v. 2.3

http_port 10.0.0.1:3128
http_port xxxx.xxxxxxxx.net.ua:3128

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

maximum_object_size 256 KB

ipcache_size 1024
ipcache_low  90
ipcache_high 95

fqdncache_size 1024

cache_dir ufs /var/cache2 512 64 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
emulate_httpd_log on
mime_table /etc/squid/mime.conf

log_mime_hdrs off
pid_filename /var/run/squid.pid
debug_options ALL,1
log_fqdn off
ftp_user Squid@motor.melitopol.net
cache_dns_program /usr/lib/squid/dnsserver

dns_children 5
pinger_program /usr/lib/squid/pinger

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95

negative_ttl 5 minutes
positive_dns_ttl 6 hours
negative_dns_ttl 5 minutes


connect_timeout 120 seconds
dead_peer_timeout 18000 seconds
peer_connect_timeout 3000 seconds
siteselect_timeout 4 seconds
read_timeout 15 minutes
request_timeout 30 seconds

client_lifetime 1 day
half_closed_clients on
pconn_timeout 120 seconds
ident_timeout 10 seconds
shutdown_lifetime 30 seconds

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 SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
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 CONNECT method CONNECT
acl FTPs proto FTP
acl PAGES urlpath_regex \.exe$ \.zip$ \.tar$ \.rar$ \.tgz$ \.mp3$ \.arj$
acl Mynet src "/etc/squid/ip-memz"

acl Sqadmin src xxxxx.xxxxxxxxx.net
acl myPeer src xxxxxx.xxxxxxxxx.net
acl MyServers dstdomain xxxxx.xxxxxxxx.net.ua

http_access allow manager localhost
http_access allow manager Sqadmin
http_access allow Mynet

http_access deny manager all
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny all
icp_access allow all
miss_access allow all

acl ident_aware_hosts src 10.0.0.0/255.255.255.224
ident_lookup_access allow ident_aware_hosts
ident_lookup_access deny all

cache_mgr webmaster

cache_effective_user squid
cache_effective_group squid

visible_hostname xxxxx.xxxxxxxx.net.ua
httpd_accel_with_proxy off

append_domain .xxxx.xxxxxxxx.net.ua
log_icp_queries off
cachemgr_passwd FG8tf all
store_avg_object_size 13 KB
store_objects_per_bucket 50
client_db off
query_icmp off

never_direct allow Mynet
strip_query_terms on
coredump_dir /var/log/squid/

always_direct allow all


Guest 80 247 100 15-12-2003 12:32 71518

эээээ.... вот это я не понял.... %о)))
Цитата:

never_direct allow Mynet
это используется если у вас имеется каскад прокси серверов, друг за другом.... причем несколько не так. Например, чтобы вызвать использование прокси-сервера для всех запросов, кроме тех, что, например, находятся в вашем местном домене, и для них определить использование чего-нибудь другого...
Цитата:

always_direct allow all
здесь вы определили запросы, которые должны ВСЕГДА быть отправлены непосредственно to origin servers?? %о)))

Добавлено:

вообщем дело может быть и в этом...

bystander 17-12-2003 11:53 71519

Ну, даже не знаю... Засада какая-то. На первый взгляд, конфиг нормальный - за исключением выше обруганых never_direct и always_direct, которые просто ни к селу, ни к городу. Имхо тут что-то еще. В store.log что на тех запросах, которые не должны пройти? Точно нормальные (2xx-3xx) коды? Просто у меня такое впечатление, что на самом деле NAT в сетке работает. Они убеждаются, что их squid не пускает (откуда и записи в логах), отключают его и прут напрямую, без squid'а.
Вот такая гипотеза.

Ak74 18-12-2003 14:35 71520

Открылась интересная деталь:
только клиенты WinXP с прописанным DNS провайдера могут ходить в интернет, когда им этот выход не разрешен. Более младшие версии Windows в таком случае (с такими же настройками как и в WiтXP) выхода в интернет не получают (проверил на двух разных Win200 WS)!!!

Закоментировал
never_direct allow Mynet
always_direct allow all  и перезапустил сквид - ничего не изменилось.

mar 18-12-2003 21:09 71521

если сеть внутренняя, шлюз с двумя карточками, внутренние адреса вроде 192.168.x.x то почему, как указывалось выше не поднять iptables (ipchains) и не перенапрвлять все запросы на 80 порт через Ваш прокси (3128), все запросы к DNS - к Вашему днс и т.д.
И запустить скрипт по крон, который при  превышения лимита  подымает дополнительные правила - все эти машины вместо 80 порта идут на Ваш какой-то там, на котором видят страничку, что их время истекло ;) (+  дополнительные правила пишутся в дополнительный файл, который читается в случае перезагрузки машины). Ну и скрипт с амнистией с начала месяца =)

Ak74 05-01-2004 10:25 71522

Возможно, я задаю глупую вопросы, администрированием Linux я начал недавно, еще не все понимаю. Прошу помощи знатоков.

Переустановил я squid. Ушли непонятные комбинации доступа в интернет. Теперь - если на на любом ПК прописать DNS провайдера ( и иногда, шлюз - адрес Linux), то получаем доступ в интернет при запрете в squid (при первой попытке доступа в его логе появляются записи с кодом 403). Означает ли это, что у меня работает NAT?, если да, то как узнать работает ли NAT?

Professor 05-01-2004 13:33 71523

Узнать, работает ли nat легко

cat /proc/sys/net/ip_v4/ip_forward

Ak74 06-01-2004 09:22 71524

Professor
cat /proc/sys/net/ip_v4/ip_forward  вернул   1. А что это значит? Если NAT включен, то как его отключить?

Guest 06-01-2004 11:34 71525

Ak74
Цитата:

cat /proc/sys/net/ip_v4/ip_forward
показывает что у вас просто включен форвардинг пакетов на машине... так что это не совсем то что нужно как показал ув. Professor.
Посмотрите cat /proc/modules на присутствие там строк типа:
iptable_nat
ipt_MASQUERADE
и аналогичных... Примичание для iptables... для ipchains к сожалению не подскажу... :(
______________________________
by sergleo

Ak74 06-01-2004 12:59 71526

Guest
/proc/modules ничего похожего нет.
Закрыл Ipchains обращения по 53 порту для tcp, udp. С отключеныым прокси в браузере и прописанным ДНС на клиенте интернет не работает. Но стоит только к выше описанной комбинации прописать шлюз - адрес сервера - я получаю доступ к интернет. Пробовал закрыть ipchains и запросы на порты 80 и 8080 - не помогает. Посмотрел статистику, которая снимается с интерфейса - запросы от меня (мимо прокси) идут по самым разным портам: 1040, 3785 ... - вариантов много.
Подскажите, по каким портам возможен запрос web-страницы мимо скида, т.е. какие закрыть?


Professor 06-01-2004 14:10 71527

0 место 1 туда скинь и проверь ;)

Guest 80 247 100 09-01-2004 07:49 71528

ну это просто похоже на работу маскарадинга!
что скажет ээээээ..... скажем
ipchains -ML
?

Ak74 09-01-2004 11:06 71529

Решил проблему так - написал новое правило для ipchains - закрыл на внутреннем интерфейсе обращение к порту 80. Только добавлять его пришлось с помощью опции -I первым номером в список, а не -A.

Но новое правило работает только до первого обрыва связи с провайдером. В howto ipchains написано:
"Ваша текущая настройка firewall хранится в ядре, и таким образом будет потеряна на перезагрузке. Я рекомендую использовать скрипты `ipchains-save' и `ipchains-restore', чтобы ваши правила действовали постоянные"

Единственное место, где у меня в файле есть строка ipchains-restore - это файл /etc/rc.d/init.d/ipchains. В нем данные восстанавливаются из файла-переменной $IPCHAINS-RESTORE. Как мне узнать значение этой переменной?


Время: 21:05.

Время: 21:05.
© OSzone.net 2001-