ROUTER + FIREWALL auf IPTABLES Basis einrichten

Fabi

Fabi

Grünschnabel
Hallo Leute,


ich besitze eine Dreambox, auf der Linux läuft (Busybox PPC).

Nun möchte ich diese Dreambox als Router/Firewall für meine anderen Pcs, die sich im selben Netzwerk befinden, nutzen.. Leitung ist ADSL

Folgendes funktioniert bereits:

-Internet auf Dreambox
-Internet auf allen Rechnern
-Webserver, Samba, FTP, Telnet, SSH auf der Box vom Internet aus
-Emule von der Box aus und von einem PC im Netz(192.168.0.1)


Hier meine Conf:
Code:
#!/bin/sh

#----------------------------------------------------------------------------
# Abschnitt I : Laden der Module
#----------------------------------------------------------------------------
IPTABLES=/sbin/iptables
/sbin/route del default

if [ -e /tmp/.fwinitialized ]; then
    echo "no fw initialize needed"
else
    /sbin/modprobe ip_tables
    /sbin/modprobe ip_conntrack
    /sbin/modprobe ip_conntrack_ftp
    /sbin/modprobe ip_conntrack_irc
    /sbin/modprobe iptable_nat
    /sbin/modprobe ip_nat_ftp
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/ip_dynaddr
    touch /tmp/.fwinitialized
fi

#----------------------------------------------------------------------------
# Abschnitt II : bisherige Regeln löschen :
#----------------------------------------------------------------------------

echo "Flushing and Clearing all current rules and user defined chains:"
$IPTABLES -F INPUT; $IPTABLES -P INPUT ACCEPT; $IPTABLES -Z INPUT
$IPTABLES -F FORWARD; $IPTABLES -P FORWARD ACCEPT; $IPTABLES -Z FORWARD
$IPTABLES -F OUTPUT; $IPTABLES -P OUTPUT ACCEPT; $IPTABLES -Z OUTPUT
chains=`cat /proc/net/ip_tables_names 2>/dev/null`

for i in $chains; do iptables -t $i -F; done && \
echo "Flushing all current rules and user defined chains OK" || \
echo "Flushing all current rules and user defined chains FAILED"

for i in $chains; do iptables -t $i -X; done && \
echo "Clearing all current rules and user defined chains OK" || \
echo "Clearing all current rules and user defined chains FAILED"

for i in $chains; do iptables -t $i -Z; done

# Setup user-defined chains

$IPTABLES -X
$IPTABLES -N LINWIZ-INPUT;
$IPTABLES -N REJECT-PKT;
$IPTABLES -N SYN-FLOOD;

$IPTABLES -A INPUT -j LINWIZ-INPUT

#----------------------------------------------------------------------------
# Abschnitt III : Forwarding und Masquerading
#----------------------------------------------------------------------------


# MSS Clamping ( 
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# abgehende Pakete FORWARDING - ( Routing ) Paketweiterleitung
iptables -A FORWARD -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# ankommende Pakete FORWARDING - ( Routing )
iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# NAT ( Network Address Translation ) - Maquerading
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


#----------------------------------------------------------------------------
# Abschnitt VI : DynDNS
#----------------------------------------------------------------------------

if [ -e /tmp/.dyndns ]; then
    echo "DYNDNS ALREADY STARTED"
else
    /hdd/opt/tuxdns -h
     touch /tmp/.dyndns
fi



#----------------------------------------------------------------------------
# Abschnitt V : Sicherheit
#----------------------------------------------------------------------------

# Allow all loopback interface traffic

$IPTABLES -A LINWIZ-INPUT -i lo -j ACCEPT

# Block all attempts to spoof the loopback address

$IPTABLES -A LINWIZ-INPUT -s 127.0.0.0/8 -j DROP
$IPTABLES -A LINWIZ-INPUT -d 127.0.0.0/8 -j DROP

# Block all attempts to spoof the local IP address

$IPTABLES -A LINWIZ-INPUT -s 192.168.0.100 -j DROP

# Block Syn Flood attacks

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --syn -j SYN-FLOOD

# Ensure that TCP connections start with syn packets

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP

# Allow session continuation traffic

$IPTABLES -A LINWIZ-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP ping requests from all hosts

$IPTABLES -A LINWIZ-INPUT -p icmp -m icmp --icmp-type ping -j ACCEPT

# Allow selected TCP/IP and/or UDP services

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 20:23 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#$IPTABLES -A INPUT -i ppp0 -p tcp --sport 80 -j REJECT
$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 139 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 992 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 20248 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p udp -m udp --dport 137:138 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p udp -m udp --dport 177 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p udp -m udp --dport 20248 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p udp -m udp --sport 137:138 -j ACCEPT

