Transzparens Squid szerver

 ( Dudu94 | 2011. március 15., kedd - 16:55 )

Sziasztok!

6 órája kutatok a neten, hogy hogyan lehet beállítani egy transzparens proxyt. HUP-on is volt 1-2 téma, ahol megoldották a problémát, de nem sikerült.

A jelenlegi felállás:

  • Debian 6 Squeeze
  • Squid 2.7 Stable 9
  • eth0: (ez megy az internet felé)
  • eth1: 192.168.1.1 (belső hálózat: 192.168.1.0/24)
  • eth2: (dinamikusan kapja az ip-t egy másik hálózatból) ezen nem transzparens módba figyel a squid

Egy olyan átjárót szeretnék létrehozni, mely a felhasználót kényszeríti proxy használatára és ne kelljen beállítani kliens oldalon a böngészőt. Érdemes reklám szűrést squidGuarddal megvalósítani?

Ha böngészőben beállítom a proxyt (192.168.1.1:3128) akkor csatlakozik az internetre a proxyval. A szerveren iptables segítségével átirányítottam a forgalmat a 80-as portról a 3128-ra (iptables -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128), és a squid.confba hozzátettem: http_port 192.168.1.1:3128 transparent, de így sem működik. Proxy nélkül egyszer nem tölt be semmit, máskor meg betölti az oldalt, de proxyt nem használ.

Előre is köszönöm segítségeteket!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Heló. Lehet hülyeség, de amikor én csináltam a transzparens mód csak úgy működött, hogyha csináltam egy DNS szervert(Bind) is a Squid mellé. Nem transzparens módban erre nem volt szükség.
Vagy megpróbálhatod iptablessel a szolgáltatód DNS-ét használni:

iptables -t nat -A PREROUTING -p tcp --dport 53 -j MASQUERADE
iptables -t nat -A PREROUTING -p udp --dport 53 -j MASQUERADE
Régen használtam iptablest lehet el is írtam őket, szóval csak saját felelősségre.

Squid-nak is meg lehet adni a DNS-t:


dns_nameservers xxx.xxx.xxx.xxx

Illetve, hogy transzparens proxy-ként működjön:


http_port xxx.xxx.xxx.xxx:port transparent

De tényleg a tábla hiányzott az iptables-ből.

A DNS szerver megvolt adva : )

http_port 192.168.1.1:3128 transparent
dns_nameservers x.x.x.x (internetszolgáltató)

Köszönöm, ez hiányzott! De a PREROUTING helyett POSTROUTING van. Ez a helyes:
iptables -t nat -A POSTROUTING -p tcp --dport 53 -j MASQUERADE
iptables -t nat -A POSTROUTING -p udp --dport 53 -j MASQUERADE
Így már működik!

Szerintem kihagytad, hogy az iptables szabályt melyik táblához adja hozzá. Helyesen:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Esetleg ezt is érdemes átnézni:
http://www.ubuntugeek.com/how-to-setup-transparent-squid-proxy-server-in-ubuntu.html

--------------------------------------------------------------
"Tegnap reggel addig röhögtünk a főnök viccén, míg ki nem derült, hogy az a napi feladat."

Jó doksit itt is találsz: http://hup.hu/node/77361

http://kovisoft.hu

Hálás köszönet!

Köszönöm, ezt meg is találtam már : )

Sziasztok!

Épp múlt héten csináltam egyet, először transzparens lett volna, utána jött a kérés, hogy a nevelők had írhassanak be jelszót és a gyerek csak úgy használhassa az internetet, így lett user/pass.

Egy gondom, hogy a https nem megy át, portoknál a kommentet kivettem. Kell működni a https-nek is?

A pontos konfig nincs most előttem.

Sajnos Transzparens módnál le kell mondanunk az authentikációról.
Azt olvastam, hogy kezeli már a HTTPS-t (elvileg)

Nekem azért van szükségem transzparensre, mert nyílt wifin lesz osztva a net és a csatlakozók nem fognak proxyt beállítani.

Erre a proxy autoconfig szerintem jobb megoldás lenne, a transparent proxy lehet hogy több bajt okoz mint amennyi haszna lesz.

"Sajnos Transzparens módnál le kell mondanunk az authentikációról. "

Igen, ezt olvastam, de ésszerű is. Azt is olvastam, hogy ekkor a https sem megy. Szerencsére jött a kérés, hogy legyen user/pass, viszont így sincs https.

Köszönöm mindenkinek aki segített! Sh scripthez hozzáadtam, ami csatoló felhúzásakor indul.


#!/bin/sh

PATH=/usr/sbin:/sbin:/bin:/usr/bin

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

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

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

iptables -t nat -A POSTROUTING -p tcp --dport 53 -j MASQUERADE
iptables -t nat -A POSTROUTING -p udp --dport 53 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Sziasztok!

