Configuring wireless networks with WPA2 security on old Ubuntu installations

Submitted by Jochus on Sun, 24/02/2013 - 10:32 | Posted in: Linux
Posted in

I just found this old article I've written down once to configure wireless networks with WPA2 security on old Ubuntu installations. As of today, WPA2 is supported out-of-the-box by the latest versions of Ubuntu. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.
  • Installeer wpa-supplicant
  • $ sudo aptitude install wpasupplicant

  • Controleer dat je draadloze netwerkkaart goed ondersteund wordt. Door onderstaande commando's uit te voeren, zou je netwerkkaart moeten herkend zijn. Bij errors => verder zoeken om draadloze netwerkkaart te configureren
  • $ iwconfig && iwlist scan

  • Ga naar /etc/network/interfaces en pas de code voor jouw draadloze netwerkinterface aan:
  • auto eth1
    iface eth1 inet dhcp
    wpa-driver wext
    wpa-ssid <YOUR_SSID_HERE>
    wpa-ap-scan 1
    wpa-proto RSN
    wpa-pairwise CCMP
    wpa-group CCMP
    wpa-key-mgmt WPA-PSK
    wpa-psk <YOUR_KEY_HERE>

auto eth1

  • Jouw netwerkkaart (kan ook wlan0, rausb0, ra0, ... zijn)

iface eth1 inet dhcp

  • Een IP-adres wordt geleverd door de DHCP-server

wpa-driver

  • Dit is de WPA-driver voor jouw kaart. wext is een generische driver die toepasbaar is als je met ndiswrapper werkt. Laat dit standaard staan. Je kan ook andere drivers selecteren

* hostap = Host AP driver (Intersil Prism2/2.5/3)
* atmel = ATMEL AT76C5XXx (USB, PCMCIA)
* wext = Linux wireless extensions (generic)
* madwifi = Atheros
* wired = wpa_supplicant wired Ethernet driver

wpa-ssid

  • Jouw network SSID (zonder quotes!)

wpa-ap-scan

* 1 = Broadcast van ESSID
* 2 = Verborgen broadcast van ESSID

wpa-proto

* WPA = WPA
* RSN = WPA2

wpa-pairwise & wpa-group

* TKIP = TKIP encryptiealgoritme als onderdeel van de WPA standaard
* CCMP = AES encryptiealgoritme als onderdeel van de WPA2 standaard

wpa-key-mgmt

* WPA-PSK = Authenticatie van voorafgesproken sleutel (zie verder!!!)
* WPA-EAP = Authenticatie via een 'enterprise authentication server'

  • Nu moeten we nog onze WPA key omzetten naar een hash waarde zodat deze niet letterlijk blijft staan in onze config file
  • $ wpa_passphrase <your_essid> <your_ascii_key>

  • Dit levert zoiets als
  • network={
       ssid="test"
       #psk="12345678"
       psk=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709a
    }

  • De hex_key waarde die je naast psk vindt, moet je onder wpa-psk zetten van het /etc/network/interfaces bestand
  • Herstart je netwerk
  • $ sudo /etc/init.d/networking restart

Setting up a splash image on Ubuntu 11.10 (oneiric) and Grub 1.99

Submitted by Jochus on Sat, 23/02/2013 - 10:20 | Posted in: Linux
Posted in

Choosing a Grub background image

  • You can pick an image yourself, or you can use one of the default Grub images:
    $ sudo aptitude install grub2-splashimages
  • Once installed, the images are located in the /usr/share/images/grub folder

Installing splash Images

  • Check your version of Grub (this blogpost was tested with Grub 1.99):
    $ grub-install -v
  • Open /etc/default/grub with a text editor an add the following line:
    GRUB_BACKGROUND=/path/to/your/image 
  • Update GRUB to incorporate the image into the menu:
  • $ sudo update-grub

Changing text colors

  • To add menu_color_normal and/or menu_color_highlight values when using a splash image
  • Open /etc/grub.d/05_debian_theme as root
  • Find the following lines:
  • if [ -z "${2}" ] && [ -z "${3}" ]; then
        echo "  true"
    fi

  • Change the entry to the following, replacing 'color1' and 'color2' to the desired colors. Leave /black as is!
  • if [ -z "${2}" ] && [ -z "${3}" ]; then
        # echo "  true"
        echo "    set color_highlight=color1/color2"
        echo "    set color_normal=color1/black"
    fi

  • Save the file and run update-grub

