NAT Ubuntu Iptables, behöver tips

Permalänk
Medlem

NAT Ubuntu Iptables, behöver tips

Tjenare,

Blev igår less på att jag har 2 servrar igång, varav den ena i princip enbart agerade router (Win2k3) och den andra agerade Webb- och BNC-server. Så jag tänkte jag enbart skulle köra 1 dator som agerade både och.

Installerade Ubuntu 7.10 Server på ena serverdatorn (då jag gillar Debians pakethanteringssystem), och för smidigheten.

Konfigen ser ut som följande:
eth0: DHCP Externt IP
eth1: Statiskt 192.168.0.1, tänkt köra DHCP i framtiden
Kör den som DNS-server även, ren standardkonfig.

Nu hittade jag ett ganska simpelt IPTABLES-script som kör Masquerading på eth0 så att burken agerar NAT/Router och ett par simpla regler som blockar all inkommande trafik förutom ESTABLISHED och nått mer (Inte NEW).

Nu går det utmärkt att komma åt internet via det lokala nätverket, från andra datorer i 192.168.0.x-nätet dvs. Problemet kommer när jag ska ställa in så att jag ska komma åt vissa portar utifrån, exempelvis relativt hög port för Torrent-protokollet, en port för SSH.

Det jag inte hajjar är vad som behöver läggas till i IPTABLES för att få detta att fungera.

Om jag nu som sagt vill göra så att vissa portar utifrån (säg 55555 för Torrent TCP/UDP) ska portforwardas till den lokala datorn 192.168.0.10 på port 55555, VAR ska dessa regler ligga för att det ska fungera tillfredsställande?

Hur ser kedjan ut, dvs om jag kör säg ett program lokalt på en dator , sedan kommer trafik från internet, kommer in i servern, vidare till lokala datorn. Vilken väg går detta genom Iptables?

Verkar som det fanns en Portforward-sektion i denna config som var bortkommenterad, jag kan ha missat att prova just denna, ska prova senare när jag kommer hem om jag får det att fungera.

Med tanke på de 2 senaste styckena ovanför, om nu trafiken utifrån först skulle gå via INPUT i iptables så lär de väl stoppas där innan de kommer fram till FORWARD där nu scriptet kunde lägga till portforwards? Har jag missuppfattat?

Ursäkta om det blev rörigt, mycket frågor och funderingar i en smäll.

#!/bin/sh IPTABLES=/sbin/iptables AWK=/usr/bin/awk IFCONFIG=/sbin/ifconfig # External (Internet-facing) interface EXTIF="eth0" # External IP address (autmatically detected) EXTIP="`$IFCONFIG $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`" # Internal interface INTIF="eth1" # Internal IP address (in CIDR notation) INTIP="192.168.0.1/32" # Internal network address (in CIDR notation) INTNET="192.168.0.0/24" # The address of anything/everything (in CIDR notation) UNIVERSE="0.0.0.0/0" echo "External: [Interface="$EXTIF"] [IP="$EXTIP"]" echo "Internal: [Interface="$INTIF"] [IP="$INTIP"] [Network:$INTNET]" echo echo -n "Loading rules..." # Enabling IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # Clear any existing rules and set the default policy to DROP $IPTABLES -P INPUT DROP $IPTABLES -F INPUT $IPTABLES -P OUTPUT DROP $IPTABLES -F OUTPUT $IPTABLES -P FORWARD DROP $IPTABLES -F FORWARD $IPTABLES -F -t nat # Delete all User-specified chains $IPTABLES -X # Reset all IPTABLES counters $IPTABLES -Z ################################################### # INPUT: Incoming traffic from various interfaces # ################################################### # Loopback interface is valid $IPTABLES -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT # Local interface, local machines, going anywhere is valid $IPTABLES -A INPUT -i $INTIF -s $INTNET -d $UNIVERSE -j ACCEPT # Remote interface, claiming to be local machines, IP spoofing, get lost $IPTABLES -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j REJECT # External interface, from any source, for ICMP traffic is valid $IPTABLES -A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT # Allow any related traffic coming back to the MASQ server in. $IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT # Internal interface, DHCP traffic accepted $IPTABLES -A INPUT -i $INTIF -p tcp --sport 68 --dport 67 -j ACCEPT $IPTABLES -A INPUT -i $INTIF -p udp --sport 68 --dport 67 -j ACCEPT # External interface, HTTP/HTTPS traffic allowed $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 80 -j ACCEPT $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 443 -j ACCEPT # External interface, SSH traffic allowed $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j ACCEPT # Catch-all rule, reject anything else $IPTABLES -A INPUT -s $UNIVERSE -d $UNIVERSE -j REJECT #################################################### # OUTPUT: Outgoing traffic from various interfaces # #################################################### # Workaround bug in netfilter $IPTABLES -A OUTPUT -m state -p icmp --state INVALID -j DROP # Loopback interface is valid. $IPTABLES -A OUTPUT -o lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT # Local interfaces, any source going to local net is valid $IPTABLES -A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT # local interface, MASQ server source going to the local net is valid $IPTABLES -A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT # outgoing to local net on remote interface, stuffed routing, deny $IPTABLES -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j REJECT # anything else outgoing on remote interface is valid $IPTABLES -A OUTPUT -o $EXTIF -s $EXTIP -d $UNIVERSE -j ACCEPT # Internal interface, DHCP traffic accepted $IPTABLES -A OUTPUT -o $INTIF -p tcp -s $INTIP --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT $IPTABLES -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT # Catch all rule, all other outgoing is denied and logged. $IPTABLES -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j REJECT ########################### # Packet Forwarding / NAT # ########################### # ----- Begin OPTIONAL FORWARD Section ----- #Optionally forward incoming tcp connections on port 1234 to 192.168.0.100 #$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #$IPTABLES -A PREROUTING -t nat -p tcp -d $EXTIP --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.0.100:1234 # ----- End OPTIONAL FORWARD Section ----- # Accept solicited tcp packets $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow packets across the internal interface $IPTABLES -A FORWARD -i $INTIF -o $INTIF -j ACCEPT # Forward packets from the internal network to the Internet $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT # Catch-all REJECT rule $IPTABLES -A FORWARD -j REJECT # IP-Masquerade $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP echo " done."

