Redirect ports 80, 443 to 8080,8443 on Tomcat 7 server (Ubuntu)

Introduction

One of the first lines of defense in securing your cloud server is a functioning firewall. In the past, this was often done through complicated and arcane utilities. There is a lot of functionality built into these utilities, iptables being the most popular nowadays, but they require a decent effort on behalf of the user to learn and understand them. Firewall rules are not something you want yourself second-guessing.

To this end, UFW is a considerably easier-to-use alternative.

What is UFW?

UFW, or Uncomplicated Firewall, is a front-end to iptables. Its main goal is to make managing your firewall drop-dead simple and to provide an easy-to-use interface. It’s well-supported and popular in the Linux community—even installed by default in a lot of distros. As such, it’s a great way to get started securing your sever.

Before We Get Started

First, obviously, you want to make sure UFW is installed. It should be installed by default in Ubuntu, but if for some reason it’s not, you can install the package using aptitude or apt-get using the following command:

On DigitalOcean VPS this is installed by default.

sudo apt-get install ufw

Check the Status

You can check the status of UFW by typing:

sudo ufw status

Right now, it will probably tell you it is inactive. Whenever ufw is active, you’ll get a listing of the current rules that looks similar to this:

Status: active

To               Action      From
--               ------      ----
22               ALLOW       Anywhere

Using IPv6 with UFW

If your VPS is configured for IPv6, ensure that UFW is configured to support IPv6 so that will configure both your IPv4 and IPv6 firewall rules. To do this, open the UFW configuration with this command:

On DigitalOcean VPS this is enabled by default.

sudo vi /etc/default/ufw

Then make sure “IPV6” is set to “yes”, like so:

IPV6=yes

Now UFW will configure the firewall for both IPv4 and IPv6, when appropriate.

Set Up Defaults

One of the things that will make setting up any firewall easier is to define some default rules for allowing and denying connections. UFW’s defaults are to deny all incoming connections and allow all outgoing connections. This means anyone trying to reach your cloud server would not be able to connect, while any application within the server would be able to reach the outside world. To set the defaults used by UFW, you would use the following commands:

sudo ufw default deny incoming

and

sudo ufw default allow outgoing

 

Allow Connections

The syntax is pretty simple. You change the firewall rules by issuing commands in the terminal. If we turned on our firewall now, it would deny all incoming connections. If you’re connected over SSH to your cloud server, that would be a problem because you would be locked out of your server. Let’s enable SSH connections to our server to prevent that from happening:

sudo ufw allow ssh

This command allows a connection on port 22 using the TCP protocol.

sudo ufw allow 8080/tcp
sudo ufw allow 8443/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Denying Connections

Our default set up is to deny all incoming connections. This makes the firewall rules easier to administer since we are only selectively allowing certain ports and IP addresses through. However, if you want to flip it and open up all your server’s ports (not recommended), you could allow all connections and then restrictively deny ports you didn’t want to give access to by replacing “allow” with “deny” in the commands above. For example:

sudo ufw allow 80/tcp

would allow access to port 80 while:

sudo ufw deny 80/tcp

would deny access to port 80.

Deleting Rules

There are two options to delete rules. The most straightforward one is to use the following syntax:

sudo ufw delete allow ssh

As you can see, we use the command “delete” and input the rules you want to eliminate after that. Other examples include:

sudo ufw delete allow 80/tcp

This can get tricky when you have rules that are long and complex.

A simpler, two-step alternative is to type:

sudo ufw status numbered

which will have UFW list out all the current rules in a numbered list. Then, we issue the command:

sudo ufw delete [number]

where “[number]” is the line number from the previous command.

Turn It On

After we’ve gotten UFW to where we want it, we can turn it on using this command (remember: if you’re connecting via SSH, make sure you’ve set your SSH port, commonly port 22, to be allowed to receive connections):

sudo ufw enable

You should see the command prompt again if it all went well. You can check the status of your rules now by typing:

sudo ufw status

or

sudo ufw status verbose

for the most thorough display.

To turn UFW off, use the following command:

sudo ufw disable

Configure Apache Tomcat

