Fehler in meinem Script wer kann ihn beheben??

Post Reply
Message
Author
RaiSiNG DaRKNeSS

Fehler in meinem Script wer kann ihn beheben??

#1 Post by RaiSiNG DaRKNeSS »

Hi, ich hab vor einiger Zeit (5-6 Monate) ein Firewall Script zusammengeschustert.
Habs wiedergefunden und wollte es einbinden.
Beim ausführen allerdings gibts immer 2 Fehler. Ich bin nicht so der Shellscriptprogrammierer, es wird wahrscheinlich eh nur ein dämlicher Newbie Fehler sein.
Könnte also jemand mal das Scrit "reparieren".
Anmerkungen würd ich auch gern dazu hören.
Verbesserungstipps wärn auch nicht schlecht :)

Hier das Script

# ---------------------------------------------------------------------
# IPTables Firewall Script from RaiSiNG DaRKNeSS for a AMD K6/2 350 MHz
# The operation system is SuSE Linux 8.1
# --------------------------------------------------------------------
#!/bin/sh

case "$1" in
start)
echo "RaiSiNG DaRKNeSS Firewall Script is starting...”

# iptables-Modul
modprobe ip_tables
# Connection-Tracking-Module
modprobe ip_conntrack
# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp

# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "

# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP

# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP

# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# IP-Adresse des LAN-Interfaces ermitteln
LAN_IP=$(ifconfig eth0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d --dport 80 -j ACCEPT

# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
iptables -A FORWARD -j MY_REJECT

# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

# SYN-Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# Stop Source-Routing
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

# Stop Redirecting
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

# Reverse-Path-Filter
for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

# Log Martians
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

# BOOTP-Relaying ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

# Proxy-ARP ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

# Ungültige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

;;

stop)
echo " RaiSiNG DaRKNeSS Firewall Script is stopping..."
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
echo "Deaktiviere IP-Routing"
echo 0 > /proc/sys/net/ipv4/ip_forward

# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;

status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;

*)
echo "RaiSiNG DaRKNeSS says: Failure in your Command"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac
exit 0

Jochen

Re: Fehler in meinem Script wer kann ihn beheben??

#2 Post by Jochen »

Und wie lauten nu die Fehler?

Ausserdem muss "#!/bin/sh" in der ersten Zeile stehen, sonst bringt's nichts.

Jochen

RaiSiNG DaRKNeSS

Re: Fehler in meinem Script wer kann ihn beheben??

#3 Post by RaiSiNG DaRKNeSS »

Das #!/bin/sh kann auch nach den Kommentaren kommen, daran liegts nicht.

Hier die Fehlermeldung

./firewall.sh: line 170: unexpected EOF while looking for matching `"'
./firewall.sh: line 176: syntax error: unexpected end of file

Jochen

Re: Fehler in meinem Script wer kann ihn beheben??

#4 Post by Jochen »

Nu je, danach kommen kann's schon, nur wirken tut's dann nicht...

Und die Fehlermeldung ist doch eigentlich eindeutig: Du hast irgendwo vergessen, ein Anführungszeichen zu setzen, so dass die Shell am Ende des Skripts noch eine offenes Quoting hat. Versuch mal folgendes Skript:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">awk '
{
gsub (/[<!--no-->^"]/,"")
l = length
if ( l % 2 != 0) {
print NR
}
}' mein-skript</font><hr></pre></blockquote>Es gibt die Zeilennummern aus, in denen eine ungerade Anzahl von Anführungszeichen auftritt. Das ist die Zeile 8:<pre>echo "RaiSiNG DaRKNeSS Firewall Script is starting...&#8221;</pre>Man beachte das letzte Anführungszeichen - setz da mal ein normales ein...

Jochen

Jochen

RaiSiNG DaRKNeSS

Re: Fehler in meinem Script wer kann ihn beheben??

#5 Post by RaiSiNG DaRKNeSS »

Okay, danke hat jetzt geklappt.
Leider hab ich jetzt ein internes Regelproblemchen.

Hier mal der Log.


amageddon:/home/amageddon/Desktop # ./firewall.sh start
RaiSiNG DaRKNeSS Firewall Script is starting...
iptables v1.2.7a: Unknown arg `--to-destination'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `80'
Try `iptables -h' or 'iptables --help' for more information.

Dann hab ich mal gleich wie`s sich gehört in der "help" nachgeschaut und gefunden, dass es --destination heißen muss.

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d --dport 80 -j ACCEPT

Mir viel auf, dass unter dem --to-destination ein --to-source steht und dass er da nicht meckert.
Nach dem erneuten testen des Scripts, kam wieder ne Fehlermeldung


amageddon:/home/amageddon/Desktop # ./firewall.sh start
RaiSiNG DaRKNeSS Firewall Script is starting...
iptables v1.2.7a: Unknown arg `--destination'
Try `iptables -h' or 'iptables --help' for more information.
Bad argument `80'
Try `iptables -h' or 'iptables --help' for more information.

Also lag es daran nicht.

Was geht da schief?? Wie muss es richtig heißen?

Post Reply