Hallo liebes Forum !
Ich brauche Hilfe bei einem Firewall Script....
Vor einiger Zeit habe ich angefangen mit eine Firewall selbst zu schreiben.
Ich habe Zuhause 2 Server 1 Server der noch mit Red Hat 9 läuft und
einen den ich jetzt mit Fedora Core 6 bespielt habe.
Jetzt der Punkt wo ich nicht weiter komme.....
Meine Firewall läuft Problemlos auf dem Red Hat Rechner, aber leider
nicht auf dem Fedora gerät. Jetzt frage ich mich warum ?
Scriptfeher sind keine darin also der server startet Problemlos mit
/etc/ppp/nashwall die Firewall in beiden Systemen.
Zur Erklärung der Firewall. Ich habe eine Firewall gemacht wo man oben
im Kopf nur noch eine 1 oder 0 eintragen muss um einen Gewisses Verhalten zu starten oder auch nicht.
So unter Red Hat 9 läuft das ****** Ding wenn ich es aber unter Fedora starte
.Ist es so wie als ob er die INPUT,FORWARD und OUTPUT Policy auf DROP setzt. Warum ?
Sind die beiden Systeme so unterschiedlich das bei Fedora gar nichts mehr geht.
Ja mein Fedora System hat alle Updates und ansonsten läuft auch alles wie immer.
Bis auf die Firewall und das routing da weis ich aber an was das gelegen hat.
Zur Erklärung habe ich die Firewall mal ein bisschen erklärt was ich damit vorhabe.
So jetzt seid Ihr gefragt ich hoffe dieses Forum kann mir helfen....
Hier der Script
----------------------------------------------------------------------
DEVICE="ppp+"
PRIVNET="192.168.0.0/24"
IPTABLES="/sbin/iptables"
MODPROB="/sbin/modprobe"
LOGLEVEL="info"
IP_FORWARD="/proc/sys/net/ipv4/ip_forward"
# Eingehende Verbindungen erlauben
ALLOW_HTTP="1" # HTTP erlauben (0 nein, 1 ja)
ROUTING_HTTP="1" # HTTP Anfragen umleiten (0 nein, 1 ja)
WEBSERVER="192.168.0.3" # nach
WEBSERVER_HTTP_PORT="80" # HTTP Port des Webservers
WEBSERVER_HTTPS_PORT="443" # HTTPS Port des Webservers
ALLOW_SSH="1" # SSH erlauben (0 nein, 1 ja)
ALLOW_NESSUS="1" # Nessus erlauben (0 nein, 1 ja)
ALLOW_EXT_PING="0" # Pings von Extern erlauben (0 nein, 1 ja)
ALLOW_INT_PING="1" # Pings von Intern erlauben (0 nein, 1 ja)
# Weiterleitungen erlauben
FORWARD="1" # Sollen Pakete aus dem Internenlan gerouted werden (0 nein, 1 ja)
FORWARD_SSH="1" # SSH weiterleiten (0 nein, 1 ja)
FORWARD_HTTP="1" # HTTP weiterleiten (0 nein, 1 ja)
FORWARD_POP3="1" # POP3 weiterleiten (0 nein, 1 ja)
FORWARD_SMTP="1" # SMTP weiterleiten (0 nein, 1 ja)
FORWARD_FTP="1" # FTP weiterleiten (0 nein, 1 ja)
FORWARD_EMULE="1" # EMule weiterleiten (0 nein, 1 ja)
FORWARD_KAZAA="1" # Kazaa weiterleiten (0 nein, 1 ja)
FORWARD_PINGS="1" # Pings weiterleiten (0 nein, 1 ja)
# Blacklist (Seiten die generell geblockt werden)
BLACKLIST=""
# Hier koennen Sie nochmal ports defienieren die Sie fuer
# eingehende Verbindungen oeffnen moechten (DIESE PORTS WERDEN FUER DIE PROTOKOLLE TCP UND UDP FREIGEGEBEN)
ALLOW_INCOMING=""
# Hier koennen Sie nochmal ports defienieren die Sie fuer
# ausgehende Verbindungen oeffnen moechten (DIESE PORTS WERDEN FUER DIE PROTOKOLLE TCP UND UDP FREIGEGEBEN)
ALLOW_OUTGOING=""
# Hier koennen Sie nochmal ports defienieren die Sie fuer
# Weiterleitungen oeffnen moechten (DIESE PORTS WERDEN FUER DIE PROTOKOLLE TCP UND UDP FREIGEGEBEN)
ALLOW_FORWARD=""
$MODPROB ip_tables
$MODPROB ip_conntrack
$MODPROB ip_conntrack_ftp
$MODPROB ip_conntrack_irc
$MODPROB iptable_nat
$MODPROB ip_nat_ftp
$MODPROB ip_tables ipt_LOG
####
# Alle Regeln loeschen
##
resetChains()
{
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
}
####
# Alles wieder freigeben
##
allowAll()
{
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
}
####
# Standartverhalten:
##
setPolicy()
{
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
####
# Zugirff aus dem eigenen LAN erlauben:
##
$IPTABLES -A INPUT -s $PRIVNET -j ACCEPT
####
# Bestehende Verbindungen erlauben:
##
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
}
####
# Forwards erstellen
##
createForwards()
{
# SSH
if [ $FORWARD_SSH = "1" ]
then
$IPTABLES -A FORWARD -p tcp --dport 22 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport 22 -m state --state NEW -j ACCEPT
fi
# HTTP u. HTTPS
if [ $FORWARD_HTTP = "1" ]
then
$IPTABLES -A FORWARD -p tcp --dport 80 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 443 -m state --state NEW -j ACCEPT
fi
# POP3
if [ $FORWARD_POP3 = "1" ]
then
$IPTABLES -A FORWARD -p tcp --dport 110 -m state --state NEW -j ACCEPT
fi
# SMTP
if [ $FORWARD_SMTP = "1" ]
then
$IPTABLES -A FORWARD -p tcp --dport 25 -m state --state NEW -j ACCEPT
fi
# FTP
if [ $FORWARD_FTP = "1" ]
then
$IPTABLES -A FORWARD -p tcp --dport 20:21 -m state --state NEW -j ACCEPT
fi
# EMule
if [ $FORWARD_EMULE = "1" ]
then
$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 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 4672 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport 4672 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 4246 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport 4246 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 4242 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p udp --dport 4242 -m state --state NEW -j ACCEPT
fi
# Kazaa
if [ $FORWARD_KAZAA = "1" ]
then
$IPTABLES -A FORWARD -p udp --dport 1214 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 1214 -m state --state NEW -j ACCEPT
fi
# Ping
if [ $FORWARD_PINGS = "1" ]
then
$IPTABLES -A FORWARD -p icmp -m state --state NEW -j ACCEPT
fi
}
####
# Dienste die eine Verbindung oeffnen duerefen
##
allowIncomings()
{
# SSH
if [ $ALLOW_SSH = "1" ]
then
$IPTABLES -A INPUT -p tcp -i $DEVICE --dport 22 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp -i $DEVICE --dport 22 -m state --state NEW -j ACCEPT
fi
# HTTP u. HTTPS
if [ $ALLOW_HTTP = "1" ]
then
$IPTABLES -A INPUT -p tcp -i $DEVICE --dport 80 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $DEVICE --dport 443 -m state --state NEW -j ACCEPT
fi
# NESSUS
if [ $ALLOW_NESSUS = "1" ]
then
$IPTABLES -A INPUT -p tcp -i $DEVICE --dport 1241 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp -i $DEVICE --dport 1241 -m state --state NEW -j ACCEPT
fi
}
####
# Sichten und (oder) vernichten
##
logsAndKills()
{
# Logs
$IPTABLES -N LOGPACKET
$IPTABLES -A LOGPACKET -j LOG --log-prefix "Firewall packet log: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A LOGPACKET -j ACCEPT
$IPTABLES -N KILLINCOMMING
$IPTABLES -A KILLINCOMMING -j LOG --log-prefix "Firewall incomming kill: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A KILLINCOMMING -j DROP
$IPTABLES -N KILLOUTGOING
$IPTABLES -A KILLOUTGOING -j LOG --log-prefix "Firewall outgoing kill: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A KILLOUTGOING -j DROP
$IPTABLES -N KILLFORWARD
$IPTABLES -A KILLFORWARD -j LOG --log-prefix "Firewall forward kill: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A KILLFORWARD -j DROP
$IPTABLES -N KILLBADICMP
$IPTABLES -A KILLBADICMP -j LOG --log-prefix "Firewall bad icmp kill: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A KILLBADICMP -j DROP
# Pings
if [ $ALLOW_EXT_PING = "0" ]
then
$IPTABLES -A INPUT -p icmp -i $DEVICE -m state --state ! ESTABLISHED,RELATED -j KILLINCOMMING
fi
# Pings die sich durchgemogelt haben werden gelogt
$IPTABLES -A INPUT -p icmp -i $DEVICE -j LOGPACKET
# Pings aus dem LAN auf diesen Rechner
if [ $ALLOW_INT_PING = "0" ]
then
$IPTABLES -A INPUT -p icmp -s $PRIVNET -j KILLINCOMMING
fi
$IPTABLES -A INPUT -p icmp -s $PRIVNET -j LOGPACKET
# Portscanes oder was auch sonst
$IPTABLES -A INPUT -j KILLINCOMMING
$IPTABLES -A FORWARD -j KILLFORWARD
# Defekte ICMP Pakete killen
$IPTABLES -A INPUT -p icmp -i $DEVICE --fragment -j KILLBADICMP
# die Nachricht "Destination-Unreachable" wird nicht gesendet
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -o $DEVICE -j DROP
}
####
# seiten die generell gespert werden sollen
##
setBlacklist()
{
$IPTABLES -N BLACKIN
$IPTABLES -A BLACKIN -j LOG --log-prefix "Firewall kill bad in: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A BLACKIN -j DROP
$IPTABLES -N BLACKOUT
$IPTABLES -A BLACKOUT -j LOG --log-prefix "Firewall kill bad out: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A BLACKOUT -j DROP
$IPTABLES -N BLACKFORWARD
$IPTABLES -A BLACKFORWARD -j LOG --log-prefix "Firewall kill bad forward: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A BLACKFORWARD -j DROP
if [ "$BLACKLIST" ]
then
for v in $BLACKLIST; do
$IPTABLES -A INPUT -s $v -j BLACKIN
$IPTABLES -A OUTPUT -d $v -j BLACKOUT
$IPTABLES -A FORWARD -d $v -j BLACKFORWARD
done
fi
}
####
# user spezifische freigaben
##
allowDefPorts()
{
$IPTABLES -N ALLOWDEFIN
$IPTABLES -A ALLOWDEFIN -j LOG --log-prefix "Firewall allow def input: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A ALLOWDEFIN -j ACCEPT
$IPTABLES -N ALLOWDEFOUT
$IPTABLES -A ALLOWDEFOUT -j LOG --log-prefix "Firewall allow def out: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A ALLOWDEFOUT -j ACCEPT
$IPTABLES -N ALLOWDEFFORWARD
$IPTABLES -A ALLOWDEFFORWARD -j LOG --log-prefix "Firewall def forward: " --log-tcp-options --log-tcp-sequence --log-ip-options --log-level $LOGLEVEL
$IPTABLES -A ALLOWDEFFORWARD -j ACCEPT
if [ "$ALLOW_INCOMING" ]
then
for v in $ALLOW_INCOMING; do
$IPTABLES -A INPUT -p tcp -i $DEVICE --dport $v -m state --state NEW -j ALLOWDEFIN
$IPTABLES -A INPUT -p udp -i $DEVICE --dport $v -m state --state NEW -j ALLOWDEFIN
done
fi
if [ "$ALLOW_OUTGOING" ]
then
for v in $ALLOW_OUTGOING; do
$IPTABLES -A OUTPUT -p tcp --dport $v -m state --state NEW -j ALLOWDEFOUT
$IPTABLES -A OUTPUT -p udp --dport $v -m state --state NEW -j ALLOWDEFOUT
done
fi
if [ "$ALLOW_FORWARD" ]
then
for v in $ALLOW_FORWARD; do
$IPTABLES -A FORWARD -p tcp --dport $v -m state --state NEW -j ALLOWDEFFORWARD
$IPTABLES -A FORWARD -p udp --dport $v -m state --state NEW -j ALLOWDEFFORWARD
done
fi
}
####
# Paketweiterleitung
##
preRouting()
{
$IPTABLES -A POSTROUTING -t nat -s $PRIVNET -j MASQUERADE
echo 1 > $IP_FORWARD
}
####
# Paketumleitung
##
postRouting()
{
# HTTP
$IPTABLES -A PREROUTING -t nat -i $DEVICE -p tcp --dport 80 -j DNAT --to $WEBSERVER:$WEBSERVER_HTTP_PORT
# HTTPS
$IPTABLES -A PREROUTING -t nat -i $DEVICE -p tcp --dport 443 -j DNAT --to $WEBSERVER:$WEBSERVER_HTTPS_PORT
}
####
# Start firewall:
##
doStartFirewall()
{
resetChains
setPolicy
allowDefPorts;
setBlacklist;
if [ $FORWARD = "1" ]
then
createForwards
preRouting
fi
allowIncomings
if [ $ROUTING_HTTP = "1" ]
then
postRouting
fi
logsAndKills
}
case "$1" in
start)
doStartFirewall
;;
stop)
resetChains
allowAll
;;
restart)
resetChains
doStartFirewall
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
---------------------------------------------------------------------
Danke schon mal für Eure Hilfe.....
Liebe Grüße Nash Raider
Lesezeichen