vps część 1

Tak jak wspominałem, utrwalę na blogu moje boje z VPS tak więc nie traktowałbym tego opisu jako poradnik, nie na tym etapie bo sporo jest w trakcie dopracowywania i może się zmienić 🙂

Na początek dodam tylko, że wybrałem Debiana 6 w wersji 64 bitowej, zacząłem od dwóch wpisów dns aby server.pakos.biz wskazywał na ip vpsa. Wykonane w cpanelu na głównym hostingu:

server.pakos.biz. 100 IN A 178.19.104.241
www.server.pakos.biz. 100 IN A 178.19.104.241

Po ustawienie rekordu PTR musiałem zgłosić się do usługodawcy 🙂
Po pierwszym zalogowaniu standardowo:

# apt-get update
# apt-get upgrade
# adduser pakos 

Edycja /etc/sudoers:

pakos ALL=(ALL) ALL

Oraz /etc/ssh/sshd_config:

Port jakiś port
PermitRootLogin no

Warto też ustawić logowanie poprzez klucz, na lokalnej maszynie:

ssh-keygen -t dsa -b 1024

bez podania hasła, można też użyć zamiast dsa rsa. Następnie kopiujemy .ssh/id_rsa.pub na serwer do .ssh/authorized_keys i w konfiguracji ssh ustawiamy:

PubkeyAuthentication yes
PasswordAuthentication no

Resetujemy ssh i sprawdzamy czy działa 🙂

/etc/init.d/ssh restart

Klucza prywatnego oczywiście nie pokazujemy nikomu, warto też zrobić kopię na wszelki wypadek.

Instalacja php, mysql, apache, phpmyadmin:

apt-get install apache2 php5 libapache2-mod-php5 php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json mysql-server mysql-client phpmyadmin

W /etc/apache2/apache.conf dodajemy:

Include /etc/phpmyadmin/apache.conf

Następnie przydało by się trochę zabezpieczyć serwer, pierwotnie miałem zainstalować Shorewall wykorzystując ten poradnik niestety po wstępnej konfiguracji firewall nie wstawał. Logi wspominały o brakujących modułach jądra ale czy to faktycznie ten problem ciężko powiedzieć, google dawało różne odpowiedzi. Skoro tak musiałem się zabrać za samo iptables, przecież nie takie straszne jak się czasem mówi. Może jedynie sensowne ułożenie reguł aby miało to ręce i nogi więc poniższy kod jest na etapie produkcji, pewnie będzie edytowany. Ogólnie na chwilę obecną ma blokować wszystko poza www, ssh, odblokowuje jeszcze kilka rzeczy (dns, itp) ale to wygrzebane z kilku poradników na google. Jaki będzie finał okaże się po konsultacjach z obeznanymi w temacie.

Formułki pojawią się gdy będą w miarę dobre ;-)

Na chwilę obecną to tyle, trzeba wszystko dopracować a w kolejce czeka kilka rzeczy, owncloud, prywatne repo gita, może węzeł tora co by się transfer nie marnował. Może coś jeszcze (?) 🙂

Join the Conversation

4 Comments

  1. Ja u siebie doszedlem do:
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
    -A INPUT -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp ! –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j LOG –log-prefix “SYN-EXPECTED: ”
    -A INPUT -p tcp -m tcp ! –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j DROP
    -A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -j SYN-FLOOD
    -A INPUT -p icmp -m icmp –icmp-type 17 -j DROP
    -A INPUT -p icmp -m icmp –icmp-type 13 -j DROP
    -A INPUT -p icmp -m icmp –icmp-type any -m limit –limit 1/sec -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp –dport 135 -j DROP
    -A INPUT -i eth0 -p udp -m udp –dport 135 -j DROP
    -A INPUT -i eth0 -p tcp -m tcp –dport 137:139 -j DROP
    -A INPUT -i eth0 -p udp -m udp –dport 137:139 -j DROP
    -A INPUT -i eth0 -p tcp -m tcp –dport 445 -j DROP
    -A INPUT -i eth0 -p udp -m udp –dport 445 -j DROP
    -A INPUT -i eth0 -p udp -m udp –dport 53 -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp –dport 53 -j ACCEPT
    -A INPUT -i eth0 -p tcp -m tcp –dport 25 -j ACCEPT
    -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
    -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
    -A INPUT -j LOG –log-prefix “BLOCKED IN: ”
    -A SYN-FLOOD -m limit –limit 10/sec –limit-burst 20 -j RETURN
    -A SYN-FLOOD -j LOG –log-prefix “SYN-FLOOD: ”
    -A SYN-FLOOD -j DROP
    + fail2ban

Leave a comment

Your email address will not be published. Required fields are marked *