Setup HTTP connector on 8080 and HTTPS connector on 8443. In your <Connector> declaration add proxyPort attribute and set it to default HTTP and HTTPS port ( 80 and 443 respectively ). Setup firewall redirect rule from 80 to 8080 and from 443 to 8443. Then the server will accept regular http and https URLs without the need to specify port numbers.

Below is a sample declaration of these connectors.

sudo vi /var/lib/tomcat7/conf/server.xml
  <Connector port="8080" protocol="HTTP/1.1"
 connectionTimeout="20000"
 URIEncoding="UTF-8"
 redirectPort="8443" />


 <Connector port="8443" 
protocol="HTTP/1.1" 
SSLEnabled="true" 
redirectPort="8443"
 keystoreFile="keys/domain.keystore" 
keystorePass="nekipassword" 
enableLookups="false" 
keyAlias="mykey" 
maxThreads="150" 
scheme="https" 
secure="true"
clientAuth="false" sslProtocol="TLS" />

Automatizujte SSH prijavu sa PuTTY programom

Ovo uputstvo je napisano za PuTTY na Windows-u, i prije svega vam treba par programčića sa PuTTY websajta  PuTTY’s website. Otiđite na download page, i preuzmite slijedeće fajlove:

  • PuTTY (putty.exe)
  • PuTTYgen (puttygen.exe)

Da automatizujete SSH prijavljivanje, uradite slijedeće:

  1. Pokrenite PuTTYgen.
  2. Odaberite SSH-2 DSA pod Type of Key.
  3. Kliknite generate.
  4. Kliknite na “Save Private Key” i sacuvajte ga negdje na kompjuteru.
  5. Kopirajte sadržaj u klipbord (to je Vaš generisani privatni ključ).
  6. Prijavite se na Vaš SSH server.
  7. Na serveru kreirajte fajl ~/.ssh/authorized_keys (vi ~/.ssh/authorized_keys) koji sadrži generisani javni ključ  (iz koraka 3) – nemojte koristiti novi red sve treba da bude u istoj liniji.
  8. Promijenite prava na fajlu da bude čitljiv svima (chmod 755 ~/.ssh/authorized_keys).
  9. Onda otvorite PuTTY, u meniju sa lijeve strane odaberite Connection->Data i unesite korisnicko ime pod auto-login username.
  10. U meniju otvorite Connection->SSH->Auth i pod Private-key odaberite fajl iz koraka 4.

To bi trebalo da je sve. Sada pokušajte da se prijavite na Vaš server i ako ste sve ispravno podesili trebelo bi da budete automatski prijavljeni.

Ukoliko budete imali problema ostavite komentar i pokusaću da pomognem.

TP-LINK TL-WA901ND u universal repeater modu

Pošto sam se pošteno namučio da podesim ovaj inace odlican uredjaj (dodje sa PoE adapterom) da radi u universal repeater modu, da evo nekome mozda ustedim koju minutu ili sat 🙂 .

Naime “caka” je da prije nego sto prebacite na universal repeater mod, dakle jos u access point modu, podesite SSID na istu vrijednost kao i kod glavnog AP.

Poslije toga kliknite na SAVE i onda promijenite mod u universal repeate, opet kliknite SAVE i ovaj put uradite reboot.

Zadnja stavka je da podesite Wireless Security na ista podesavanja kao na primarnom AP-u

Otključavanje modema ZTE MF100

Upotrijebite  ovaj softwer da otkljucate vas  modem . Ubacite modem u neki usb port koristeci neku sim karticu koja nije validna (npr promonteovu ili kao ja mtel-ovu). Kada se softwer startuje i prikaze da sim nije validan, zatvorite T-mobile internet manager.

Otvorite softwer koji ste maloprije skinuli i pokrenite ga.

Pod “select manufacturer” odaberite: ZTE datacards, pod select model ostavite na “Auto detect” zatim kliknite na ikonicu detect card (okrugla sa ikonicom uvecala). Trebalo bi da dobijete nesto ovako:

DC – Unlocker 2 Client 1.00.0460

Detecting card :

selection :
manufacturer – ZTE datacards
model – Auto detect

