Пытаюсь поднять шлюз на CentOS 5.4 (iptables+dns+squid+sard+dhcp+webmin+asterisk)вроде все сделал...на серваке инет есть а на клиенских машинах нет...внешка с них пигуется тока по ip...скорее всего что в iptables...но не пойму где)))
на серваке запущен кеширующий DNS сервер
eth0-инет 111.111.111.111
eth1-локалка 10.0.0.1iptables
#!/bin/sh
IPTABLES="/sbin/iptables"# Очищаем все правила в таблицах filter, nat и mangle
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F# Удаляем все пользовательские цепочки в таблицах filter, nat и mangle
$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X# Задаем политики по умолчанию
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP# Создаем пользовательские цепочки.
$IPTABLES -N eth0-eth1
$IPTABLES -N eth1-eth0
$IPTABLES -N eth1-out
$IPTABLES -N eth0-out
$IPTABLES -N eth1-in
$IPTABLES -N eth0-in
$IPTABLES -N icmp_packets# Направляем все входящие пакеты в соответствующие цепочки.
$IPTABLES -A INPUT -d 111.111.111.111 -j eth0-in
$IPTABLES -A INPUT -d 10.0.0.1 -j eth1-in# Направляем все исходящие пакеты в соответствующие цепочки.
$IPTABLES -A OUTPUT -s 111.111.111.111 -j eth0-out
$IPTABLES -A OUTPUT -s 10.0.0.1 -j eth1-out# Разрешаем весь трафик с петлевого интерфейса.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT# Разрешаем следующие типы icmp пакетов.
$IPTABLES -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT# Для удобства фильтрации, направляем все транзитные пакеты,
# в соответствующие цепочки.
# eth0-eth1 мир -> локальная сеть
# eth1-eth0 локальная сеть -> мир
$IPTABLES -A FORWARD -i eth0 -o eth1 -j eth0-eth1
$IPTABLES -A FORWARD -i eth1 -o eth0 -j eth1-eth0# eth0-eth1. В данную цепочку попадают все транзитные пакеты,
# направленные из мира в локальную сеть.
$IPTABLES -A eth0-eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-eth1 -j DROP# eth1-eth0. В данную цепочку попадают все транзитные пакеты,
# направленные из локальной сети в мир.
$IPTABLES -A eth1-eth0 -p icmp -j icmp_packets
$IPTABLES -A eth1-eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-eth0 -j DROP# eth1-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из локальной сети.
$IPTABLES -A eth1-in -p icmp -j icmp_packets
$IPTABLES -A eth1-in -p udp --dport 53 -j ACCEPT #DNS
$IPTABLES -A eth1-in -p tcp --dport 80 -j ACCEPT #http
$IPTABLES -A eth1-in -p tcp --dport 3128 -j ACCEPT #SQUID
$IPTABLES -A eth1-in -p tcp --dport 5060 -j ACCEPT #SIP
$IPTABLES -A eth1-in -j DROP# eth0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из мира. Например www, smtp, ftp
$IPTABLES -A eth0-in -p icmp -j icmp_packets
$IPTABLES -A eth0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-in -j DROP# eth1-out.
$IPTABLES -A eth1-out -p icmp -j icmp_packets
$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth1-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-out -j DROP# eth0-out.
$IPTABLES -A eth0-out -p icmp -j icmp_packets
$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-out -j DROP# Производим сетевую трансляцию адресов (NAT)
$IPTABLES -t nat -A POSTROUTING -s 10.0.0.1/24 -o eth0 -j SNAT --to-source 111.111.111.111
# "Заварачиваем" весь http трафик на squid.
$IPTABLES -t nat -A PREROUTING -s 10.0.0.1/24 -i eth1 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128squid.conf
http_port 10.0.0.1:3128 transparent
hierarchy_stoplist cgi-bin, chat
cache_mem 128 MB
maximum_object_size 128 MB
ftp_user anonymous
negative_ttl 1 minutes
positive_dns_ttl 1 hours
negative_dns_ttl 5 minutes
visible_hostname gateway
emulate_httpd_log off
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_dir ufs /var/spool/squid 1024 32 128
acl all src 0.0.0.0/0.0.0.0
acl inet_user src 10.0.0.0/24 192.168.1.0/24
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https, snewsacl CONNECT method CONNECT
http_access allow inet_user
http_access deny allerror_directory /usr/share/squid/errors/English
resolv.conf
nameserver 127.0.0.1
search localdomain
>[оверквотинг удален]
>$IPTABLES -A eth0-in -p icmp -j icmp_packets
>$IPTABLES -A eth0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
>$IPTABLES -A eth0-in -j DROP
>
># eth1-out.
>$IPTABLES -A eth1-out -p icmp -j icmp_packets
>$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
>$IPTABLES -A eth1-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
>$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>$IPTABLES -A eth1-out -j DROPтут действительно --dport должен быть?
>
># eth0-out.
>$IPTABLES -A eth0-out -p icmp -j icmp_packets
>$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>$IPTABLES -A eth0-out -j DROPчто-то не понятно как без --state NEW на шлюзе заработал инет
смотрим текущие правила iptables-save.
у клиентов DNS прописан? если да, то чей.>[оверквотинг удален]
>http_access allow inet_user
>http_access deny all
>
>error_directory /usr/share/squid/errors/English
>
nameserver 127.0.0.1
>[оверквотинг удален]
>>
>># eth1-out.
>>$IPTABLES -A eth1-out -p icmp -j icmp_packets
>>$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
>>$IPTABLES -A eth1-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
>>$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>>$IPTABLES -A eth1-out -j DROP
>
>тут действительно --dport должен быть?
>сменил на --sport
>>
>># eth0-out.
>>$IPTABLES -A eth0-out -p icmp -j icmp_packets
>>$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>>$IPTABLES -A eth0-out -j DROP
>
>что-то не понятно как без --state NEW на шлюзе заработал инетнезнаю)))
>смотрим текущие правила iptables-save.# Generated by iptables-save v1.3.5 on Thu Mar 25 11:39:03 2010
*filter
:INPUT DROP [1:237]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:eth0-eth1 - [0:0]
:eth0-in - [0:0]
:eth0-out - [0:0]
:eth1-eth0 - [0:0]
:eth1-in - [0:0]
:eth1-out - [0:0]
:icmp_packets - [0:0]
-A INPUT -d 111.111.111.111 -j eth0-in
-A INPUT -d 10.0.0.1 -j eth1-in
-A INPUT -i lo -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j eth0-eth1
-A FORWARD -i eth1 -o eth0 -j eth1-eth0
-A OUTPUT -s 111.111.111.111 -j eth1-out
-A OUTPUT -s 10.0.0.1 -j eth1-out
-A OUTPUT -o lo -j ACCEPT
-A eth0-eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A eth0-eth1 -j DROP
-A eth0-in -p icmp -j icmp_packets
-A eth0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
-A eth0-in -j DROP
-A eth0-out -p icmp -j icmp_packets
-A eth0-out -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A eth0-out -j DROP
-A eth1-eth0 -p icmp -j icmp_packets
-A eth1-eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A eth1-eth0 -j DROP
-A eth1-in -p icmp -j icmp_packets
-A eth1-in -p tcp -m tcp --dport 22 -j ACCEPT
-A eth1-in -p udp -m udp --dport 53 -j ACCEPT
-A eth1-in -p tcp -m tcp --dport 80 -j ACCEPT
-A eth1-in -p tcp -m tcp --dport 3128 -j ACCEPT
-A eth1-in -p tcp -m tcp --dport 5060 -j ACCEPT
-A eth1-in -j DROP
-A eth1-out -p icmp -j icmp_packets
-A eth1-out -p udp -m udp --sport 53 -j ACCEPT
-A eth1-out -p tcp -m multiport --dports 22,53,80,443 -j ACCEPT
-A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
-A eth1-out -j DROP
-A icmp_packets -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT
COMMIT
# Completed on Thu Mar 25 11:39:03 2010
# Generated by iptables-save v1.3.5 on Thu Mar 25 11:39:03 2010
*nat
:PREROUTING ACCEPT [123:15542]
:POSTROUTING ACCEPT [2:136]
:OUTPUT ACCEPT [119:9015]
-A PREROUTING -s 10.0.0.0/255.255.255.0 -i eth1 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 111.111.111.111
COMMIT
# Completed on Thu Mar 25 11:39:03 2010
# Generated by iptables-save v1.3.5 on Thu Mar 25 11:39:03 2010
*mangle
:PREROUTING ACCEPT [186:21282]
:INPUT ACCEPT [66:5562]
:FORWARD ACCEPT [120:15720]
:OUTPUT ACCEPT [219:25427]
:POSTROUTING ACCEPT [222:32268]
COMMIT
# Completed on Thu Mar 25 11:39:03 2010
>у клиентов DNS прописан? если да, то чей.
>у клиентов dns 10.0.0.1
>[оверквотинг удален]
>>http_access allow inet_user
>>http_access deny all
>>
>>error_directory /usr/share/squid/errors/English
>>
>>
>>resolv.conf
>>
>>nameserver 127.0.0.1
>>search localdomain
nslookup opennet.ru со шлюза и с клиента
>тут действительно --dport должен быть?ну да, а как иначе локальный ДНС будет резолвить имена?
>что-то не понятно как без --state NEW на шлюзе заработал инет
>смотрим текущие правила iptables-save.
>у клиентов DNS прописан? если да, то чей.а зачем в цепочке output в локальную сеть состояние NEW?
Если с внутренних компов пингуются внешние IP, значит проблема точно не в IPTABLE, мало того проблема точно в DNS.
>Если с внутренних компов пингуются внешние IP, значит проблема точно не в
>IPTABLE, мало того проблема точно в DNS.понятное дело что dns, только что именно с ним не так, я полагаю что iptables его запросы в инет не пропускает.
>>тут действительно --dport должен быть?
>
>ну да, а как иначе локальный ДНС будет резолвить имена?
># eth1-out.
>$IPTABLES -A eth1-out -p icmp -j icmp_packets
>$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
>$IPTABLES -A eth1-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
>$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>$IPTABLES -A eth1-out -j DROPчерез эти правила, я так понял, идут пакеты в локалку, я усомнился что там есть еще DNS и WEB сервера по этому и спросил, а ответы клиенту пойдут через правило с -m state --state RELATED,ESTABLISHED, а не через -p udp --dport 53
>
>>что-то не понятно как без --state NEW на шлюзе заработал инет
>>смотрим текущие правила iptables-save.
>>у клиентов DNS прописан? если да, то чей.
>
>а зачем в цепочке output в локальную сеть состояние NEW?а эти правила , я так понимаю, для выхода в инет, как без NEW будет работать squid и как DNS будет слать запросы наружу я не понял.
># eth0-out.
>$IPTABLES -A eth0-out -p icmp -j icmp_packets
>$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
>$IPTABLES -A eth0-out -j DROP
Думаю с вероятностью 99% что проблема вообще не в IPTABLE, так как вы сказали что подняли кеширующий DNS, и указали на клиентской машине DNS - IP своего сервака. Для проверки моей теории на клиентской машине укажите DNS провайдера, если все заработает, а оно скорее так и будет ;), то крутите свой DNS сервер. Я юзаю bind посему мог бы подсказать только по нему.
>Думаю с вероятностью 99% что проблема вообще не в IPTABLE, так как
>вы сказали что подняли кеширующий DNS, и указали на клиентской машине
>DNS - IP своего сервака. Для проверки моей теории на клиентской
>машине укажите DNS провайдера, если все заработает, а оно скорее так
>и будет ;), то крутите свой DNS сервер. Я юзаю bind
>посему мог бы подсказать только по нему.вопрос не мой :).
если он на клиенте укажит DNS провайдера то это заработает, так как пакеты пойдут, через другие правила iptables, и в них, для работы все разрешено, но так он свой dns не проверит.
>вопрос не мой :).упс... сорри :)
проблема действительно в ДНСnslookup с сервака вырисовывает вот такую штуку
Server: 127.0.0.1
Address: 127.0.0.1#53Non-authoritauncanswer
Name: opennet.ru
Address:77.234.201.242насколько я понимаю надо переписать конфиги bind чтобы все резолвилось на 10.0.0.1
и в resolv.conf указать nameserver 10.0.0.1ща выложу подправленные конфиги...инет правда смогу тока вечером проверить...а то меня повесят если отрублю всех)))
named.conf
options {
directory "/var/named"
dump_file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
version "pipec";
allow-transfer { none; };
listen-on port 53 { 127.0.0.1; 10.0.0.1; };
allow-query { localhost; 127.0.0.1; 10.0.0.1; };
allow-recursion { localhost; 127.0.0.1; 10.0.0.1; };
};/var/named/chroot/etc/named.caching-nameserver.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
listen-on port 53 { 10.0.0.1; };
// listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;allow-query { any; };
allow-query-cache { any; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients { any; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};resolv.conf
nameserver 10.0.0.1Так правильно?
а где тут у Вас в конфиге следующие строки, которые говорят bind'у о DNS провайдера?К примеру:
forward first;
forwarders {
хх.хх.160.130;хх.хх.160.140;
};А еще бы не мешало добавить что то типо:
acl "corpnet" {192.168.0.0/24;127.0.0.1;};
allow-query { "corpnet"; };
>[оверквотинг удален]
>К примеру:
> forward first;
> forwarders {
> хх.хх.160.130;хх.хх.160.140;
>
> };
>
>А еще бы не мешало добавить что то типо:
>acl "corpnet" {192.168.0.0/24;127.0.0.1;};
>allow-query { "corpnet"; };вот так сойдет?
named.conf
options {
directory "/var/named"
dump_file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
version "pipec";
allow-transfer { none; };
listen-on port 53 { 127.0.0.1; 10.0.0.1; };
forward first;
forwarders {
хх.хх.160.130;хх.хх.160.140;
};
allow-query { localhost; 127.0.0.1; 10.0.0.1; };
allow-recursion { localhost; 127.0.0.1; 10.0.0.1; };
};а зачем нужны днс провайдера здесь? я же вроде как свой ДНС запускаю
>а зачем нужны днс провайдера здесь? я же вроде как свой ДНС
>запускаюкак правило ДНС провайдера быстрее ответит, чем твой сервер делая рекурсивные запросы.
>[оверквотинг удален]
>listen-on port 53 { 127.0.0.1; 10.0.0.1; };
>forward first;
> forwarders {
>
> хх.хх.160.130;хх.хх.160.140;
> };
>
>allow-query { localhost; 127.0.0.1; 10.0.0.1; };
>allow-recursion { localhost; 127.0.0.1; 10.0.0.1; };
>};Не не сойдет... ты разрешил запросы только с машины 10.10.0.1, а как же остальная локалка?
Нужно allow-query { localhost; 127.0.0.1; 10.0.0.0/24; };
>[оверквотинг удален]
>> хх.хх.160.130;хх.хх.160.140;
>> };
>>
>>allow-query { localhost; 127.0.0.1; 10.0.0.1; };
>>allow-recursion { localhost; 127.0.0.1; 10.0.0.1; };
>>};
>
>Не не сойдет... ты разрешил запросы только с машины 10.10.0.1, а как
>же остальная локалка?
>Нужно allow-query { localhost; 127.0.0.1; 10.0.0.0/24; };а ну да ...ступил чето)))
Что то мне подсказывает, что пример iptables был взят с моего сайта sys-adm.org.ua, в котором eth0 смотрел в локалку :)
>Что то мне подсказывает, что пример iptables был взят с моего сайта
>sys-adm.org.ua, в котором eth0 смотрел в локалку :)типо того)))....но щас eth0 смотрит в инет