28 grudnia 2014 blog vps vnc mysql apache lighttpd ssh
Założenia:
apt-get update; apt-get dist-upgrade
apt-get install aptitude
# ustawienie strefy czasowej
dpkg-reconfigure tzdata
sudo aptitude install htop mercurial git mc screen tmux dtach curl dnsutils netcat netcat6
Dodanie użytkownika
adduser dmn
usermod -a -G sudo dmn
usermod -a -G www-data dmn
usermod -a -G users dmn
usermod -a -G fuse dmn
Kopiowanie własnego klucza SSH
ssh-copy-id dmn@new.devsite.pl
ssh dmn@new.devsite.pl
Edycja ustawień SSH
sudo vim /etc/ssh/sshd_config
Zablokowanie logowania root
PermitRootLogin no
Restart SSH
sudo service ssh restart
Edycja firewalla, plik /etc/iptables.firewall.rules
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections
#
# The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Edycja firewalla dla IPv6, plik /etc/ip6tables.firewall.rules
*filter
#-A INPUT -i lo -j ACCEPT
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A OUTPUT -p ipv6-icmp -j ACCEPT
-A INPUT -p tcp --destination-port 80 -j ACCEPT
-A INPUT -p tcp --destination-port 443 -j ACCEPT
COMMIT
Aktywacja firewalla
sudo touch /etc/network/if-pre-up.d/firewall
sudo chmod +x /etc/network/if-pre-up.d/firewall
sudo vim /etc/network/if-pre-up.d/firewall
/etc/network/if-pre-up.d/firewall
#! /usr/bin/env sh
/sbin/iptables-restore < /etc/iptables.firewall.rules
/sbin/ip6tables-restore < /etc/ip6tables.firewall.rules
sudo apt-get install localepurge
sudo dpkg-reconfigure localepurge
vim /etc/profile.d/language.sh
export LC_ALL=pl_PL.UTF-8
export LANG=pl_PL.UTF-8
chmod +x /etc/profile.d/language.sh
Instalacja pakietów
sudo aptitude install lxde tightvncserver firefox pidgin chromium-browser
sudo aptitude install dmz-cursor-theme clearlooks-phenix-theme
#sprawdzenie zainstalowanego motywu
find /usr/share/icons ~/.icons -type d -name "cursors"
#/usr/share/icons/DMZ-Black/cursors
#/usr/share/icons/DMZ-White/cursors
Skrypt startowy ~/bin/vncstart
vncserver -kill :2
vncserver :2 -geometry 1920x1080 -dpi 96 -depth 24 -nevershared
Plik .Xresources
Xft.dpi: 96
Xft.antialias: true
Xft.hinting: true
Xft.hintstyle: hintfull
Xft.rgba: rgb
XTerm*termName: xterm-256color
*customization: -color
Xcursor.theme: DMZ-White
!--< xterm >--!
XTerm*utf8: 1
XTerm*scrollBar: false
XTerm*curses: true
XTerm*locale: utf8
xterm*jumpScroll: true
xterm*multiScroll: true
xterm*saveLines: 1024
xterm*cursorBlink: false
xterm*scrollTtyKeypress:true
xterm*scrollTtyOutput: false
xterm*faceName: Terminus
xterm*faceSize: 12
~/.vnc/xstartup
#! /usr/bin/env bash
export LANG=pl_PL.utf8
export XKL_XMODMAP_DISABLE=1
xmodmap -e "pointer = 1 2 3 4 5 8 9 10 11 12 6 7" &
setxkbmap -option terminate:ctrl_alt_bksp
setxkbmap pl
gconftool-2 --type=list --list-type=string --set /desktop/gnome/peripherals/keyboard/kbd/layouts '[pl]'
# cd /etc/fonts/conf.d; sudo ln -s ../conf.avail/70-yes-bitmaps.conf
# dodac do ~/.xinitrc: xset +fp /usr/share/fonts/local ; xset fp rehash
cd
xsetroot -solid '#101010' &
## DPMS monitor setting (standby -> suspend -> off) (seconds)
#xset dpms 300 600 900 &
#clipit &
#/usr/bin/i3 &
xrdb ~/.Xresources &
/usr/bin/lxsession -s LXDE &
chmod +x ~/.vnc/xstartup ~/bin/vncstart
vncstart
Ponieważ port do połączeń VNC nie został odblokowany przy konfiguracji firewalla, należy się połączyć do sesji używając tunelowania przez SSH. Dzięki temu: po pierwsze - usługa VNC nie jest wystawiona dla "całego świata", a po drugie - zyskiem jest zaszyfrowanie połączenia, które przy zwykłym VNC byłoby łatwe do podejrzenia.
ssh dmn@new.devsite.pl -L 5902:127.0.0.1:5902
vncviewer :2
# dla tighvnc:
vncviewer -encodings tight -quality 6 -fullscreen :2
# dla tigervnc:
vncviewer PreferredEncoding=Tight QualityLevel=6 -FullScreen :2
# wyświetlenie menu i wyjście z trybu pełnego ekranu: F8
Połączenie się używając nowej sesji X jest użyteczne choćby na Raspberry Pi, który może działać jako thin-client. Należy pamiętać, że wpisanie hasła do otwarcia połączenia VNC nie będzie możliwe dopóki kursor myszy nie znajdzie się nad dialogiem - jest to domyślne zachowanie powłoki X bez żadnego managera okien. Zakończenie aplikacji jest możliwe po wybraniu odpowiedniej opcji z menu wyświetlającego się po naciśnięciu F8.
xinit /usr/bin/vncviewer -fullscreen :2 -- :2 -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
Instalacja add-apt-repository oraz dodanie repozytorium syncthing
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:ytvwld/syncthing
sudo apt-get update
sudo apt-get install syncthing
Dodanie do automatycznego uruchamiania
crontab -l # edycja crontab
PATH=/bin:/sbin:/usr/bin:/usr/sbin:${HOME}/bin:${HOME}/bin/scripts
@daily crontab -l > "${HOME}/crontab.`hostname`"
@reboot syncthing &
----
http://askubuntu.com/questions/563702/rsyslogd-using-100-cpu-on-ubuntu-14-04
service rsyslog stop
sed -i -e 's/^\$ModLoad imklog/#\$ModLoad imklog/g' /etc/rsyslog.conf
service rsyslog start
---
Należy ściągnąć potrzebne oprogramowanie. Podstawowy zestaw to:
Instalacja
# rozpakowanie
tar -xzvf jdk-8u25-linux-i586.tar.gz ; tar -xzvf apache-maven-3.2.5-bin.tar.gz; tar -xzvf apache-tomcat-8.0.15.tar.gz
chmod +x netbeans-*.sh
# katalog docelowy
mkdir ~/opt
mv apache-maven-3.2.5 apache-tomcat-8.0.15 jdk1.8.0_25/ ~/opt
cd ~/opt/
# linki ułatwiające konfigurację
ln -s apache-maven-* apache-maven; ln -s apache-tomcat-* apache-tomcat; ln -s jdk1.8.* jdk; ln -s jdk1.8.* jdk1.8
Dodać do .bashrc
export JDK_HOME="${HOME}/opt/jdk"
export JAVA_HOME="${JDK_HOME}/jre"
export M2_HOME="${HOME}/opt/apache-maven"
export PATH=$HOME/bin:$HOME/scripts:$HOME/opt:$HOME/opt/bin:$JDK_HOME/bin:$JAVA_HOME/bin:$M2_HOME/bin:$PATH
Netbeans musi być zainstalowany podczas połączenia VNC
chmod +x netbeans*sh; ./netbeans*sh --javahome ~/opt/jdk
Poniżej przykład dla certyfikatu podpisanego przez użytkownika. Można również użyć darmowego podpisanego certyfikatu SSL.
sudo -s
cd /etc/apache2
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
chmod 600 server.key
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
cd /etc/apache2/mods-enabled
ln -s ../mods-available/ssl.load
ln -s ../mods-available/ssl.conf
ln -s ../mods-available/socache_shmcb.load
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy_http.load
cd /etc/apache2/sites-enabled
cp ../sites-available/default-ssl.conf default-ssl.conf
vim default-ssl.conf
# dodać: SSLCertificateFile /etc/apache2/server.crt
# dodać: SSLCertificateKeyFile /etc/apache2/server.key
service apache2 restart
sudo aptitude install php5 php5-mysql php5-recode phpsysinfo php5-gnupg php5-sqlite php5-apcu php5-curl mariadb-server mariadb-client
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');
CREATE DATABASE database1;
GRANT ALL PRIVILEGES ON database1.* TO 'yourusername'@'localhost' IDENTIFIED BY 'yourpassword';
mkdir ~/http; cd ~/http
wget https://github.com/gothfox/Tiny-Tiny-RSS/archive/1.15.3.tar.gz
tar -xzvf 1.15.3.tar.gz
mv Tiny-Tiny-RSS-1.15.3/ rss
chmod 777 rss
cd rss; chmod -R 777 cache; chmod -R 777 feed-icons; chmod -R 777 lock
/etc/apache2/sites-enabled/redirectToHttps.conf
<VirtualHost *:80>
ServerName new.devsite.pl
ServerAlias new.devsite.pl
Redirect permanent / https://new.devsite.pl
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
/etc/apache2/sites-enabled/devsite-pl.conf
<IfModule mod_ssl.c>
<VirtualHost new.devsite.pl:443>
ServerName new.devsite.pl
ServerAlias new.devsite.pl
ServerAdmin webmaster@localhost
DocumentRoot /home/dmn/http
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/home/dmn/http">
Require all granted
</Directory>
<IfModule mod_proxy.c>
ProxyPreserveHost On
ProxyPass /blog/ http://devsite.pl:80/
ProxyPassReverse /blog/ http://devsite.pl:80/
</IfModule>
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
Dla maszyn z mniejszą ilością pamięci lepiej się sprawdzi Lighttpd z PHP w trybie CGI.
sudo aptitude install lighttpd php5-cgi
Aby uzyskać certifikat w formacie PEM, należy połączyć 2 pliki (wszystkie powinny być w folderze z konfiguracją):
cat server.key server.crt > lighttpd.pem
Na końcu /etc/lighttpd/lighttpd.conf
dopisujemy:
include "/etc/lighttpd/devsite-pl.conf"
/etc/lighttpd/devsite-pl.conf
server.modules += ( "mod_cgi" )
# already loaded server.modules += ( "mod_alias" )
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/lighttpd.pem"
# w przypadku wykupionego certyfikatu: ssl.ca-file = "/etc/lighttpd/ca.crt"
setenv.add-response-header = (
"Strict-Transport-Security" => "max-age=63072000",
"X-Frame-Options" => "DENY"
)
$HTTP["useragent"] =~ "MSIE" {
server.max-keep-alive-requests = 0
}
}
$HTTP["scheme"] == "http" {
$HTTP["host"] == "new.devsite.pl" {
url.redirect = (".*" => "https://new.devsite.pl$0")
setenv.add-environment = ( "HTTPS" => "on" )
}
}
$HTTP["host"] == "new.devsite.pl" {
server.document-root = "/home/dmn/http/"
alias.url = (
"/pub" => "/home/dmn/pub/",
)
$HTTP["url"] =~ "^/pub/" {
dir-listing.activate = "enable"
server.follow-symlink = "enable"
}
cgi.assign = (
".pl" => "/usr/bin/perl",
".php" => "/usr/bin/php-cgi",
)
} else $HTTP["host"] == "projects.new.devsite.pl" {
proxy.server = ( "" => (( "host" => "127.0.0.1", "port" => 8080 )) )
} else $HTTP["host"] =~ ".*" {
url.redirect-code=404
url.redirect = ( ".*" => "http://devsite.pl" )
}