Found modem         : MF100
Model               : ZTE MF100
IMEI                : 359518033413236
Firmware            : BD_TMOP671A1V1.0.0B01
SIM Lock status     : locked

Zatim kliknite na “Unlock” pod Unlocking

Pravljenje butabilnog Windows XP CD-a

Za početak ćemo skinuti tzv. Microsoft Corporation.img fajl i smjestiti ga na odgovarajuću lokaciju. To je u stvari fajl koji će CD učiniti butabilnim. Zatim, kreiramo novi folder, recimo WINXPSP2 i u njega iskopiramo instalacione fajlove WinXP-a. A onda:

1. Pokrenemo Nero Start Smart…kliknete na Data > Make bootable CD (ako se ova opcija ne prikaze prvog puta samo kliknite na sliku dvije osobe koje se nalaze na dnu prozora u desnom uglu, sto donosi vise opcija u Nero programu, tzv profesionalnih opcija)

2. Otvara se kartica Boot i u sekciji Source of boot image data čekiramo Image File. Kliknemo na Browse dugme i u prozoru koji se otvori, u okviru File of Type izaberemo All Files i onda pronađemo i ubacimo onaj Microsoft Corporation.img fajl koji smo prethodno skinuli (dakle, izdefinišemo putanju do njega);

3. Vraćamo se na karticu Boot i pod sekcijom Advanced čekiramo Enable expert settings (ukoliko već nije) i podesimo sledeće parametre: Kind of emulation > No emulation; Boot message > Nero Boot-Loader V6.0 (ovo polje će automatski biti popunjeno u startu i može se razlikovati sa obzirom na verziju programa koji koristite); Load segment of sectors > 07C0; Number of loaded sectors > 4 (ova stavka je takođe jedna od bitnijih, jer ukoliko ne podesimo vrednost na 4, može se desiti da CD na kraju ne bude butabilan!). Kako to sve treba da izgleda, možete vidjeti i na sledećoj slici:

4. Kliknemo na ISO karticu i podesimo parametre: u sekciji Data, pod Data mode > Mode 1. U sekciji File, pod File system > ISO 9660 + Joliet; pod File name length > Max. of 31 chars (Level 2); i pod Character set > ISO 9660 (standard ISO CD-ROM). U sekciji Relax restrictions čekiramo sve opcije, dakle kao na slici dolje:

I ovde je važno napomenuti: da u okviru sekcije Relax restrictions, obavezno bude čekirana opcija Do not add the ‘;1’ ISO file version extension, kako bi CD bio butabilan! Ukoliko toj opciji iz nekog razloga nije moguće pristupiti, morate instalirati noviju verziju Nero Burning Roma.

5. Nakon podešavanja ISO kartice, prelazimo na sledeću – Label. Čekiramo opciju Automatic i upišemo naziv diska (ovo i nije toliko bitno, ali dobro), koristeći neku od originalnih XP CD oznaka, shodno verziji Windows XP-a koji koristimo. A oznake su sledeće:
Windows XP Professional > WXPCCP_EN
Windows XP Home > WXHCCP_EN
Windows XP Professional OEM > WXPOEM_EN
Windows XP Home OEM > WXHOEM_EN

6. Nakon toga, kliknemo na karticu Burn i u okviru Action sekcije čekiramo opcije Write i Finalize CD. U sekciji Writing, pod Write speed, biramo brzinu rezanja CD-a (preporučujem da ne stavljate na max vrednost, već otprilike na polovinu max vrednosti ili još manje). Pod Write method stavimo Disc-at-once, a ukoliko želimo više od jedne kopije CD-a, upišemo željenu vrednost pod Number of copies. Čekiramo i Buffer underrun protection.

7. Kada smo podesili sve opcije u Burn kartici, kliknemo na New dugme i sačekamo da se otvori prozor ISO1 – Nero Burning Roma. U desnom File Browser prozoru pronađemo putanju do WINXPSP2 foldera u koji smo prethodno iskopirali instalacione fajlove WinXP-a. Selektujemo sve fajlove i metodom’drag-n-drop’ držeći levi taster miša, prevučemo i otpustimo ih u prozor ISO1.

