Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: Hel1Fire в Jul 15, 2006, 22:40



Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 15, 2006, 22:40
По някаква причина рутера дропи пакетите и не иска да ги пренасочи. Това не се отразява по логовете, а скрипта ми изглежда добре. Дано някой да може да помогне  :(.

(с "?.?.?.?" е отразено IP-то :) )

Примерен код

#!/bin/sh

INET_IP="?.?.?.?"
INET_IFACE="eth0"
INET_BROADCAST="?.?.?.?"

LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/24"
LAN_IFACE="eth1"

LO_IFACE="lo"
LO_IP="127.0.0.1"

IPTABLES="/usr/sbin/iptables"

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

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$IPTABLES -N bad_tcp_packets

$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP

$IPTABLES -A tcp_packets -p TCP -s 192.168.0.0/24 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 192.168.0.0/24 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 192.168.0.0/24 --dport 80 -j allowed

$IPTABLES -A udp_packets -p UDP -s 192.168.0.0/24 --destination-port 53 -j ACCEPT

$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST \
--destination-port 135:139 -j DROP

$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP

$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

$IPTABLES -t nat -A PREROUTING -i eth0 -s 0/0 -d ?.?.?.? -p tcp --dport ? -j DNAT --to-destination 192.168.0.2:3389

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

$IPTABLES -t mangle -N mark-out

$IPTABLES -t mangle -I PREROUTING -j TTL --ttl-set 64


Благодаря!


Титла: Iptables redirect
Публикувано от: в Jul 17, 2006, 15:54
Пакета първо влиза в PREROUTING, но все пак дали не е проблема в това, че няма $IPTABLES -A tcp_packets -p TCP -s 192.168.0.0/24 --dport ?? -j allowed


Титла: Iptables redirect
Публикувано от: в Jul 17, 2006, 15:57
Пакета първо влиза в PREROUTING, но все пак дали не е проблема в това, че няма $IPTABLES -A tcp_packets -p TCP -s 192.168.0.0/24 --dport ?? -j allowed


Титла: Iptables redirect
Публикувано от: в Jul 17, 2006, 19:47
Я пробвай това :

