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
Citera mig för svar.
Arch Linux