Hallo !
Dieses Script kann die Arbeit nach einer Root Server Neuinstallation erleichtern
Muss es aber nicht !
Achtung Keine Übernahme der Haftung !
Achtung Nur für Debian !!
Dieses Script kann die Arbeit nach einer Root Server Neuinstallation erleichtern
Muss es aber nicht !
Achtung Keine Übernahme der Haftung !
Achtung Nur für Debian !!
Code:
#!/bin/bash
clear
echo "
#################################################
# #
# #
# Startscript #
# #
# make by #
# #
# MrJung E-Mail: returned@email.de #
# #
#################################################
"
#
#
###
# Auf Root prüfen
if test "`whoami`" != "root"; then
echo "Error: You must be root to run this script!
"
exit 4
fi
###
# Erklärung ausgeben
echo "
Mit diesem Script werden einige Default Iptables gesetzt, eine kleine Auswahl
an System Programme installiert und standard System Einstellungen gesetzt.
"
sleep 1
##
# Abfrage ob das Script starten soll
#
echo -e " Start the Script.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2 \n"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) ;;
2|no)
echo -e "\nThe End" && exit
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
###
# Schnittstelle erkennen für das Internt
netzkarte=$(route -n | awk '$1 == "0.0.0.0" { print $NF }' | cut -c -6)
###
# Abfrage ob die Netzwerkkarte richtig erkannt ist
echo -e " Is $netzkarte for Internet?.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2 \n"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) netzkarte_id=$netzkarte
;;
2|no)
# Gross/Kleinschreibung berücksichtigen
echo -e "\nThe End" && exit
# karte nich richtig
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
###
# Iptables Abfrage
echo -e " Make default Iptables?.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes)
echo " Starte IP-Paketfilter"
echo " thanks to http://www.harry.homelinux.org/"
# 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 "
# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -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
# SYN und FIN gesetzt
iptables -A INPUT -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
# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -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
# PSH ohne ACK
iptables -A INPUT -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
# 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 INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# HTTP
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 80 -j ACCEPT
# Webmin auf Port (kann bei der Installation angegeben werden)
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 81 -j ACCEPT
# HTTPS
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 443 -j ACCEPT
# SMTP
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 25 -j ACCEPT
# SMTPS
#iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 465 -j ACCEPT
# POP3
#iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 110 -j ACCEPT
# POP3S
#iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 995 -j ACCEPT
# IMAP
#iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 143 -j ACCEPT
# IMAPS
#iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 993 -j ACCEPT
# DNS
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p udp --dport 53 -j ACCEPT
# FTP
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 21 -j ACCEPT
# SSH
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 22 -j ACCEPT
# IRC
iptables -A INPUT -i $netzkarte_id -m state --state NEW -p tcp --dport 6667 -j ACCEPT
# ICMP Echo-Request (ping) zulassen und beantworten
iptables -A INPUT -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
# 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
# Ungltige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null
# ICMP Echo-Broadcasts ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit
# Speicherallozierung und -timing fr IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time
# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1
# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2
#Abschluss
echo " Iptables gesetzt."
sleep 1
;;
2|no) echo -e "\n Iptables wurden nicht gesetzt."
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
###
# System Test
sleep 1
echo " "
echo " Test Services "
sleep 1
###
# Server Services Abfragen
echo -e " "
echo -e " System Services testen.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2 \n"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes)
;;
2|no)
echo -e "no testing"
echo -e "\nThe End" && exit
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# Abfrage der einzelnen Dienste
###
# Apache
echo -e " "
echo -e " Prüfen des Webservers (apache2).\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which apache2 > /dev/null && dpkg -S apache2 > /dev/null | echo " installiert " || webserver=apache2
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# PHP4
echo -e " "
echo -e " Prüfen auf PHP (PHP4).\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which php4 > /dev/null && dpkg -S php4 > /dev/null | echo " installiert " || php=php4
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# PEAR
echo -e " "
echo -e " Prüfen auf PHP-PEAR.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which pear > /dev/null && dpkg -S pear > /dev/null | echo " installiert " || pear=("php4-pear php4-pear-log php4-dev")
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# Mysql
echo -e " "
echo -e " Prüfen des Mysql Servers.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which mysql-server > /dev/null && dpkg -S mysql-server > /dev/null | echo " installiert " || mysql=("mysql-server libapache2-mod-auth-mysql php4-mysql")
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# phpMYadmin
echo -e " "
echo -e " Prüfen des phpmyadmin.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which phpmyadmin > /dev/null && dpkg -S phpmyadmin > /dev/null | echo " installiert " || sqladmin=phpmyadmin
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# Mailserver testen
echo -e " "
echo -e " Prüfen des Mailserver.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes)
###
# Mailserver auswahl
sleep 1
echo -e " "
echo -e " Sendmail, postfix oder exim4 testen?.\n"
echo -e " Sendmail\t\t1"
echo -e " Postfix\t\t2"
echo -e " exim4\t\t3"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|sendmail) which sendmail > /dev/null && dpkg -S sendmail > /dev/null | echo " installiert " || mail=sendmail
;;
2|postfix) which postfix > /dev/null && dpkg -S postfix > /dev/null | echo " installiert " || mail=postfix
;;
3|exim4) which exim4 > /dev/null && dpkg -S exim4 > /dev/null | echo " installiert " || mail=exim4
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# Ftp Server testen
echo -e " "
echo -e " Prüfen des FTP Server.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes)
###
# FTP Server auswahl
sleep 1
echo -e " "
echo -e " ProFTPd, VsFTPd ,WuFTPd oder PureFTPd testen?.\n"
echo -e " ProFTP\t\t1"
echo -e " VsFTPd\t\t2"
echo -e " WuFTP\t\t3"
echo -e " PureFTPd\t\t4"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|proftpd) which proftpd > /dev/null && dpkg -S proftpd > /dev/null | echo " installiert " || ftp=proftpd
;;
2|vsftpd) which vsftpd > /dev/null && dpkg -S vsftpd > /dev/null | echo " installiert " || ftp=vsftpd
;;
3|wuftpd) which wu-ftpd > /dev/null && dpkg -S wu-ftpd > /dev/null | echo " installiert " || ftp=wu-ftpd
;;
4|pureftpd) which pureftpd > /dev/null && dpkg -S pureftpd > /dev/null | echo " installiert " || ftp=pureftpd
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# MC testen
echo -e " "
echo -e " Prüfen von MC.\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) which mc > /dev/null | echo "is installiert" || mc=mc
;;
2|no) echo -e "\nno Test"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
#Update der Paketquellen
echo -e " "
echo " updaten der Paket Quellen"
sleep 2
apt-get update > /dev/null
sleep 1
###
# Distri Upgrade
echo -e " "
echo -e " Upgrade des Systems (Distri).\n"
echo -e " yes\t\t1"
echo -e " no\t\t2"
read -n 1 TASTE
# Auswahl anzeigen
case $TASTE in
1|yes) echo " "
apt-get update > /dev/null
apt-get dist-upgrade
;;
2|no)
echo -e " "
echo -e "\Upgrade nicht durchgeführt"
;;
*) echo -e "\nEs wurde keine Auswahl getroffen.";;
esac
sleep 1
###
# apt-get ausführen und Programme installieren
echo -e " "
echo -e " Fehlende Programme werden installiert"
echo -e $webserver $php $pear $mysql $sqladmin $ftp $mc
echo -e " "
sleep 2
apt-get -f install $webserver $php $pear
apt-get -f install $mysql $sqladmin
apt-get -f install $mail
apt-get -f install $ftp
apt-get -f install $mc
sleep 1
###
# Mysql Passwd setzen
function S1 () {
echo " "
echo " enter Mysql Passwd ? (Return)"
read pass
echo " reenter Mysql Passwd (Return)"
read pass2
if [ "$pass" == "$pass2" ]; then
echo " ok"
passwd=("$pass2")
else
echo " not ok"
S1
fi
}
S1
mysqladmin -u root password $passwd
sleep 1
echo Mysql Passwd gesetzt auf $passwd
###
# Services reloaden
echo " "
echo " Services werden neugestartet"
echo " "
sleep 2
/etc/init.d/apache2 reload
/etc/init.d/apache2 restart
/etc/init.d/mysql restart
###
# Bedanken
sleep 1
echo "
Das System ist nun fertig eingerichtet und für den Betrieb von Webseiten bereit.
"
sleep 2
###
# Exit des Scripts
echo "THANKS for using
#######################################################################################################################
# 2005 make by MrJung aka DeathDealer #
# Mail: returned@email.de #
#######################################################################################################################
"
exit
#########