#EMULE ROUTING für den PC (nicht die Box)

$IPTABLES -A INPUT -p tcp --dport 4661 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 4662 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 4661 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 4662 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 4665 -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 4661 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 4662 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport 4665 -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport 4661 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --sport 4662 -m state --state NEW -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp --dport 4662 -j DNAT --to 192.168.0.1

# Block all other TCP/IP and UDP traffic

$IPTABLES -A LINWIZ-INPUT -j REJECT-PKT


#############################################################################
# Chain used to reject all TCP/IP, UDP and ICMP/PING packets

$IPTABLES -A REJECT-PKT -p tcp -m tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A REJECT-PKT -p udp -m udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A REJECT-PKT -p icmp -m icmp --icmp-type ping -j REJECT --reject-with icmp-host-unreachable

  • Stimmt meine IPTABLES Conf, oder gibt es Fehler/Wiedersprüche? Bitte durchgehen und mich auf Fehler oder fehlende Einträge aufmerksam machen.
  • Möchte viel Freiheit auf den Pcs im Netzwerk bekommen, so wie bei Windows ICS, sofern es der Sicherheit nicht schadet. Wie mache ich das?
  • Wie kann ich nachträglich den Webserver auf der Box vom Netz aus blockieren? Einfach ACCEPT durch REJECT ersetzen, richtig?
  • Noch Vorschläge zur Conf?

NOCH EIN KLEINES PROBLEM:
Wenn ich bei den Pcs im Netzwerk bei DNS die Werte des Providers eingebe, funzt alles, auf der Dreambox ebenfalls. Jedoch wenn ich die Dns Werte nur auf der Dreambox eingebe und bei den PCS die Dreambox IP als DNSSERVER, dann geht nichts. WIe kann ich dies aktivieren?



DANKE SCHON IM VORRAUS
 
moin moin

eins erstmal vorweg => ich tue mich beim lesen von fremden scripten mit userdefinierten chains, schleifen etc. immer etwas schwer. auf den ersten blick sieht das script aber gut aus.

diese regel kapier ich allerdings nicht so recht

# Ensure that TCP connections start with syn packets

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP

was bezweckst du mit dieser regel?

zu deinen fragen

b) hast du doch, du erlaubst in der forward chain alle *NEW*, sowie alle dazugehörigen pakete, von innen => aussen. oder was genau meinst du?

c) entweder so wie du geschrieben hast oder die rule einfach auskommentieren. den rest übernimmt dann deine default policy


Wenn ich bei den Pcs im Netzwerk bei DNS die Werte des Providers eingebe, funzt alles, auf der Dreambox ebenfalls. Jedoch wenn ich die Dns Werte nur auf der Dreambox eingebe und bei den PCS die Dreambox IP als DNSSERVER, dann geht nichts. WIe kann ich dies aktivieren?

in dem du auf deiner box nen dns-server aufsetzt ;). was spricht dagegen auf den clients den dns deines providers einzutragen?


Gruß HL
 
soll eine sicherheitsfunktion sein, also das das erste paket nur durchkommt, wenn es synch ist

dns server auf der box wird schwer.
ppc compilieren...

das letze mal als die conf oben war, wurde mir der ftp gesperrt, ka wieso
 
Fabi schrieb:
das letze mal als die conf oben war, wurde mir der ftp gesperrt, ka wieso

haste mal in den logs nachgesehen?

btw.

samba und telnet haben im internet nichts zu suchen.


Gruß HL
 
wieso nicht? Auf Telnet könnt ich verzichten. Auf Samba nicht!!
 
hi

bei telnet verläuft die übertragung im klartext. also nen password sniffen sollte kein problem sein => nimm ssh.


mit samba kenne ich mich nicht allzu gut aus. aber samba hat aus sicherheitsgründen auch nichts im inet zu suchen. es soll sogar prvider geben, die diese ports gar nicht mehr routen.

wenn es unbedingt samba sein muss, würde ich das ganze über einen vpn-tunnel laufen lassen.


Gruß HL
 
ok danke. dann kann ich diese conf so verwenden?
 

Ähnliche Themen

Port Forwarding mit iptables

ip6tables Problem

iptables verständniss frage, xrdp nicht erreichbar.

[SOLVED][CentOS 7] Samba server nicht erreichbar trotz firewall regeln.

iptables und whitelist

Zurück
Oben