Setting up Samba on a Linux installation

Submitted by Jochus on Fri, 22/02/2013 - 23:21 | Posted in: Linux
Posted in

I just found this old article I've written down once to configure Samba on a Linux installation. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Installatie Samba

  • Installatie pakket
  • $ sudo aptitude install samba

  • Ga naar /etc/samba/smb.conf en pas volgende wijzingen toe:
  • Toegang tot werkgroep:
  • # Change this to the workgroup/NT-domain name your Samba server will part of
       workgroup = MSHOME

  • Netwerknaam computer:
  • # server string is the equivalent of the NT Description field
       server string = %h server (Samba, Ubuntu)

  • Sharen van de home folder:
  • # Un-comment the following (and tweak the other settings below to suit)
    # to enable the default home directory shares.  This will share each
    # user's home directory as \\server\username
    [homes]
       comment = Home Directories
       browseable = yes
     
    # By default, \\server\username shares can be connected to by anyone
    # with access to the samba server.  Un-comment the following parameter
    # to make sure that only "username" can connect to \\server\username
    # This might need tweaking when using external authentication schemes
    ;   valid users = %S
     
    # By default, the home directories are exported read-only. Change next
    # parameter to 'yes' if you want to be able to write to them.
       writable = yes

  • Toevoegen gebruiker aan SMB PASSW DB:
  • $ sudo smbpasswd -a jochus
    New SMB password:
    Retype new SMB password:

  • Herstart Samba
  • $ sudo /etc/init.d/samba restart

Installatie SMBFS

  • Verder wil ik ook mijn windows-server data schijf kunnen mounten. Er zijn hiervoor 2 mogelijkheden. Ofwel gebruik je een commandline tooltje als ''smbclient'', ofwel ga je data schijf mounten alsof het echte harde schijven zijn
  • Installeer smbfs
  • $ sudo aptitude install smbfs

  • Om andere gebruikers de map te kunnen mounten, moeten we deze ook rechten geven
  • $ sudo chmod u+s /usr/bin/smbmnt /usr/bin/smbumount

  • Maak een mount point aan
  • $ sudo mkdir /mnt/data

  • Om aan de schijf te kunnen geraken moeten we inloggen met Windows credentials
  • $ sudo nano /etc/samba/user

  • Vul in
  • USERNAME
    PASSWORD

  • Voor de veiligheid
  • $ sudo chmod 0600 /etc/samba/user

  • Voeg aan /etc/fstab het volgende toe:
  • //server/share   /mnt/data   smbfs   credentials=/etc/samba/user,rw,uid=bob   0   0

  • Mounten gaat nu via:
  • $ mount /mnt/data

Testing the Graph API of Facebook

Submitted by Jochus on Thu, 21/02/2013 - 23:56 | Posted in: Java
Posted in


I just tested the "new" (already in Facebook since June 2011) Graph API of Facebook. Using the RestFB Java client (http://www.restfb.com/), I was able to get a list of my friends, update my status, ... etc, etc. For testing, I retrieved an access token using the Graph Explorer tool (https://developers.facebook.com/tools/explorer).

Java project setup (pom.xml)

<project>
	<modelVersion>4.0.0</modelVersion>
	<groupId>be.jochenhebbrecht</groupId>
	<artifactId>facebook-test</artifactId>
	<version>1.0.0-SNAPSHOT</version>
 
	<dependencies>
		<dependency>
			<groupId>com.restfb</groupId>
			<artifactId>restfb</artifactId>
			<version>1.6.11</version>
		</dependency>
	</dependencies>
</project>

Getting a list of friends

import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.types.User;
 
public class FacebookTest {
 
	private static final String MY_ACCESS_TOKEN = "##REPLACE_ME##";
 
	public static void main(String[] args) {
		FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);
		Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class);
 
		for (User u : myFriends.getData()) {
			System.out.println(u.getName());
		}
        }
}

Updating my status

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.types.FacebookType;
 
public class FacebookTest {
 
	private static final String MY_ACCESS_TOKEN = "##REPLACE_ME##";
 
	public static void main(String[] args) {
		FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);
		FacebookType publishMessageResponse = facebookClient.publish("me/feed", FacebookType.class, Parameter.with("message", "Test from Graph API"));
		System.out.println("Published message ID: " + publishMessageResponse.getId());
        }
}

Kerio Mail Server: Cannot access message 0000000x in folder ~someone@somedomain.com/INBOX

