LINUX.ORG.RU
ФорумAdmin

Помогите с iptables+squid+nat


0

0

Добрый день, вот не могу разобратmся с iptables голову уже себе сломал.

есть 3 сетевухи

eth0 - это между серверами
eth1 - это интернет
eth2 - это squid

Проблема в том что я немогу запретить натировать исходящий травик пользователей через нат(нужно только особые порты оставить)

У меня либо пускает все либо не пускает вобще

Вот скрипт запуска iptables
startFirewall() {

echo -n "Starting iptables (created by KMyFirewall)... "
if [ "$verbose" = "1" ]; then
echo -n "
Loading needed modules... "
fi


$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_LOG
$MOD ipt_limit
$MOD ipt_state
$MOD ip_conntrack_ftp
$MOD ip_conntrack_irc

$MOD iptable_filter
$MOD iptable_nat
$MOD iptable_mangle


############################################################################### #################
# Правила для цепочки отключенных пользователей #
for IP_D in `cat ./DISABLE | awk '{print $1}'`
do
$IPT -t filter -A INPUT --source $IP_D -j DROP
done
# #
############################################################################### #################

#$IPT -t filter -A INPUT -i eth0 -p ALL -j ACCEPT # Трафик между 10.6.213.1 <-> 10.6.213.2
$IPT -t filter -A INPUT --source 10.6.213.1 -p ALL -j ACCEPT # Трафик между 10.6.213.1 <-> 10.6.213.2
$IPT -t filter -A INPUT --match limit --limit 1/second --limit-burst 5 -p icmp --icmp-type echo-request -j ACCEPT # Ограничения ICMP
$IPT -t filter -A INPUT --source 127.0.0.1 -j ACCEPT
$IPT -t filter -A INPUT --source 10.10.10.10 -j ACCEPT
$IPT -t filter -A INPUT --source 10.10.10.11 -j ACCEPT
$IPT -t filter -A INPUT --match state --state RELATED,ESTABLISHED -j ACCEPT


Я понимаю что эти строки разрешают входящий трафик следующий в интернет ???
$IPT -t filter -A INPUT -d ! 10.10.0.0/16 -p tcp --destination-port 80 -j ACCEPT
$IPT -t filter -A INPUT -d ! 10.10.0.0/16 -p tcp --destination-port 8080 -j ACCEPT
$IPT -t filter -A INPUT -d ! 10.10.0.0/16 -p tcp --destination-port 81 -j ACCEPT
$IPT -t filter -A INPUT -d ! 10.10.0.0/16 -p tcp --destination-port 21 -j ACCEPT
$IPT -t filter -A INPUT -d ! 10.10.0.0/16 -p tcp --destination-port 433 -j ACCEPT




$IPT -t filter -A INPUT -d 10.10.10.0/24 -j ACCEPT # я вот думаю что это всё из за этой строчки

$IPT -t filter -A INPUT -j LOG --log-prefix "KMF:"
$IPT -t filter -P INPUT DROP

$IPT -t filter -P OUTPUT ACCEPT

$IPT -t filter -P FORWARD ACCEPT



$IPT -t nat -A PREROUTING -d ! 10.10.0.0/16 -p tcp --destination-port 80 -j REDIRECT --to-port 3128 # Перенаправление на SQUID
$IPT -t nat -A PREROUTING -d ! 10.10.0.0/16 -p tcp --destination-port 21 -j REDIRECT --to-port 3128 # Перенаправление на SQUID
$IPT -t nat -A PREROUTING -d ! 10.10.0.0/16 -p tcp --destination-port 81 -j REDIRECT --to-port 3128 # Перенаправление на SQUID
$IPT -t nat -A PREROUTING -d ! 10.10.0.0/16 -p tcp --destination-port 8080 -j REDIRECT --to-port 3128 # Перенаправление на SQUID



$IPT -t nat -P OUTPUT ACCEPT

$IPT -t nat -A POSTROUTING -p icmp -j MASQUERADE
$IPT -t nat -A POSTROUTING -j MASQUERADE # если убрать эту строчку то следуяшая строка не работает
$IPT -t nat -A POSTROUTING -p tcp --destination-port 433 -j MASQUERADE

$IPT -t nat -P POSTROUTING ACCEPT

$IPT -t mangle -P INPUT ACCEPT

$IPT -t mangle -P OUTPUT ACCEPT

$IPT -t mangle -P FORWARD ACCEPT

$IPT -t mangle -P PREROUTING ACCEPT

$IPT -t mangle -P POSTROUTING ACCEPT

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

for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
echo 0 > $i
done


for i in /proc/sys/net/ipv4/conf/*/log_martians ; do
echo 0 > $i
done

echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Done."
}


Помогите плыз тут яно всё просто должно быть, а у сервера должен быть доступ полноценный



> Я понимаю что эти строки разрешают входящий трафик следующий в интернет ???

Нет. Как так "входящий трафик следует в инет"? -t filter -A INPUT - это для локальных пакетов, а вам надо работать с транзитными. В цепочке FORWARD таблици filter вам надо запрещять/разрешать? а в таблице nat делать NAT.

Если возможно, скажите поточнее, какой именно трафик куда вам надо направить. Вам надо направить только web и ftp трафик на прозрачный сквид, так?

ps: хороший док по iptables:
http://www.opennet.ru/docs/RUS/iptables/
http://iptables-tutorial.frozentux.net/iptables-tutorial.html

samson ★★
()

В самом простом случае - перенаправтить web трафик на сквид, а остальное натить, можно сделать так:

LOCALNET=10.0.0.0/24

iptables -A FORWARD -s $LOCALNET -d ! $LOCALNET -j ACCEPT
iptables -A FORWARD -d $LOCALNET -s ! $LOCALNET -j ACCEPT

iptables -t nat -A PREROUTING -s $LOCALNET -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s $LOCALNET -j MASQUERADE


Вместо MASQUERADE можно сделать SNAT.

ps: -t filter -A INPUT - здесь не причем.

samson ★★
()
Ответ на: комментарий от samson

>Если возможно, скажите поточнее, какой именно трафик куда вам надо направить. Вам надо направить только web и ftp трафик на прозрачный сквид, так?

Мне нужно web и ftp перенаправить на squid а порты 433,25,110,53(и др) пропустить напрямую, все остальные порты закрыть

спосибо за доки

loewa
() автор топика
Ответ на: комментарий от loewa

для веб у вас уже есть правило, добавьте следом еще такое же для 20,21 портов. А MASQUERADE (или SNAT), последнее правило, сделайте не для всех, а для отдельных tcp/udp портов. И все.

ps: Закрывать ничего не надо. Точнее, надо закрывать ВСЕ и разрешать только то, что надо. Но для начала заставьте работать, а уж потом думайте о безопасности.

samson ★★
()
Ответ на: комментарий от samson

>А MASQUERADE (или SNAT), последнее правило, сделайте не для всех, а для отдельных tcp/udp портов. И все.

Я с начала так и делал, но не понимаю почему не работает

вот тот участок кода
$IPT -t nat -A POSTROUTING -p icmp -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 25 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 433 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 433 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 110 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 1024 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 5190 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 8000 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 60660 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 60660 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 40150 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 2106 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 7777 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 3724 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p tcp --destination-port 3724 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 10007 -j MASQUERADE
$IPT -t nat -A POSTROUTING -p udp --destination-port 27780 -j MASQUERADE

Может быт ещё чтото надо дописать

loewa
() автор топика
Ответ на: комментарий от loewa

Вопрос закрыт. дело было в не внимательности https это ведь 443 порт а у меня на писано 433 :) Всё работает, Спасибо подругому бы не заметил

loewa
() автор топика
Ответ на: комментарий от loewa

а ДНС у клиентов в локалке внутренний или внешний? А то еще и про него не забыть надо...

samson ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.