[B] Script nach der Neuinstallion eines Debian Root Server

Mepo

Registered User
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 !!

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
#########
 
Back
Top