iptables+pdnsd+squid...
Neomix 29 июля, 2008 - 07:05
Подскажите как настрить на правельную работу эту связку. У меня все ни как неполучается заставить работать squid быстрее, открытие страницы mail.ru на клиентских машинах вообще не дождаться. Посоветовали поставить кэширующий DNS пока не чего не получатеся с корректной настройкой... :(
»
- Для комментирования войдите или зарегистрируйтесь
В squid.conf
В squid.conf пропиши
dns_nameservers IP_твоего_сервера_имен_провайдерского
В этом случае сквид не будет терзать неправильно настроеные локальные ДНС и все прочее а сразу резолвится с помощью заранее правильно настроеного :)
К сожилению тоже не помогает.... :(
К сожилению это тоже не помогает :( Время открытия стриницы очень велико и иногда страница даже и не открывается, просто весит в прогрессе. :(
Конфиги
Показывай конфиги сквида и iptables
только вывод фильтруй от конфига сквида по grep -v ^# ./squid.conf
#
# /etc/squid/squid.conf
#
http_port 192.168.0.100:2139
#===============================================================================
cache_mem 250 MB
#
maximum_object_size_in_memory 120 KB
#
cache_dir ufs /var/spool/squid 10240 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#
auth_param basic program /usr/libexec/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Internet connection Proxy-server...
auth_param basic credentialsttl 15 minute
auth_param basic casesensitive off
#
#
url_rewrite_program /usr/bin/squidGuard
url_rewrite_children 5
#
#
acl our_users proxy_auth REQUIRED
acl zapret src 0.0.0.0/0.0.0.0
acl our_network src 192.168.0.0/24
#
acl SSL_ports port 443
acl Safe_ports port 53 # DNS
acl Safe_ports port 5190 # ICQ
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 SMTP port 25
acl CONNECT method CONNECT
#
acl bad_urlpath urlpath_regex "/etc/squid/bad_url_path"
#
error_directory /usr/share/squid/errors/Russian-koi8-r
icon_directory /usr/share/squid/icons
#
http_access allow our_users
http_access allow our_network
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny SMTP
http_access deny bad_urlpath
http_access deny zapret
icp_access allow zapret
cache_effective_user squid
cache_effective_group squid
visible_hostname Proxy-server.office
_________________________________________________________________
#!/sbin/runscript
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.3.2.init,v 1.6 2007/03/12 21:49:04 vapier Exp $
#
IPTABLES='/sbin/iptables'
#
EXTIF='eth0'
EXTIF_IP='192.168.0.1'
EXTIF_GW='192.168.0.254'
№
LAN='192.168.0.4/24' LAN_IF='eth1'
LAN_IP='192.168.0.100'
LO_IF='lo'
LO_IP='127.0.0.1'
LOOPBACK='127.0.0.1/8'
#
DNS1=195.154.2.1
DNS2=212.57.145.253
#
POLICY='DROP'
#
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
#
#depend() {
# before net
# use logger
# }
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -N allowed
$IPTABLES -F allowed
$IPTABLES -A allowed -m state --state ESTABLISHED,RELATED -j ACCEPT
#
$IPTABLES -A allowed -i $EXTIF -m limit --limit 1/second -j ULOG --ulog-prefix "Bad packet from $EXTIF"
$IPTABLES -A allowed -j $POLICY
#
$IPTABLES -N com-allow
$IPTABLES -F com-allow
$IPTABLES -A com-allow -p tcp -j ACCEPT
$IPTABLES -A com-allow -p udp -j ACCEPT
#------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------
$IPTABLES -A FORWARD -i $LAN_IF -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -N icmp_in
$IPTABLES -F icmp_in
#
$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
#
# $IPTABLES -A icmp_in -p icmp -j ULOG --ulog-prefix "Bad ICMP"
#
# 2.
$IPTABLES -N ssh-in
$IPTABLES -F ssh-in
$IPTABLES -A ssh-in -p tcp --dport 22 -j ACCEPT
#
$IPTABLES -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT
$IPTABLES -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT
$IPTABLES -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT
$IPTABLES -A ssh-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT
#------------------------------------------------------------------------------------------------------#------------------------------------------------------------------------------------------------------
#
$IPTABLES -N icmp_out
$IPTABLES -F icmp_out
$IPTABLES -A icmp_out -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_out -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp_out -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
#
$IPTABLES -N check_tcp
$IPTABLES -F check_tcp
#
$IPTABLES -A allowed -m state --state INVALID -m limit --limit 3/minute -j ULOG --ulog-prefix "INVALID"
$IPTABLES -A allowed -m state --state INVALID -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags SYN,ACK,SYN ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A check_tcp -p tcp ! --syn -m state --state NEW -j ULOG --ulog-prefix "NEW not --syn"
$IPTABLES -A check_tcp -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j ULOG --ulog-prefix "NMAP-XMAS"
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS"
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS-PSH"
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j ULOG --ulog-prefix "NULL_SCAN"
$IPTABLES -A check_tcp -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/RST"
$IPTABLES -A check_tcp -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A check_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/FIN"
$IPTABLES -A check_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#------------------------------------------------------------------------------------------------------
# t mangle PREROUTING
#------------------------------------------------------------------------------------------------------
# mangle
$IPTABLES -t mangle -A PREROUTING -p esp -j MARK --set-mark 1
#------------------------------------------------------------------------------------------------------
# nat PREROUTING
#------------------------------------------------------------------------------------------------------
#$IPTABLES -t nat PREROUTING -i $WAN1_IF -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100
#------------------------------------------------------------------------------------------------------
$IPTABLES -A FORWARD -i $LAN_IF -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
#
#----------------------------------------------------------------------------------------------------------
# INPUT
#------------------------------------------------------------------------------------------------------
# $IPTABLES -A INPUT -p tcp -j check_tcp
# SSH
$IPTABLES -A INPUT -p tcp --dport 22 -j ssh-in
# SQUID----!!!!!!!!!!!!!!!!!!!!!!!!!
#$IPTABLES -A INPUT -s $LAN_IP -p tcp --dport 2139 -j com-allow
#
$IPTABLES -A INPUT -s $LAN_IP -p tcp --dport 10000 -j ACCEPT
#
# DNS
$IPTABLES -A INPUT -s $LAN_IP -p udp --dport domain -j com-allow
#
# icmp
$IPTABLES -A INPUT -p icmp -j icmp_in
#
$IPTABLES -A INPUT -i $LO_IF -d $LOOPBACK -j ACCEPT
#
$IPTABLES -A INPUT -j allowed
#-----------------------------------------------------------------------------------------------------
# $IPTABLES -A FORWARD -j check_tcp
#
# SSH
$IPTABLES -A FORWARD -s $LAN_IP -p tcp --dport 22 -j com-allow #------!!!!!!!!!!!!!!!!!!!!!!!!!
#
# $IPTABLES -A FORWARD -p icmp -j icmp_in
#
# $IPTABLES -A FORWARD -i $LAN_IF -s $LAN -p tcp --dport 5190 -j com-allow
#
№ POP ╨╕ SMTP
$IPTABLES -A FORWARD -i $LAN_IF -s $LAN -p tcp -m multiport --dport 25,110 -j com-allow
#
$IPTABLES -A FORWARD -o $LO_IF -d $LOOPBACK -j ACCEPT
#
$IPTABLES -A FORWARD -j allowed
#
#-----------------------------------------------------------------------------------------------------
# OUTPUT
#-----------------------------------------------------------------------------------------------------
#
$IPTABLES -A OUTPUT -j check_tcp
$IPTABLES -A OUTPUT -o $LAN_IF -j ACCEPT
$IPTABLES -A OUTPUT -p icmp -j icmp_out
$IPTABLES -A OUTPUT -o $LO_IF -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 22 -j com-allow
$IPTABLES -A OUTPUT -p udp --dport domain -j com-allow
#
#$IPTABLES -A OUTRUT -p tcp --dport 53 -j com-allow
#
$IPTABLES -A OUTPUT -p tcp -m multiport --dport http,https -j com-allow
$IPTABLES -A OUTPUT -j allowed
#-----------------------------------------------------------------------------------------------------------------------
# NAT POSTROUTING
#
#
$IPTABLES -t nat -A POSTROUTING -s $LAN -o $EXTIF -p tcp --dport 22 -j SNAT --to-source $EXTIF_IP
$IPTABLES -t nat -A POSTROUTING -s $LAN -o $EXTIF -p tcp -m multiport --dport 25,110 -j SNAT --to-source $EXTIF_IP
$IPTABLES -t nat -A POSTROUTING -s $LAN -o $EXTIF -p tcp --dport 5190 -j SNAT --to-source $EXTIF_IP
$IPTABLES -t nat -A POSTROUTING -s $LAN -o $EXTIF -p icmp -j SNAT --to-source $EXTIF_IP
Это что?
EXTIF='eth0'
EXTIF_IP='192.168.0.1'
EXTIF_GW='192.168.0.254'
LAN='192.168.0.4/24' LAN_IF='eth1'
LAN_IP='192.168.0.100'
Это надо так понимать что у тебя ДВА разных интерфейса находятся в ОДНОЙ подсети???
Убирай такую конфигу - надо просто запомнить как аксиому - не могут НЕСКОЛЬКО интерфейсов на ОДНОЙ машине находится
в ОДНОЙ подсетке. Т.е. надо внутреннюю сеть которая на eth1 перевести скажем на 192.168.1.0/24
И почему LAN='192.168.0.4/24' а не LAN='192.168.0.0/24'
Откуда такой скрипт поднятия iptables?
По стандарту в Gentoo конфиг iptables лежит в /var/lib/iptables/rules-save
И запускается соответственно /etc/init.d/iptables
Стартовый конфиг - /etc/conf.d/iptables
Один интерфейс
Один интерфейс смотрит в сторону интернет через роутер на котором отключен DHCP, а насчет того что 2 интерфейса в одной подсети - это мера вынужденная пока сервер находится в стадии отладки (все клиеты пока выходят в интернет на прямую через роутер).
>И почему LAN='192.168.0.4/24' а не LAN='192.168.0.0/24'
Признаю опечатка вышла.
Конфиг брал из статьи размещенной в русской ветке wiki.
хех...
>>а насчет того что 2 интерфейса в одной подсети - это мера вынужденная пока сервер находится в стадии отладки
Та неужели не понятно что так ты его не отладиш??? Можно до посинения его отлаживать, но пакеты все равно не будут знать куда им бегать :))
Вот так и получается у тебя - и сквид здесь не виноват - пакет приходит от клиента и пытается уйти в тот же интерфес с которого пришел :)
Дойдет он по назначению??? как думаеш???
Конфиг iptables
Вот конфиг тебе примерный под твою задачю - файл /var/lib/iptables/rules-save
Внешний интерфейс eth0
Внутренний интерфейс eth1
Внутреняя сеть (локальная) 192.168.1.0/24
IP адрес машины-шлюза (которая со сквидом) 192.168.1.1 на интерфейсе eth1
# Generated by iptables-save v1.3.8 on Tue Dec 4 20:52:41 2007
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Проброс портов BitTorrent на админскую машину
-A PREROUTING -p tcp -m tcp -i eth0 --dport 6881 -j DNAT --to-destination 192.168.1.100
-A PREROUTING -p udp -m udp -i eth0 --dport 4444 -j DNAT --to-destination 192.168.1.100
# Проброс порта RDP на офисный Windows сервер 1С
-A PREROUTING -p tcp -m tcp -i eth0 --dport 3389 -j DNAT --to-destination 192.168.1.90:3389
# Forward HTTP connections to Squid web proxy
-A PREROUTING -p tcp -m tcp ! -d 192.168.1.1 -i eth1 --dport 80 -j REDIRECT --to-ports 3128
# Forward HTTP connections to Frox ftp proxy
-A PREROUTING -p tcp -m tcp ! -d 192.168.1.1 -i eth1 --dport 21 -j REDIRECT --to-ports 2121
# Маскарайдинг на исходящем интерфейсе
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Dec 4 20:52:41 2007
# Generated by iptables-save v1.3.8 on Tue Dec 4 20:52:41 2007
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 4 20:52:41 2007
# Generated by iptables-save v1.3.8 on Tue Dec 4 20:52:41 2007
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT ! -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED -j ACCEPT
-A INPUT -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport -j ACCEPT --dports 21,22,80
-A INPUT -p tcp -m tcp --dport 113 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2049:2050 -j DROP
-A INPUT -p tcp -m tcp --dport 6000:6063 -j DROP
-A INPUT -p tcp -m tcp --dport 7000:7010 -j DROP
-A INPUT -p tcp -m tcp --dport 1024:65535 -j ACCEPT
-A INPUT -p tcp -m tcp ! -i eth1 --dport 0:1023 -j DROP
-A INPUT -p udp -m udp ! -i eth1 --dport 0:1023 -j DROP
# Ниже строка понадобится если этой машиной поднимать ppp соединение
# -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Tue Dec 4 20:52:41 2007
Если нет Frox установленного - закоментируй строку к Frox ftp proxy
И в /etc/conf.d/iptables поставь
SAVE_ON_STOP="no"
Старый конфиг деактивируй - и iptables поднимай /etc/init.d/iptables скриптом
Супер. Большое
Супер. Большое спасибо за помощь с iptables. :) Но вот сейравно очень медленно грузятся страницы на клиентских машинах :(. Как с этим быть? Подскажи пожалуйста в каком направлении разбираться? :)
Интерфейсы
Интерфейсы разнес по разным подсеткам???
Если да - отключи временно в сквиде все не нужное (авторизация и т.д.), оставь только transparent - как работать будет?
Интерфейсы
Интерфейсы разнес в разные подсетки
В squid.conf оставил только...
# /etc/squid/squid.conf
#
http_port 192.168.1.1:2139
#===============================================================================
cache_mem 250 MB
#
maximum_object_size_in_memory 120 KB
#
cache_dir ufs /var/spool/squid 10240 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#
acl our_network src 192.168.1.0/24
#
#
http_access allow our_network
#
cache_effective_user squid
cache_effective_group squid
visible_hostname Proxy-server.office
--------------------------------------------
Ура, о чудо! :) Хоть что то более мение с натягом терпимо стало загружаться. Так, а что делать с авторизацией? Я так понял все дело было в ней?
dns_nameservers
Добавь на всяк случай в конф сквида
dns_nameservers IP_твоего_сервера_имен_провайдерского
дабы убедится что проблема не в резолвинге имен
И насколько мне известно, при прозрачном проксировании авторизация в сквиде не
работает - значит есть смысл закоментировать эту строку в конфиге iptables
Добавил DNS в
Добавил DNS в конфиг сквида и убрал строку в iptables. Все осталось на таком же уровне, т.е. на клиентских машинах с натягом можно выходить в интернет.