8. Ubacimo prazan CD u CD ROM, kliknemo na ikonicu Burn i proces rezanja butabilnog WINXP CD-a kreće. Provjerimo samo da li je čekirana opcija Verify written data i ukoliko nije, čekiramo je.

Dalje samo pratite uputsva koje vam daje Nero da bi poceli sa narezivanjem. Ovime ste proces kreiranja butabilnog WIN XP CD-a uspešno obavili, a da je stvarno tako, najbolje ćete potvrditi tako što ćete ga testirati – ubacite disk u CD ROM i restartujte komp. Ukoliko je disk stvarno butabilan, pokrenuće instalaciju XP-a.

.htaccess kako da…

htaccess
htaccess

1. Kreirajte sopstvene error stranice.

.htaccess fajl na Linux Apache serveru čini jednostavnim stvaranje sopstvenih error stranica. Samo kreirajte sopstvene stranice za grešku (401.php,403.php, 404.php, 500.php) i dodajte sledeći kod u Vaš .htaccess fajl:

[c]ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php[/c]

2. Spriječite prikazivanje sadržaja direktorijuma.

Ukoliko u nekom direktorijumu ne postoji index fajl, posjetioci će moći vidjeti njegov sadržaj.  Sprječavanje ove pojave je jednostavno. Samo dodajte sledeći kod u .htaccess fajl:

[c]Options All -Indexes[/c]

3. Odredite sami default stranu nekog direktorijuma.

Možete promijeiti defaultnu vrijednost za index stranu nekog direktorijuma sa index.php, index.html u neku koja vam više odgovara dodavanjem sledeće linije u .htaccess fajl

[c]DirectoryIndex neka_moja_stranica.html[/c]

4. Podesite 301 redirekciju.

Kada nekoj bitnoj stranici promijenite mjesto ili ime na serveru, da bi ste  onim posjetiocima koji su tu stranicu zabilježili u bookmark i do nje dolaze direktno da i dalje omogucili da i dalje nesmetano dolaze do nje bez prikazivanja poruke o nepostojećoj stranici služi sledeći kod u .htacces fajlu

[c]Redirect 301 /original/filename.html http://domain.com/updated/filename.html[/c]

5. Kompresujte css, JavaScript i HTML fajlove koristeći GZIP.

Ova tehnika omogućava znatno brže učitavanje Vašeg sajta, pogotovo na sporijim vezama.

[c]<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text\.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image\.*
mod_gzip_item_exclude rspheader ^Content-encoding:.*gzip.*
</IfModule>[/c]

6. Preusmjerite čitav sajt sa http na https konekciju

[c]RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}[/c]

8. Natjerajte “Save As” prompt da se pojavi prilikom downloada nekih fajlova.

Ukoliko želite da forsirate download nekih fajlova umjesto da se otvaraju u browseru evo koda:

[c]AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4[/c]

9. Spriječite hotlinking.

Da spriječite krađu vašeg protoka, odnosno prikazivanje slika hostovanih na vasem serveru na nekom drugom sajtu koristimo:

[c]RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9]  \.)?vasdomen\.com [NC]
RewriteRule \.(gif|jpe?g|png)$ – [F,NC,L][/c]

10. Za ljenčuge

Za one koji mrze da “prčkaju” evo online editora

http://www.htaccesseditor.com/en.shtml#a_access

11. Za vrijedne

Evo par korisnih linkova za one koji oće da istražuju na temu

Brisanje foldera – PHP

php-logoOvo je funkcija koja briše zadati folder, kao i sve njegove podfoldere i fajlove. Kad je pozivate potrebno je samo da navedete putanju do foldere kao i njegovo ime. Npr. Rmdir(putanja/folder).

 

 

[c]
function Rmdir($path) {

$origipath = $path;

$handler = opendir($path);

while (true) {

$item = readdir($handler);

if ($item == "." or $item == "..") {

continue;

} elseif (gettype($item) == "boolean") {

closedir($handler);

if (!@rmdir($path)) {

return false;

}

if ($path == $origipath) {

break;

}

$path = substr($path, 0, strrpos($path, "/"));

$handler = opendir($path);

} elseif (is_dir($path."/".$item)) {

closedir($handler);

$path = $path."/".$item;

$handler = opendir($path);

} else {

unlink($path."/".$item);

}

}

return true;

}
[/c]