Én annyiban szólnék hozzá, hogy én is szeretnék tanácsot kérni.
Nálam egy ipcop v2 megy mint proxy és szintén transzparens módban. A proxy http protokollon megy és az a gond, hogy vannak olyan weblapok amiknek van https oldaluk is, pl.: Facebook.
Nálunk termenkénti tiltás is van (MAC alaján) így a tanár az adott teremben le tudja tiltani a netet.
A gond az, hogy a fifikás tanulók https-en facebookoznak. Azt szeretném megoldani, hogy adott termet teljesen le tudjak tiltani a squid-del.
Próbálkoztam, azzal, hogy a /var/ipcop/proxy/acls/include.acl fájlba írok, de nem igazán értek a squidhez így nem is lett jó az eredmény.
Szeretnék kérni tanácsot a megoldáshoz.

Itt van a squid.conf:

http_port 10.205.206.254:8080 transparent

cache_effective_user squid
cache_effective_group squid
umask 022

pid_filename /var/run/squid.pid

cache_mem 4 MB
cache_dir aufs /var/log/cache 50 16 256

error_directory /usr/lib/squid/errors.ipcop/hu

access_log /dev/null
cache_log /dev/null
cache_store_log none

log_mime_hdrs off
logfile_rotate 0
forwarded_for off
via off

acl within_timeframe time MTWHFAS 00:00-24:00

acl localhost src 127.0.0.1/32
acl SSL_ports port 443 # https
acl SSL_ports port 8443 # alternative https
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unprivileged ports
acl Safe_ports port 8080 # Squids port (for icons)

acl IPCop_http port 81
acl IPCop_https port 8443
acl IPCop_ips dst 10.205.206.254
acl IPCop_networks src "/var/ipcop/proxy/acls/src_networks.acl"
acl IPCop_servers dst "/var/ipcop/proxy/acls/src_subnets.acl"
acl IPCop_green_network src 10.205.206.0/24
acl IPCop_green_servers dst 10.205.206.0/24
acl IPCop_blue_network src 10.205.205.0/24
acl IPCop_blue_servers dst 10.205.205.0/24
acl IPCop_banned_mac arp "/var/ipcop/proxy/acls/src_banned_mac.acl"
acl CONNECT method CONNECT

#Classroom extensions
acl IPCop_no_access_ips src "/var/ipcop/proxy/acls/src_noaccess_ip.acl"
acl IPCop_no_access_mac arp "/var/ipcop/proxy/acls/src_noaccess_mac.acl"
deny_info ERR_ACCESS_DENIED IPCop_no_access_ips
deny_info ERR_ACCESS_DENIED IPCop_no_access_mac
http_access deny IPCop_no_access_ips
http_access deny IPCop_no_access_mac

#Access to squid:
#local machine, no restriction
http_access allow localhost

#GUI admin if local machine connects
http_access allow IPCop_ips IPCop_networks IPCop_http
http_access allow CONNECT IPCop_ips IPCop_networks IPCop_https

#Deny not web services
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#Set custom configured ACLs
http_access deny IPCop_banned_mac
http_access allow IPCop_networks within_timeframe
http_access deny all

#Strip HTTP Header
request_header_access X-Forwarded-For deny all
request_header_access Via deny all

maximum_object_size 4096 KB
minimum_object_size 0 KB

request_body_max_size 0 KB
reply_body_max_size none all

visible_hostname hercules.localdomain

Itt van a /var/ipcop/proxy/acls/include.acl
acl szamtec-termek arp 00:24:21:20:48:23 ide jönnének a mac címek
acl facebook dstdomain .facebook.com
acl officetime time MTWHFA 08:00-15:00
http_reply_access_deny facebook szamtec-termek officetime
http_access deny CONNECT facebook szamtec-termek officetime

ez érdekelne engem is, de mintha az olvastam volna, hogy ez transzparens módon nem fog menni

ez így van :) nem fog, így maradt az iptables ^^ btw, elég, ha kiszűröd 443-on a fészbúk tartományát/vagy címeit
--
"'The time has come,' the Walrus said"

acl deny_url dstdomain "/etc/squid/deny_urls.txt"
..
http_access deny deny_url

Nekem fontos lenne, hogy csak adott mac címekre vonatkozzon a tiltás.
Erre vonatkoztt a kérdésem. Ezt hogyan kell?

Köszi

Próbáld a squid CONNECT lehetőségét használni.
http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid

Amikor annó squid https szavakra kerestem google-ban akkor ott is ezzel okoskodtak.

Ez még érdekesen hangzik:
http://blog.davidvassallo.me/2011/03/22/squid-transparent-ssl-interception/
viszont ha jól értem bukod az ssl-es oldalak hiteles kulcsait, és a sajátod megy a kliensek felé helyette (bár csak átfutottam a cikket).

