slaven Опубликовано 29 декабря, 2007 Жалоба Поделиться Опубликовано 29 декабря, 2007 Добрый день... поставили передо мной такую банальную задачу организации интернета: 1. любые приложения не ходящие по http должны коннектица прозрачно(без маппинга портов и соксификации через прокси) 2. рулить доступом пользователей http, и считать трафик по каждому В распоряжении имелось: 1. ADLS-интернет 2. локальная сеть 3. интернет-маршрутизатор на базе AltLinux 4 Desctop с 2мя сетевыми интерфейсами eth0 - в ADSL, и eth1 - в сеть Решил сделать так: для прозрачного доступа пользователей в интернет NATить адреса в IPTables, и поднять PPPoE для коннекта пользователей. Для контролирования HTTP - заворачивать в IPTables запросы с 80 порта на прозрачный прокси-сервер Squid. Поднял NAT+PPPoE, поднял squid...по отдельности все работает, но как только я делаю squid прозрачным и заворачиваю запросы с 80 порта на squid - http работать отказывается... скрипт для Iptables ------------------------------------- #!/bin/sh function get_addr() { IFCONFIG='/sbin/ifconfig'; HEAD='head -2'; TAIL='tail -1'; CUT='cut -d: -f2'; IP=`$IFCONFIG $1 | $HEAD | $TAIL | awk '{print $2}' | $CUT`; echo $IP; } ### Внешний интерфейс EXTDEV="eth0" ### внутренний интерфейс PPPOEDEV="eth1" ### сеть для PPPOE клиентов. INETWORKIP="192.168.100.0/255.255.255.0" EXTERNALIP=`get_addr $EXTDEV` ENETWORKIP=$EXTERNALIP+"/255.255.255.255" INTERNALIP=`get_addr $INTDEV` LOOPBACK="127.0.0.1" ANYWHERE="0.0.0.0/0" PORTS="1024:65535" INTDEV="ppp+" /sbin/depmod -a /sbin/modprobe ip_conntrack /sbin/modprobe ip_tables /sbin/modprobe iptable_filter /sbin/modprobe iptable_mangle /sbin/modprobe iptable_nat /sbin/modprobe ipt_LOG /sbin/modprobe ipt_limit /sbin/modprobe ipt_MASQUERADE /sbin/modprobe ipt_owner /sbin/modprobe ipt_REJECT /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_conntrack_irc /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_nat_irc echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/tcp_syncookies for file in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $file done for file in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $file done for file in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $file done /sbin/iptables -F /sbin/iptables -F -t nat /sbin/iptables -N ALLOW_ICMP /sbin/iptables -N ALLOW_PORTS /sbin/iptables -N CHECK_FLAGS /sbin/iptables -N DENY_PORTS /sbin/iptables -N DST_EGRESS /sbin/iptables -N KEEP_STATE /sbin/iptables -N SRC_EGRESS # По умолчанию все входящие пакеты сбрасываем /sbin/iptables -P INPUT DROP /sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP /sbin/iptables -A INPUT -j ACCEPT -s $EXTERNALIP -d $ANYWHERE /sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $INTDEV /sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i lo /sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $EXTDEV -m state --state RELATED,ESTABLISHED /sbin/iptables -A INPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE /sbin/iptables -A INPUT -j ACCEPT -p udp -s $INETWORKIP --sport 53 -d $ANYWHERE # По умолчанию все исходящие пакеты сбрасываем /sbin/iptables -P OUTPUT DROP /sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $INTDEV /sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $EXTERNALIP /sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o lo /sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $EXTDEV -m state --state RELATED,ESTABLISHED /sbin/iptables -A OUTPUT -j ACCEPT -p udp -s $EXTERNALIP -d $ANYWHERE --dport 53 /sbin/iptables -A OUTPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE /sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $EXTDEV -m state --state RELATED,ESTABLISHED /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -A FORWARD -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $INTDEV /sbin/iptables -A FORWARD -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE -i $INTDEV ### редирект HTTP запросов на прокси сервер Squid. /sbin/iptables -t nat -A PREROUTING -i $INTDEV -p tcp --dport 80 -j REDIRECT --to-port 3128 ## Маскарадинг клиентов /sbin/iptables -t nat -A POSTROUTING -j SNAT -s $INETWORKIP -d $ANYWHERE -o $EXTDEV --to $EXTERNALIP /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE -s $INETWORKIP -d $ANYWHERE -o $EXTDEV ## Запуск PPPOE-SERVER killall -w -9 pppoe-server /usr/sbin/pppoe-server -I $PPPOEDEV -L $INTERNALIP ----------------------------------------- squid.conf --------------------------- http_port 3128 transparent hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 20 MB maximum_object_size 16192 KB cache_dir ufs /home/slaven/squid/cache 1000 16 256 emulate_httpd_log on access_log /home/slaven/squid/logs/access.log squid cache_log /dev/null cache_store_log none acl office src 192.168.100.0/255.255.255.0 acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1/255.255.255.255 acl CONNECT method CONNECT http_access deny all !office icp_access allow all --------------------------- Браузер по таймауту говорит, что невозможно отобразить страницу. а access.log сквидовский ловит подобное: ----------------------------------------- 1198840773.503 179912 192.168.100.1 TCP_MISS/504 1461 GET http://www.google.ru/complete/search? - DIRECT/216.239.59.104 text/html ------------------------------------------ Если делаю squid непрозрачным, то он валит в браузер сообщение о неправильно переданном запросе, и аналогичную запись делает в access.log. На момент написания поста перерыл просторы инета в поисках решения, но поа безрезультатно. Буду признателен за любую помощь Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 29 декабря, 2007 Жалоба Поделиться Опубликовано 29 декабря, 2007 Сквид обновлять пробовали? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.