AJAX Uputstvo

ajaxslikaAJAX se zasniva na korišćenju JavaScript i HTTP requests. AJAX nije neki novi jezik već kombinacija već postojećih standarda. Dakle ono što je potrebno da znate jeste HTML i JavaScript. AJAX je postao pupularan 2005 godine sa Google Suggest. Najveća osobina AJAX-a je to što ne morate da ponovo učitavate stranicu kada komunicirate sa serverom već možete samo dio stranice. To se postiže sa XMLHttpRequest objektom.

Za demostraciju konekcije AJAX-a i PHP-a koristićemo formu sa dva tekst polja. U prvom tekst polju kucaćemo neki tekst a u drugom će se taj isti tekst konvertovati u velika slova.

[c]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8″ />

<title>Ajax – PHP primjer</title>

</head>

<body>

<form name="testForm">

Prvi tekst: <input type="text" onkeyup="pozovi();" name="prvi" id="prvi" />

Drugi tekst: <input type="text" name="drugi" id="drugi" />

</form>

</body>

</html>
[/c]

Kao što možemo vidjeti poziva se fukcija pozovi na događaj onkeyup. Prije nego što napravimo funkciju pozovi moramo da napravimo fukciju za kreiranje objekta XMLHttpRequest, i ta funkcija se zove getHTTPObject.

[c]function getHTTPObject(){

if (window.ActiveXObject)

return new ActiveXObject("Microsoft.XMLHTTP");//za IE7+, Firefox, Chrome, Opera, Safari

else if (window.XMLHttpRequest)

return new XMLHttpRequest(); // za IE6, IE5

else {

alert("Browser ne podržava AJAX.");

return null;

}

}[/c]

Posle ove kreiramo funkciju pozovi i setDrugi koja se poziva na početku fukcije pozovi.

[c]function setDrugi(){

if(httpObject.readyState == 4){

document.getElementById(’drugi’).value = httpObject.responseText;

}

}

function pozovi(){

httpObject = getHTTPObject();

if (httpObject != null) {

httpObject.open("GET", “ajax.php?text=" +document.getElementById(’prvi’).value, true);

httpObject.send(null);

httpObject.onreadystatechange = setDrugi;

}

}[/c]

Da pošaljemo zahtjev koriste se dvije metode open() i send(). Open() metoda ima tri argumenta. Prvi argument je onaj koji definiše način komunikacije sa serverom Post ili Get. Drugi je adresa skripte na serveru, dok je treći informacija da li je će se zahtjev izvršiti asihrono. Posle poslatog zahtjeva moramo provjeriti stanje zahtjeva koje može biti u pet stanja. Pet stanja:

* 0 zahtjev nije inicijalizovan
* 1 zahtjev se učitava
* 2 zahtjev je učitan
* 3 zahtjev je u procesuiranju
* 4 zahtjev je završen

Naravno nama treba 4. stanje i provjeramo da li je httpObject u tom stanju. Upišemo u polje drugi sa onim što nam je server poslao sa funkcijom setDrugi.

Još treba da napravimo na serveru ajax.php:

[c]

<?php

if (isset($_GET[‘text’]))

echo strtoupper($_GET[‘text’]);

?>

[/c]

ajx.html i ajax.php

I to je to. 🙂

IE6 PNG Fix

UnitLogoVrlo kompaktan javascript: Samo nešto malo preko 1kb! Koji rješava problem Internet explorer-a verzije 6 sa prikazom png fajlova sa transparencijom.

Takođe se vrlo jednostavno koristi, dovoljno je sledeći kod ubaciti između <head> tagova.

[c]

<!–[if lt IE 7]>
<script type="text/javascript" src="unitpngfix.js"></script>
<![endif]–>

[/c]

Poslednju verziju unitpngfix.js fajla možete preuzeti ovdje