$F -t nat -A PREROUTING -p udp -i $INET_IP --destination-port 1024:65535 -j DNAT --to-destination 192.168.0.2:3389
$F -t nat -A PREROUTING -p tcp -i $INET_IP --destination-port 1024:65535 -j DNAT --to-destination 192.168.0.2:3389


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 18, 2006, 00:18
Пак не става. Вмъкнах и отварянето на порта ама и то не помогна (както и очаквах). Нямам никаква идея къде може да е проблема  :huh:  :(


Титла: Iptables redirect
Публикувано от: в Jul 18, 2006, 07:10
Вместо -A PREROUTING сложи -I PREROUTING.


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 18, 2006, 08:42
Пак не става :((


Титла: Iptables redirect
Публикувано от: в Jul 18, 2006, 12:01
Пробвай се да отвориш една фтп връзка донякъде от рутера и от машина зад него. В двата случая пусни tcpdump -vvv tcp port 21 и на рутера и на машината и пейстни резултата. Може би ще стане ясно какво става.


Титла: Iptables redirect
Публикувано от: VladSun в Jul 18, 2006, 13:00
Направи малко debug:
 - махни всички правила;
 - остави само SNAT и DNAT правилата;
 - дай политика ACCEPT на всички вериги;
 - виж дали пренасочването работи;
 - ако, да - почваш да добавяш едно по едно правила, докато спре да работи ;) ;
 - ако, не - имаш проблеми, които не са в рутера;


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 18, 2006, 23:57
@vladsun: Сега нямам време за това, но благодаря, че ме подсети :) . Утре вечер сигурно ще се пробвам така.

Само едно уточнително въпросче имам: iptables от къде взема часа и датата за лога??? Защото непонятно за мен при рестарт  в BIOS-а се слагат датата и часа по подразбиране (1999 г) и сега въпреки, че съм променил това с hwclock все пак в логовете ми пише някакви странни дати като "Jan  5 22:45:23"?


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 25, 2006, 23:34
Най-накрая ми остана малко време да се позанимая с iptables отново, но за нещастие пак не се получава искания резултат :( .
Махнах всички правила (освен за masquerade u TTL) и сложих policy-то на веригите на ACCEPT, но iptables изобщо не желае да redirect-не пакетите :( . Явно това не е точната команда и трябва по някакъв друг начин да му се окаже какво да прави, но за съжаление нямам никаква идея ... Някой правил ли е подобни неща ???


Титла: Iptables redirect
Публикувано от: VladSun в Jul 26, 2006, 00:32
Може да прозвучи глупаво, но имам спомени, че съществуват проблеми с DNAT:
Примерен код

-j DNAT --to
и
-j DNAT --to-destination

 - едното работеше, другото не. При мен и в момента по навик оставям първото.
И още нещо - външното ИП статично ли ти е? Ако да, ползвай SNAT.


Титла: Iptables redirect
Публикувано от: в Jul 26, 2006, 17:57
И с двете е еднакъв ефекта - т.е. никакъв :( . Кое IP дали е статично? Това, от което се връзвам към рутера от интернет ли?


Титла: Iptables redirect
Публикувано от: Gatta_Negra в Jul 27, 2006, 13:43
Статичен адрес е адрес който не се мени - т.е не ти се сменя IP адреса  при някакво условие  - да речем ако доставчика ти е пуснал DHCP  при всяко включване на системата адреса ти ще е различен освен ако той не те лови И по адрес на NIC. Че ти е статичен можеш да познаеш по това ако си въвеждаш ти настройките а не ги взимаш " автоматично".
Ти с публичен адрес ли си или си в частна мрежа ?
както и да е де ..
Ако адреса и е статичен т.е. не се променя ти пратих ЛС.


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 27, 2006, 14:29
Въпроса ми беше друг :). Зная какво е статично IP, но все пак ти благодая за желанието ти да помогнеш :) .
Всъщност SNAT май няма да ми помогне много, защото до колкото зная той се използва за нещо като MASQUERADE, а ми трябва точно DNAT.. Дори преди малко видях manual-а на iptables:
Цитат

Тhis target can be extremely useful, for example, when you have an host running your web server inside a LAN, but no real IP to give it that will work on the Internet.

iptables -t nat -A PREROUTING --dst $INET_IP -p tcp --dport 80 -j DNAT \
--to-destination $HTTP_IP

Вече хептен останах без идеи...


Титла: Iptables redirect
Публикувано от: Gatta_Negra в Jul 28, 2006, 03:32
хм..
въх
отивам да чета цялата ти тема изначало за да разбера какво не съм разбрала. ...


Титла: Iptables redirect
Публикувано от: в Jul 28, 2006, 07:42
С коя версия на Iptables си? Аз имах проблеми с 1.3.5 и затова минах на 1.3.4 и сега е добре.

Успех


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 28, 2006, 09:55
С 1.3.5 съм, но хич не ми се минава на по-ниска версия, защото ще трябва да се пачва за ТТЛ, а хич не ми се занимава, защото рутера е много слаб и ще трябва да се правят разни глупости като компилиране на ядро на друго PC, местене и други там щуритии :( .


Титла: Iptables redirect
Публикувано от: Hel1Fire в Jul 30, 2006, 19:18
Всъщност проблема се оказа, че командата е малко по-различна и че трябва да се сложи едно редче в FORWARD веригата, защото пакетите минават от там и всъщност ако няма правило там се дропват..
Ето и решението:
Цитат

$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP --dport 6789 -j DNAT \
--to-destination 192.168.0.2:3389
$IPTABLES -A FORWARD -p tcp -s 0/0 --dport 6789 -j ACCEPT

Между другото току що останових, че нещастната програма за RDC на Microsoft не може да разбере, че като й кажеш IP:PORT всъщност искаш да се вържеш към друг порт и игнорира порта, при което се опитва да се върже към default порта (3389).


Титла: Re: Iptables redirect
Публикувано от: pr0fessor в Jul 22, 2009, 19:53
аз го правя така:
Цитат
#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.
ifconfig eth0 xx.xy.28.yz netmask 255.255.255.128 up
ifconfig eth1 10.0.0.250 netmask 255.255.255.0 up
route add default gw xx.xy.y.z
echo "nameserver xx.xy.0.1" > /etc/resolv.conf
echo "nameserver xx.xy.1.1" >> /etc/resolv.conf
iptables -F
iptables -F -t nat
iptables -t nat -A POSTROUTING -s 10.0.0.135 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.138 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.134 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.100 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 13400:13410 -j DNAT --to-destination 10.0.0.134
iptables -t nat -A PREROUTING -p tcp --dport 13500:13510 -j DNAT --to-destination 10.0.0.135
iptables -t nat -A PREROUTING -p tcp --dport 13800:13810 -j DNAT --to-destination 10.0.0.138
iptables -t nat -A PREROUTING -p tcp --dport 10000:10010 -j DNAT --to-destination 10.0.0.100
iptables 1.42, slax 609 - орязан (само 001-core.lzm редактиран - пуснат rc.forward... спрени разни други...) и записан на цд...
ама имам и аз един въпрос  ??? :
как да ре-стриймна стрийм без каквато и да е преработка - тоест имам http://alpharadio.m-sat.bg:8000/mp3high (стрийма на алфа радио) и като го пусна в winamp/mplayerHQ/vlc (това на компа след сървъра) по едно време буфера пада и спича и кешира до някъде и няма (преди ми го правеше рядко ма бтк, сега съм на друг доставчик и това единствено ме дразни... а ако дам да плейне пак пълни буфера веднага и почва да се плейва, та идеята ми да хвана стрима на сървъра и от компютрите след него да си пускам вътрешно - вместо всеки да прави конекция към сайта на м-сат да стане с една конекция (примерно http://10.0.0.254:8000 )да си слушам на няколко компа... възможно ли е с iptables, wget, нещо друго  ???
опс разбрах че ставало със squid :)