Submitted by Jochus on Thu, 21/02/2013 - 22:45 | Posted in: Windows
Posted in

Problem

The following error appeared in the error.log of my Kerio Mail server:

Cannot access message 0000000x in folder ~<a href="mailto:someone@somedomain.com">someone@somedomain.com</a>/INBOX

Solution

In most of the cases, Kerio Mail Server is smart enough to repair the errors by itself. But in some cases, it just doesn't work. Manual repair is required.

  • Make sure all your clients are disconnected from the server - so you won't have any active sessions left
  • Go to the folder: /store/mail/domain/user/folder_name/
  • Rename the file index.fld to index.fld.bad
  • Now connect again with your user. Kerio Mail Server will see the index file is missing and it will automatically rebuild it. This step can take a while for very large mail folders!

Automatic user login in Windows

Submitted by Jochus on Thu, 21/02/2013 - 22:06 | Posted in: Windows
Posted in

Problem

When you're having multiple users on your windows installation, the system will always ask you which user should be used to login. But in some cases, you always want to login automatically with the same user (because the 2nd, 3rd, ... user are almost not used). How to achieve the automatic login?

Solution

Go to:

  • Start > Run
  • Type: control userpasswords2
  • Unhceck: Users must enter a user name and password to use this computer
  • Press OK
  • The system will ask you now for the default username and password (2x). This user will be used to automatically log in

Linux bridging alternative

Submitted by Jochus on Wed, 20/02/2013 - 22:37 | Posted in: Linux
Posted in
I just found this old article I've written down once to simulate a Linux network bridging alternative. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Probleem

Enkele jaren heb ik gretig gebruik gemaakt van een Windows 2003 serverke. Maar het toestel werd oud en traag en was dringend aan vervanging toe.
Bij het opzetten van een nieuwe server heb ik gekozen voor Ubuntu, omdat ik al veel positieve dingen gehoord/gelezen heb qua servers & Linux. Bovendien was het zeker niet slecht om mijn CV wat aan te vullen ;-)

Goed, 1 van de vereisten is dat mijn server als netwerk brug functioneert. Waarom? Dat valt hier eigenlijk buiten de scope van het document, maar het is bedoeld om een printer en andere DHCP clients te voorzien via HUB en de server richting het internet (en ook andere DHCP clients in het gebouw)

Bij de windows server ging dat perfect. Je selecteert 2 verbindingen: de wired en de wireless, en je kiest voor Netwerk brug maken...
De rest gebeurt van zelf, en klaar is kees :-).

Bij Linux was dit probleem precies iets anders. Er is genoeg documentatie te vinden over het bridgen van 2 wired interfaces, maar niet zo veel voor wireless en wired.

Dagen heb ik zitten prutsen om de brug in orde te brengen, maar ik kreeg ze maar niet werkend.
Het probleem is als volgt: mijn Linksys WRT54GS stuurt pakketten uit die WDS informatie bevatten. Die informatie zorgt ervoor dat pakketten hetzelfde MAC adres blijven behouden over verschillende access points heen. Nu moet mijn driver van mijn netwerkkaart wel die WDS pakketten verstaan om ze deftig te kunnen doorgeven aan mijn eth0 zijde => MAC spoofing!

En dit was dus niet mogelijk, het MAC adres kon niet gespoofd worden, waardoor mijn pakketten verloren gingen ...
Met andere woorden: ik ben gesjost. Ik kon geen netwerk brug maken onder Linux en dat was voor mij wel een redelijk pain-in-the-ass.
Maar Jochus zou Jochus niet zijn, moest hij daarvoor geen oplossing hebben ...

Getroffen systemen

ROUTER

  • systeem: WRT54GS

SERVER

  • OS: Ubuntu 8.10 Intrepid
  • wireless interface: WMP54G
  • wired interface: RealTek RTL8139

CLIENTS

  • OS: Windows XP SP3
  • wired/wireless interface: doeterniettoe :-)

Oplossing

Alle clients die aangesloten zijn op mijn router, zitten het in het 192.168.1.0/32 netwerk. Ook mijn server heeft verbinding met mijn router op interface wlan0

auto wlan0
iface wlan0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1

Nu heb ik op mijn eth0 interface een 2e subnet geconfigureerd: 192.168.0.0/32. Mijn server zal instaan voor het verkeer tussen de 2 subnetten.
Maar hoe zet je zoiets op?