Nem tudom, hogy rosszul értelmezem e, vagy a hozzászólók figyelmét kerülte el, de mint ahogy írtam én ezt a tiltást csak bizonyos mac című gépekre akarom bekapcsolni. Tehát a kérés az volna, hogy ezt hogyan... köszi

DHCP szerverrel adsz MAC alapján a gépeknek statikus IP-t.
Majd ezt az IP-t szabályzod (tiltod,engedélyezed, listás szürésre teszed, stb) a squid-al.

Például...

Köszönöm, jó ötlet.
Esetleg tudnál egy konkért példával segíteni?
Mondjuk facebook tiltása xxx.xxx és xxx.xxx ip című gépekre.
Elég kezdő vagyok ezen a téren.

kösszi

Mindenféle gorombaság nélkül ajánlom a google-t. Például squid example esetleg squid basic example szavakkal.
Szerintem sokkal jobb, és többet is tanul belölle az ember, ha utána néz amennyire tud, esetleg egy teszt környezetben (akár virtuálisan) összerakja a rendszert, mielött élesbe állna. Így közben tanulni is lehet és van idö/lehetöség kikisérletezni a megoldást.

Hirtelen ezt találtam:
https://help.ubuntu.com/12.04/serverguide/squid.html

De itt egy példa config:

-- dhcpd.conf --
option domain-name "example.site";
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 192.168.3.10; #linux proxy szerver IP-je

### option subnet-mask 255.255.0.0;
default-lease-time 28800;
max-lease-time 259200;

subnet 192.168.3.0 netmask 255.255.0.0 {
range 192.168.3.50 192.168.3.150;
}

#desktop1
host desktop1 {
hardware ethernet 1c:2c:3a:4a:5b:5d;
fixed-address 192.168.4.10;
}

--- squid.conf --- (részlet!)

acl all src 0.0.0.0/0.0.0.0
acl allowedhosts src 192.168.4.0/24
acl limitedhosts src 192.168.3.0/24

acl whitelist url_regex "/etc/squid/whitelist.txt"
acl blacklist url_regex "/etc/squid/blacklist.txt"

http_access deny blacklist

http_access allow allowedhosts

http_access allow limitedhosts whitelist
http_access deny limitedhosts

--- blacklist.txt ---
# video pages
youtube
videa
vimeo
indavideo
video
radio

#community
facebook
iwiw
badoo
netlog

a whitelist.txt is hasonló a blacklist.txt-hez, de nevéhez is mérten pont a fordítottja.

A fenti squid.conf részlet (ha jól írtam meg), akkor azt teszi, hogy mindenkinél tiltja a blacklist.txt-ben lévö szavakat az url-ben. A 192.168.4.0-s tartománynak mindent enged, de a 192.168.3.0-s gépeknek csak a whitelist-be felvett szavakat tartalmazó oldalakat (persze ide lehet domaineket is felvenni a szavak helyett. pl: index.hu)

Remélem segít.
A többit már google-val össze tudod szedni. ;)

Sok sikert!

Sziasztok!

Nagyon hasznosak a leírások.
Végül is elvileg értem, mit kell csinálni de gyakorlatban mégse sikerült. Ezért is másoltam be mindjárt a konfigomat. Megnéznétek esetleg mit rontottam el benne?

Főleg a második részre volnék kíváncsi.

köszi

Köszi mindenkinek a hozzászólást.
Addig sikerült eljutni, hogy mac cím alapján meg tudom adni az egyes domainek tiltását.

acl tanuloi-gepek arp "/var/ipcop/proxy/tanuloi-gepek.txt"
acl ads url_regex "/var/ipcop/proxy/badsites.txt"
http_access deny ads tanuloi-gepek

A tanuloi-gepek.txt tartalmazza soronként a mac címeket
#[4-es-terem]
xx:6f:xx
xx:e5:xx
xx:e5:xx

már csak a https alapú lapok tiltása kellene pl.:facebook
de már ez is haladás.

ez is meg transzparens? ha igen, akkor at van iranyitva a 443-as port a squidre?

(Miért nem IP-t tiltasz és DHCP-ben történik a MAC-IP hozzárendelés?)

acl deny_url dstdomain "/etc/squid/deny_urls.txt"
..
http_access deny deny_url macszabaly

torolheto

Nem célom az önreklám, de hátha segít valakinek:
http://fixaltam.blogspot.hu/2011/05/atlatszo-squid-jelszavas-vedelem.html

ez jó. felélesztem... :(
--
#conf t
#int world
#no shut

ez klassz megoldás, frappáns.

Feliratkozom.

-----------------------------------------
Linux alapparancsok, kezdőknek

Én is "csatlakozom."

+1

+1

+1