Har någon som är insatt någon kommentar om ovanstående IPTABLES-konfigurering, bra eller anus? Behöver/bör jag komplettera med något?

Tack.

//fog

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem

iptables -A INPUT -p tcp --dport 55555 -j ACCEPT iptables -A INPUT -p udp --dport 55555 -j ACCEPT iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 55555 -j DNAT --to 192.168.0.10:55555 iptables -A PREROUTING -t nat -p udp -i eth0 --dport 55555 -j DNAT --to 192.168.0.10:55555

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av e5150

iptables -A INPUT -p tcp --dport 55555 -j ACCEPT iptables -A INPUT -p udp --dport 55555 -j ACCEPT iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 55555 -j DNAT --to 192.168.0.10:55555 iptables -A PREROUTING -t nat -p udp -i eth0 --dport 55555 -j DNAT --to 192.168.0.10:55555

Tack för den, ska prova senare.

Har du någon kommentar till hur det står att man ska göra med portforward i "config"-filen jag postade ovan, där det istället står såhär:

# ----- Begin OPTIONAL FORWARD Section ----- #Optionally forward incoming tcp connections on port 1234 to 192.168.0.100 #$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #$IPTABLES -A PREROUTING -t nat -p tcp -d $EXTIP --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.0.100:1234 # ----- End OPTIONAL FORWARD Section -----

I forwardkedjan istället för INPUT? Det var det jag syftade på tidigare med, att de anslutningarna lär väl droppas av INPUT-reglerna innan det kommer till FORWARD? Korrekt tänkt?

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av fog
Tack för den, ska prova senare.

Har du någon kommentar till hur det står att man ska göra med portforward i "config"-filen jag postade ovan, där det istället står såhär:

# ----- Begin OPTIONAL FORWARD Section ----- #Optionally forward incoming tcp connections on port 1234 to 192.168.0.100 #$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #$IPTABLES -A PREROUTING -t nat -p tcp -d $EXTIP --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.0.100:1234 # ----- End OPTIONAL FORWARD Section -----

I forwardkedjan istället för INPUT? Det var det jag syftade på tidigare med, att de anslutningarna lär väl droppas av INPUT-reglerna innan det kommer till FORWARD? Korrekt tänkt?

Nej.
Paketen går så här:
PREROUTING -> FORWARD -> POSTROUTING
|
INPUT -> POSTROUTING

OUTPUT -> POSTROUTING

I PREROUTING sorteras paketen så att de som skall till en annan dator går till FORWARD och de som skall till samma dator går till INPUT. Så inkommande paket går antingen genom INPUT eller FORWARD.

Här har du reglerna i fel ordning. Först sätter du policy (-P) och sedan tömmer du tabellen (-F). Skall vara tvärtom.
# Clear any existing rules and set the default policy to DROP
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT DROP
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -F -t nat

http://iptables-tutorial.frozentux.net/

Visa signatur

Fagerja

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av fagerja
Nej.
Paketen går så här:
PREROUTING -> FORWARD -> POSTROUTING
|
INPUT -> POSTROUTING

OUTPUT -> POSTROUTING

I PREROUTING sorteras paketen så att de som skall till en annan dator går till FORWARD och de som skall till samma dator går till INPUT. Så inkommande paket går antingen genom INPUT eller FORWARD.

Här har du reglerna i fel ordning. Först sätter du policy (-P) och sedan tömmer du tabellen (-F). Skall vara tvärtom.
# Clear any existing rules and set the default policy to DROP
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT DROP
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -F -t nat

http://iptables-tutorial.frozentux.net/

Hemskt mycket tack! Jag provade det som fanns föreslaget att man skulle använda för att portforwarda och det gick utmärkt!

Klockrent beskrivning av hur vägen ser ut, precis exakt det jag var ute efter, tack igen! Bara ett sånt där simpelt värdefullt svar gör ju allting 1000ggr enklare!

För att fråga om det sistnämnda, spelar det någon roll i praktiken? Defaultregeln om jag tittar är satt till DROP.

Visa signatur

Citera mig för svar.
Arch Linux