Народ помогите пожалуйста пробросить torrents.
Ситуация такая: инет-шлюз имеет два интерфейса eth0 - внутренний (192.168.0.1), eth1 - внешний(192.168.1.2). К eth1 подключен ADSL модем (192.168.1.1). Модем конектится сам. В сети торрент-клиент 192.168.0.25. В модеме сделал проброс порта NAT/sua only порт 50000 на 192.168.1.2. Порт в клиенте проверял пишет что открыт. Но не качается. Где-то проблема с конектами из локалки во внешку. Вот мой скрипт iptables:
#!/bin/bash
echo "Starting firewall...."
echo ""
# Внешний интерфейс
EXTIF=eth1
# Внутренний интерфейс
INTIF1=eth0
# Loop-устройство/localhost
LPDIF=lo
LPDIP=127.0.0.1
LPDMSK=255.0.0.0
LPDNET="$LPDIP/$LPDMSK"
# Переменные текстовых инструментов
IPT='/sbin/iptables'
IFC='/sbin/ifconfig'
G='/bin/grep'
SED='/bin/sed'
# Deny вместо accept: предотвращает открытие "дыр"
# в то время, как мы закрываем порты и все такое
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
# Сброс всех существующих цепочек и стирание персональных цепочек
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS
do
$IPT -t $i -F
$IPT -t $i -X
done
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Проверка адреса источника
for f in /proc/sys/net/ipv4/conf/*/rp_filter;
do
echo 1 > $f
done
# Запрет маршрутизации IP от источника и редиректов ICMP
for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
do
echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
do
echo 0 > $f
done
echo 1 > /proc/sys/net/ipv4/ip_forward
# Установка переменных среды для внешнего интерфейса
EXTIP="`$IFC $EXTIF|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
EXTBC="255.255.255.255"
EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
EXTNET="$EXTIP/$EXTMSK"
echo "External interface: EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
echo ""
# Так как EXTBC отсутствует, я устанавливаю ее вручную как it to 255.255.255.255
# Это (надеюсь) послужит тем же целям
# Устанвка переменных среды для первого внутреннего интерфейса
INTIP1="`$IFC $INTIF1|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
INTBC1="`$IFC $INTIF1|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
INTMSK1="`$IFC $INTIF1|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
INTNET1="$INTIP1/$INTMSK1"
echo "Internal interface: INTIP1=$INTIP1 INTBC1=$INTBC1 INTMSK1=$INTMSK1 INTNET1=$INTNET1"
echo ""
# Сейчас мы собираемся создать несколько собственных цепочек, результатом работы
# которых будет логгинг отброшенных пакетов. Это поможет нам избежать необходимости
# вводить команду log перед каждым отбрасыванием пакета, что мы хотим запротоколировать.
# Первыми идут лог отброшенных пакетов и собственно отброс, затем лог пакетов с отказами
# и собственно отказы.
# Отключаем сообщения о том, что цепочки уже существуют (чтобы перезапуск был без мусора)
$IPT -N DROPl 2> /dev/null
$IPT -A DROPl -j LOG --log-prefix 'DROPl:'
$IPT -A DROPl -j DROP
$IPT -N REJECTl 2> /dev/null
$IPT -A REJECTl -j LOG --log-prefix 'REJECTl:'
$IPT -A REJECTl -j REJECT
# Весь траффик от устройства loopback принимается
# если IP совпадает с любым из наших интерфейсов.
$IPT -A INPUT -i $LPDIF -s $LPDIP -j ACCEPT
$IPT -A INPUT -i $LPDIF -s $EXTIP -j ACCEPT
$IPT -A INPUT -i $LPDIF -s $INTIP1 -j ACCEPT
# Широковещательные пакеты блокируем
$IPT -A INPUT -i $EXTIF -d $EXTBC -j DROPl
$IPT -A INPUT -i $INTIF1 -d $INTBC1 -j DROPl
$IPT -A OUTPUT -o $EXTIF -d $EXTBC -j DROPl
$IPT -A OUTPUT -o $INTIF1 -d $INTBC1 -j DROPl
$IPT -A FORWARD -o $EXTIF -d $EXTBC -j DROPl
$IPT -A FORWARD -o $INTIF1 -d $INTBC1 -j DROPl
# torrents
$IPT -A INPUT -s 0.0.0.0/0 -p tcp -m tcp --dport 50000 -j ACCEPT
$IPT -A FORWARD -i $EXTIF -o $INTIF1 -d 192.168.0.25 -p tcp -m tcp --dport 50000 -j ACCEPT
$IPT -t nat -A PREROUTING -i $EXTIF -p tcp --dport 50000 -j DNAT --to-destination 192.168.0.25
$IPT -P OUTPUT ACCEPT
$IPT -t nat -A POSTROUTING -p tcp --dst 192.168.1.2 --dport 50000 -j SNAT --to-source 192.168.0.25
# Блокируем доступ к внутренней сети из WAN
# Это также призвано не дать нечестивым крякерам использовать нашу сетку
# в качестве отправной точки для атак на других людей
# Перевод с языка iptables:
# "если пришедшие на наружный интерфейс пакеты были отправлены не с выданного
# nefarious адреса, выкинуть их как горячую картошку"
$IPT -A INPUT -i $EXTIF -d ! $EXTIP -j DROPl
# А сейчас мы блокируем внутренние адреса, кроме двух, присвоенных нашим двум
# внутренним интерфейсам.....только помните, что если вы воткнете свой лэптоп или
# какой другой pc в напрямую в одну из этих сетевых карт, то нужно удостовериться,
# что они имеют именно эти IP-адреса или добавить соответствующий адрес отдельно.
# Первый интерфейс/первая внутренняя сеть
$IPT -A INPUT -i $INTIF1 -s ! $INTNET1 -j DROPl
$IPT -A OUTPUT -o $INTIF1 -d ! $INTNET1 -j DROPl
$IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
$IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
# Дополнительная Egress-проверка
#$IPT -A OUTPUT -o $EXTIF -s ! $EXTNET -j DROPl
# Блокируем исходящиие пакеты ICMP (за исключением PING)
$IPT -A OUTPUT -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
$IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
# печально известные порты:
# 0 - tcpmux; у SGI есть уязвимость, через которую можно атаковать
# 13 - daytime
# 98 - Linuxconf
# 111 - sunrpc (portmap)
# 137:139, 445 - Microsoft
# SNMP: 161,2
# Флотилия Squid: 3128, 8000, 8008, 8080
# 1214 - Morpheus или KaZaA
# 2049 - NFS
# 3049 - очень заразный троян для Linux, часто путаемый с NFS
# Часто атакуемые: 1999, 4329, 6346
# Частые трояны 12345 65535
# 137:139 445
COMBLOCK="0:1 13 98 111 161:162 1214 1999 2049 3049 5190 4329 6346 8008 8080 12345 65535"
# Порты TCP:
# 98 - Linuxconf
# 512-5!5 - rexec, rlogin, rsh, printer(lpd)
# [очень серьезеные уязвимости; продолжаются ежедневные атаки]
# 1080 - прокси-серверы Socks
# 6000 - X (ЗАМЕЧАНИЕ. X через SSH - безопасен, и работает на порту TCP 22)
# Блокировка 6112 (CDE у Sun и HP)
TCPBLOCK="$COMBLOCK 98 512:515 1080 5190 6112"
# Порты UDP:
# 161:162 - SNMP
# 520=RIP, 9000 - Sangoma
# 517:518 - talk и ntalk (самые надоедливые)
UDPBLOCK="$COMBLOCK 161:162 520 517:518 1427 5190 9000"
echo -n "FW: Blocking attacks to TCP port"
for i in $TCPBLOCK;
do
echo -n "$i "
$IPT -A INPUT -p tcp --dport $i -j DROPl
$IPT -A OUTPUT -p tcp --dport $i -j DROPl
$IPT -A FORWARD -p tcp --dport $i -j DROPl
done
echo ""
echo -n "FW: Blocking attacks to UDP port "
for i in $UDPBLOCK;
do
echo -n "$i "
$IPT -A INPUT -p udp --dport $i -j DROPl
$IPT -A OUTPUT -p udp --dport $i -j DROPl
$IPT -A FORWARD -p udp --dport $i -j DROPl
done
echo ""
# Открываем отлеживание соединений по ftp
MODULES="ip_nat_ftp ip_conntrack_ftp"
for i in $MODULES;
for i in $MODULES;
do
echo "Inserting module $i"
modprobe $i
done
# Защищаем некоторые распространенные клиенты для чата.
# Уберите из списка допустимых для пущей безопасности.
# IRC='ircd'
# MSN=1863
ICQ=5190
# NFS='sunrpc'
# Нам нужно синхронизировать данные!!
PORTAGE='rsync'
OpenPGP_HTTP_Keyserver=11371
# Все порты сервисов читаются из /etc/services
TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $ICQ $OpenPGP_HTTP_Keyserver"
UDPSERV="domain time"
echo -n "FW: Allowing inside systems to use service:"
for i in $TCPSERV;
do
echo -n "$i "
$IPT -A OUTPUT -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 --dport $i --syn -m state --state NEW -j ACCEPT
done
echo ""
echo -n "FW: Allowing inside systems to use service:"
for i in $UDPSERV;
do
echo -n "$i "
$IPT -A OUTPUT -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 --dport $i -m state --state NEW -j ACCEPT
done
echo ""
# Разрешается ping наружу
$IPT -A OUTPUT -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
# Файерволу разрешается ping внутренних систем
$IPT -A INPUT -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -o $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
# Откроем порт корпоративного jabber
$IPT -A INPUT -i $INTIF1 -p tcp --dport 5222 --syn -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -o $INTIF1 -p tcp --dport 5222 --syn -m state --state NEW -j ACCEPT
# Open 123 синхронизация времени
$IPT -A OUTPUT -o $INTIF1 -p udp --dport 123 -j LOG --log-prefix "ACCEPT:"
$IPT -A OUTPUT -o $INTIF1 -p udp --sport 123 --dport 123 -j ACCEPT
$IPT -A INPUT -i $INTIF1 -p udp --dport 123 -j LOG --log-prefix "ACCEPT:"
$IPT -A INPUT -i $INTIF1 -p udp --sport 123 --dport 123 -j ACCEPT
$IPT -A OUTPUT -o $EXTIF -p udp --dport 123 -j LOG --log-prefix "ACCEPT:"
$IPT -A OUTPUT -o $EXTIF -p udp --sport 123 --dport 123 -j ACCEPT
# Откроем порт 8000 Интернет-радио
$IPT -A OUTPUT -o $INTIF1 -p tcp --dport 8000 --syn -m state --state NEW -j ACCEPT
# Для установленных соединений
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить соединения, которые инициированы изнутри (eth0)
$IPT -A INPUT -m state --state NEW -i ! $EXTIF -j ACCEPT
# Разрешить доступ из LAN-сети к внешним сетям
$IPT -A FORWARD -i $INTIF1 -o $EXTIF -j ACCEPT
# Маскарадинг локальной сети в инет
$IPT -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
# Запретить forward извне во внутреннюю сеть
$IPT -A FORWARD -i $EXTIF -o $EXTIF -j REJECT
# Заворачиваем HTTP-запросы на прокси-сервер
$IPT -t nat -A PREROUTING -i $INTIF1 -p tcp --dport 80 -j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i $INTIF1 -p tcp --dport 8080 -j REDIRECT --to-port 3128
# Разрешим идентификацию пользователя port 113
$IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j LOG --log-prefix "ACCEPT AUTH:"
$IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
# Заблокировать и запротоколировать все, что мы могли забыть.
$IPT -A INPUT -j DROPl
$IPT -A OUTPUT -j ACCEPT
$IPT -A FORWARD -j DROPl
Что делаю не так. Помогите, очень надо.