Configureren eth0 onder Ubuntu

  • Configureren wired connectie (eth0) in een ander subnet
  • Voeg volgende sectie toe aan: /etc/network/interfaces
  • Tip! gebruik geen gateway, want dan zal je standaard verkeer telkens naar eth0 vliegen, ipv wlan0

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0

Toestaan dat IP pakketten van interface wlan0 doorgegeven worden aan eth0 en vice versa

  • Pas volgende file aan: /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

IP pakketten herzien van bron- en doelbestemming, zodat pakketten aan de juiste PC teruggegeven worden

$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Aanpassen printerconfiguratie

Op de printer zelf heb ik dan volgende configuratie ingesteld:

address: 192.168.0.2
submask: 255.255.255.0
gateway: 192.168.0.1

Op de clients moest ik ook de printer- en scannerpoort veranderen naar 192.168.0.2

===========
= PRINTER =
===========
* rechts klikken op je printer 
* Eigenschappen
* Tabblad: Poorten
* Selecteer de bestaande poort en druk op Poort configureren
* Stel IP-adres in op : 192.168.0.2
 
===========
= SCANNER =
===========
* Start
* Configuratiescherm
* Scanners & Camera's
* rechts klikken op je scanner
* Eigenschappen
* Tabblad: Netwerkinstellingen
* Stel IP-adres in op : 192.168.0.2

Aanpassen clients

Nu zijn we er nog niet. Want de pakketten zullen op de clients telkens naar 192.168.1.1 gestuurd worden (juist ja de router!). Hoe krijgen we die tot bij de server?

  • a) ... ofwel configureer je een extra route in de router, zodat via de DHCP offers de route ook wordt meegegeven
  • b) ... ofwel configureer je dit manueel op iedere client

Aangezien al mijn clients statisch ingesteld zijn, moest ik wel voor optie b) gaan.
Je moet op elke client het volgende ingeven:

$ route -p ADD 192.168.0.0 MASK 255.255.255.0 192.168.1.100

Customising your terminal with colors

Submitted by Jochus on Wed, 20/02/2013 - 22:11 | Posted in: Mac
Posted in

Problem

In my terminal, I like to have the words username@machinename colored. This makes it more easy to separate different commands.

Solution

Add following rule(s) to ~/.bashrc:

User

  • Linux

PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'

  • Mac OS X

PS1='\[\033[1;32m\]\u@\h\[\033[0m\] \[\033[1;36m\]\w\[\033[0m\] $ '
CLICOLOR=1
LSCOLORS=ExFxBxDxCxegedabagacad

root

PS1='\[\033[01;31m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'

Running tests through JUnit SwingUI Test Runner and JDeveloper 10g

Submitted by Jochus on Wed, 20/02/2013 - 21:13 | Posted in: Java
Posted in

Problem

The following error occurred when running a JUni test

org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [com/psws/psbilling/test/spring/dataSourceContext.xml]; nested exception is java.lang.IllegalArgumentException: Class [org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler] does not implement the NamespaceHandler interface
Caused by: java.lang.IllegalArgumentException: Class [org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler] does not implement the NamespaceHandler interface
	at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.initHandlerMappings(DefaultNamespaceHandlerResolver.java:119)
	at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.<init>(DefaultNamespaceHandlerResolver.java:96)
	at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.<init>(DefaultNamespaceHandlerResolver.java:82)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.createDefaultNamespaceHandlerResolver(XmlBeanDefinitionReader.java:526)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.createReaderContext(XmlBeanDefinitionReader.java:515)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:495)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:340)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:317)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:125)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:141)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:167)
	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:79)
	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:94)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:292)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:92)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
	at org.springframework.test.AbstractSingleSpringContextTests.loadContextLocations(AbstractSingleSpringContextTests.java:182)
	at org.springframework.test.AbstractSingleSpringContextTests.loadContext(AbstractSingleSpringContextTests.java:152)
	at org.springframework.test.AbstractSpringContextTests.getContext(AbstractSpringContextTests.java:105)
	at org.springframework.test.AbstractSingleSpringContextTests.setUp(AbstractSingleSpringContextTests.java:83)
	at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)

Solution

After Googling a while, I noticed some classes are cached inside the Spring context. Theses classes cannot be accessed from the classloader which is used to startup the JUnit Testrunner. So the dependency injection fails.

The following step solved this issue:

  • Add in your home folder (e.g.: /Users/jochen/) the file: junit.properties
  • Provide the following file contents:
    loading=false