Перейти к содержанию

slaven

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

    Никогда

Достижения slaven

  1. Добрый день... поставили передо мной такую банальную задачу организации интернета: 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. На момент написания поста перерыл просторы инета в поисках решения, но поа безрезультатно. Буду признателен за любую помощь
×
×
  • Создать...