[ SlackList ] [ WkikiSlack ]




[long] iptables DNAT - help

From: Bartosz Kiziukiewicz <kiziuk_malpka_alpha.swinka.net.pl>
Date: Tue May 11 2004 - 20:54:54 CEST

Walczę ze swoim nieszczęsnym serwerkiem. Tym razem próbuję zrobić
przekierowanie portu na www w LANie - sprawa wydawałoby się
trywialna. Robiłem to już ze dwa razy ;-) i zawsze działało.
Linux Slackware 9.1, kernel dystrybucyjny 2.4.22. Iptables
1.2.9 dokompilowane ze źródeł.
IP LANowe są co prawda "niestandardowe" ale IMHO to nie powinno być
źródłem problemu.

root@gateway:~# lsmod
Module Size Used by Not tainted
ipt_LOG 3384 1 (autoclean)
ipt_limit 856 0 (unused)
ipt_state 536 3
ip_nat_ftp 2704 0 (unused)
iptable_nat 15928 2 [ip_nat_ftp]
ip_conntrack_ftp 3856 1
ip_conntrack 18120 3 [ipt_state ip_nat_ftp iptable_nat
ip_conntrack_ftp]
iptable_filter 1644 1
ip_tables 12288 7 [ipt_LOG ipt_limit ipt_state
iptable_nat iptable_filter]
ide-scsi 9424 0
3c59x 26832 2
agpgart 39576 0 (unused)
root@gateway:~#



rc.local:

#!/bin/sh

/sbin/insmod ip_tables
/sbin/insmod iptable_filter
/sbin/insmod ip_conntrack
/sbin/insmod ip_conntrack_ftp
/sbin/insmod iptable_nat
/sbin/insmod ip_nat_ftp
/sbin/insmod ipt_state
/sbin/insmod ipt_limit
/etc/rc.d/rc.iptables
/usr/local/squid/sbin/squid
/usr/sbin/proftpd
  


rc.iptables:

#!/bin/sh

# wyczyszczenie regulek
/usr/local/sbin/iptables -F
/usr/local/sbin/iptables -t nat -F

# ustalenie co domyslnie zrobic z pakietem, ktory nie znalazl
pasujacej reguly
/usr/local/sbin/iptables -P INPUT DROP
/usr/local/sbin/iptables -P OUTPUT ACCEPT
/usr/local/sbin/iptables -P FORWARD DROP

# zalaczenie forwardowania pakietow w kernelu
echo 1 > /proc/sys/net/ipv4/ip_forward

# ochrona przed atakiem typu Smurf (1)
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Nie aktceptujemy pakietow "source route" (0)
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# Nie przyjmujemy pakietow ICMP rediect, ktore moga zmienic nasza
tablice rutingu (0)
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Wlaczamy ochrone przed blednymi komunikatami ICMP error (1)
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# wszystkie karty nie beda przyjmowaly pakietow z sieci innych niz te
z tablicy rutingu (1)
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter;
# Wlacza logowanie dziwnych (spoofed, source routed, redirects)
pakietow (1)
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# wpuszczenie wszystkiego z lokalnego interfejsu
/usr/local/sbin/iptables -A INPUT -i lo -j ACCEPT
/usr/local/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# wpuszczenie pakietow pochodzacych z nawiazanych juz polaczen:
/usr/local/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED
-j ACCEPT

#-----------------------------------------------------------------------------
# udostepniasz na serwerze wszystkim uslugi, ktore chcesz:

# pingi
/usr/local/sbin/iptables -A INPUT -p icmp -j ACCEPT

# ssh
/usr/local/sbin/iptables -A INPUT -i eth1 -p TCP -s 121.0.0.0/8
--dport 22 -j ACCEPT
/usr/local/sbin/iptables -A INPUT -i eth0 -p TCP -s x.x.x.x/32 --dport
22 -j ACCEPT

# squid cache

#wycinanie komputera
/usr/local/sbin/iptables -A INPUT -i eth1 -p tcp -s 121.121.123.32/32
-j DROP

/usr/local/sbin/iptables -A INPUT -i eth1 -p TCP -s 121.0.0.0/8
--dport 3128 -j ACCEPT

# ftp
/usr/local/sbin/iptables -A INPUT -p TCP -i eth1 -s 121.0.0.0/8
--dport 20:21 -j ACCEPT

#
-----------------------------------------------------------------------------
# teraz ustalamy co mozna forwardowac przez serwer

# zezwalamy na przekazywanie pakietow z polaczen juz nawiazanych
/usr/local/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state
ESTABLISHED,RELATED -j
ACCEPT


#wycinanie komputera
/usr/local/sbin/iptables -A FORWARD -i eth1 -p tcp -s
121.121.123.32/32 -j DROP

# maskowanie IP
/usr/local/sbin/iptables -A FORWARD -i eth1 -o eth0 -s 121.0.0.0/8 -d
0/0 -j ACCEPT
/usr/local/sbin/iptables -t nat -A POSTROUTING -s 121.0.0.0/8 -o eth0
-j SNAT --to y.y.y.y

#
-----------------------------------------------------------------------------
# przekierowanie portow serwera

/usr/local/sbin/iptables -A FORWARD -d 121.121.121.130 -j ACCEPT
/usr/local/sbin/iptables -t nat -A PREROUTING -p tcp -d y.y.y.y
--dport 8080 -j DNAT --to-destination 121.121.121.130:80


# logowanie
/usr/local/sbin/iptables -A FORWARD -p icmp -m state --state ! INVALID
-j ACCEPT
/usr/local/sbin/iptables -A FORWARD -j LOG --log-level debug
--log-prefix "IPT FORWARD: "
/usr/local/sbin/iptables -A FORWARD -j DROP



Niestety po próbie połączenia z zewnątrz na adres http://y.y.y.y:8080
dostaję info że connection refused. WWW wewnątrz LANu działa.
iptraf pokazuje, że pakiety przychodzą:
-x.x.x.x:2352 = 3 180 S--- eth0 -
-y.y.y.y:8080 = 0 0 ---- eth0 -

Wygląda, jak gdyby nie działał DNAT. Na iptables dystrybucyjnych
1.2.8p jest identycznie. Co może być jeszcze nie tak?
Poniuchałem tcpdumpem i wyszło, że na eth0 normalnie się pakiety
pojawiają, zaś na eth1 nie wychodzi nic z tego ruchu nic.
Podejrzewałbym, że powyższe reguły są w jakiś sposób skopane, ale
patrzę w nie już drugi dzień, porównuję z regułami na innej maszynie,
gdzie taki DNAT działa i nic :-(.
Czy są jakieś metody stwierdzenia, co tak naprawdę sie wewnątrz filtra
dzieje?

--
Pozdrawiam
  Bartek

Jeśli chcesz mi odpowiedzieć, usuń swinkę z mojego adresu.
Received on Wed May 12 18:11:02 2004

This archive was generated by hypermail 2.1.8. Wyprawa Shackleton 2014