Category Archives: Uncategorized

Linux iptables firewall port redirecting + preventing iptables lock out

Linux iptables firewall port redirecting

Sometimes you just want to redirect an external port to another internal port for security reasons.

I.e. you have a running mySQL server on default port 3306 and you want to access it outside from a ‘more secure’/uncommon port- let’s say 53306.

Typically you just add the following line to iptables:

/sbin/iptables -t nat -A PREROUTING -p tcp –dport 53306 -j REDIRECT –to-port 3306

However if you also want explicit firewall functionality you should close port 3306 for incoming packets and open port 53306 for them.

The basic packet flow in iptables is as follows:

Packet flow in linux iptables. Every table contains several chains/queues, where the packets are added/moved to. Incoming packets get in from top, then through mangle table PREROUTING chain, nat table PREROUTING chain, then mangle table INPUT chain, filter table INPUT chain and then to the application! Important: The default table is ‘filter’.

Typically to close port 3306 for incoming tcp packets, you move TCP packets with destination port 3306 from (table nat, chain PREROUTING) to (table filter, chain DROP). You would write:

/sbin/iptables -t nat -A PREROUTING -p tcp –dport 3306 -j DROP

However this line gives out an error, as the nat table does not allow to forward to the DROP chain.

So if you take a look at the graph above, the best table/chain to close the external port 3306 for incoming tcp packets is table/chain ‘mangle/prerouting’:

/sbin/iptables -t mangle -A PREROUTING -p tcp –dport 3306 -j DROP

Then you open the table/chain ‘filter/input’ on port 3306 (see graph above) and the firewall internally is opened:

/sbin/iptables -A INPUT -p tcp –dport 3306 -j ACCEPT
You see: iptables is quite easy if you understand the principle of packets just moving from one table/chain to another.

Preventing iptables lock out

As you can lock out yourself with iptables by adding wrong rules, it is recommended to add the following lines to crontab:

# FOR IPTABLES TESTS ONLY : flush all ip table rules every 60 minutes (in case you lock yourself out)
*/5 * * * * root /etc/firewall-emergency.sh

The firewall-emergency.sh looks as follows:

#!/bin/sh
echo 0 > /opt/psa/var/modules/firewall/ip_forward.active
chmod 644 /opt/psa/var/modules/firewall/ip_forward.active
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
exit 0

If something goes wrong editing iptables, the firewall will be totally cleared every hour.  Then if everything works fine, simply comment the line in crontab and you are ready to go.

Another option for preventing a lock-out by a wrong iptables configuration is iptables-apply (http://manpages.ubuntu.com/manpages/xenial/man8/iptables-apply.8.html).

For backups of your iptables firewall rules, use iptables-save and iptables-restore commands (iptables gives data to stdout; i.e. iptables-save > ~/iptables_backup_24_11_2016.txt would save the data to your home).

With iptables –list you can check the current rules (default table is filter – so if you want to output all tables you have to use the -t parameter; simplier for inspescting all table rules is iptables-save).

NOTE: iptables looses all rules on process/system restart. Install iptables-persistent (apt-get install iptables-persistent) to load them every time the system/runlevel is entered (help link for German users: http://www.sysadminslife.com/linux/quicktipp-iptables-regeln-dauerhaft-speichern-mit-iptables-persistent-debian-ubuntu-linux-mint/).

USB DVB-T Stick als Spektrum-Analyzer (R820T+RTL2832U)

dvbt_stick
Ein USB-DVB-T Stick (mit R820T-Tuner und RTL2832U-Demodulator) schickt über eine externe Antenne empfangene Signale im Bereich von ca. 50 Mhz bis ca. 1800 Mhz (ggf. sogar höher) zum PC. Mit einer passenden Software kann man das Signal im Zeit- oder Frequenzbereich untersuchen und sich so z.B. das Spektrum des Signals ansehen.

Funktionsweise:

r820t rtl2832

Der Tuner (R820T) empfängt das RF-Signal und schickt es über Vorverstärker (Low Noise Amplifier/LNA), Power Detector (pdet), Bandpaß-Filter und ‘Image Rejection Filter’ (RF_Filter). Der Mischer konvertiert das RF-Signal zu einer niedrigeren Zwischenfrequenz (Intermediate Frequency/IF), welche von der Anwendungs-Bandbreite abhängt. Die Standard IF-Filter implementieren 6/7/8 Mhz Bandbreiten. Über einen Ausgangsverstärker mit variabler Verstärkung (Variable Gain Amplifier, VGA) wird das Signal in den Analog-Digital-Wandler (ADC) geschickt.

Über einen Analog-Digital-Wandler (ADC) wird das analoge Signal gesampelt und als Quadratursignal (I-Q-Signal, d.h. Q=asin(Phase)*Amplitude, I=acos(Phase)*Amplitude) kodiert (Orthogonales Frequenzmultiplexverfahren/COFDM). Da der ADC-Takt höher liegt als die Symbol-Rate, führt ein Resampler die Konvertierung in Symbol-Rate durch. Das Ausgangssignal wird über USB ausgelesen.

Technische Daten:

Tuner: Rafael Micro R820T

  • Frequenzbereich: 42 bis 1002 Mhz
  • Input IP3 (LNA Min/Max Gain): +35 bis -7.5 dBm
  • I2C Schnittstelle

Demodulator: Realtek RTL2832U

  • IF-Frequenzen: Zero-IF (28,8 Mhz), 4,57MHz oder 36,167MHz
  • Sample-Rate: 900 ksps bis 3,2 MS/s
  • Takt: 28,8 Mhz
  • USB 2.0
  • Register ‘pset_iffreq’: Zwischen-Frequenz (IF)
  • Register ‘rsamp_ratio’: Resampler-Verhältnis (ratio)

Verwendete Software:

Linux: Gqrx SDR, RTL_SDR_Wide_Spectrum_Analyzer, …

Windows: Die verwendete Software (SDR#) kann das gesuchte Signal im Frequenzbereich darstellen, demodulieren (FM, AM etc.) und über PC-Lautsprecher ausgeben:
sdrsharp

Wichtig: nicht den Original-Treiber des Sticks verwenden- SDR# enthält das Programm “zadig” womit der passende Treiber installiert wird:
zadig

Einige Frequenzen/Signale sind erst nach Änderung der Einstellungen (Sample Rate, RTL/Tuner AGC), zu empfangen:
sdrsharp_settings

Beispiele:

433 Mhz Sender:
433_mhz_sender

1090 Mhz Flugradar (Reichweite ca. 300 km)
flugradar9

1,8 Ghz DECT Telefon einschalten – Man sieht die Kommunikation vom Telefon mit der Basisstation:dect_telefon_einschalten

2,4 Ghz Funke:
rc2_4ghz_funke

5,8 Ghz Video Transmitter:
5_8_ghz_video_tx

Laserdrucker und Schattenbilder auf dem Papier – Eigenreperatur

Oftmals zeigen Laserdrucker “Schattenbilder”, d.h. Stellen mit viel Toner haften nicht mehr. Das Ergebnis sind Tonerauftragungen an der falschen Stelle auf dem Blatt oder Fehlstellen, an denen gar kein Toner mehr ist, während an anderen Stellen schwarze Schmierpunkte- teilweise ganze Schmierflächen mit eben der Farbe zu sehen sind, welche an anderer Stelle fehlt.
Ebenso trifft dies bei Schwarz-Weiss Laserdruckern auf schwarzen Toner zu.

Die Ursache kann zum einen eine verbrauchte/alte Bildtrommel (bzw. bei Farblasern Übertragungsrolle) sein – aber die meisten Schattenbilder haben die Ursache in einer zu niedrigen Fixierer-/Heizungstemperatur. Und hier wiederum ist oftmals nicht die Heizung defekt, sondern nur die Sensorik des Temperaturregelkreises- sprich der Thermostat und/oder der Temperaturgeber. Bei meinen Dell 1320C war es ebenso der Temperaturgeber der Fixiereinheit, welcher im Laufe der Zeit gedriftet ist.

Wenn der Drucker im Treiber oder im Einstellungsmenu des Gerätes einen “Tonersparmodus”/geringeren Tonerauftrag anbietet, so sollte man mit diesen testweise aktivieren. SInd dann die Schattenbilder auf allen Ausdrucken weg, so ist definitiv die Fixiereinheit/Heizung zu kalt.

Die Reperatur der Fixiereinheit/Heizung ist einfach und funktioniert so:

0.) Netzstecker ziehen.

1.) Fixiereinheit lokalisieren und ggf. ausbauen: Die Fixiereinheit- oder auch Heizung genannt- erkennt man meist an einer roten, gummierten Rolle, wo direkt in der Nähe ein Hitze-Warnschild angebracht ist. Falls der Drucker kurz vorher in Betrieb war ist diese Rolle noch relativ heiß (über 90°) – also nicht direkt nach dem Betrieb anfassen!

Fixierer_ausbau

2.) Thermostat und/oder Temperaturgeber suchen

Fixierer aufschrauben
Fixierer offen
Der rot umkreiste Sensor ist ein elektronischer Temperatursensor. Der kleine runde Kreis mit den zwei Kabelschuhen daneben kann ein Bimetall-Thermostat oder auch eine Temperatursicherung sein.

3.) Thermostat prüfen und/oder Temperaturgeber einstellen oder abdecken

Fixierer thermostat ausgebaut

In diesem Fall ist des Rätsels Lösung die kleine Madenschraube im Temperaturgeber. Diese einfach vollständig reindrehen und wieder mit etwas Nagellack fixieren. Ergebnis: Der Sensor bekommt weniger Wärmestrahlung von der Heizung ab und die Regelung gibt mehr Leistung im zeitlichen Durchschnitt auf den Heizkreis (meist eine On-Off Hystereregelung für die 230V Heizungen- ähnlich wie beim Elektro-Heizkörper).

Falls der Temperaturgeber nicht einstellbar ist, kann man ihn relativ einfach mit etwas Alupapier den Thermostat zu 30-60% abdecken und Tesaband fixieren- ebenso mit dem Ergebnis, dass die Fixierer-Temperatur wieder steigt.

Weiterhin sollte man den Sicherheits-Thermostaten rechts daneben auf Funktion prüfen: Im kalten Zustand muss er leitend sein. Er liegt meist direkt in Reihe mit der 230V Stromversorgung für die Heizung.Je nach Auslegung des Laserdruckers kann es auch nur dieser Thermostat sein, der die Temperatur regelt. In meinem Fall war es jedoch nur eine Sicherheits-/Übertemperatursicherung.

Die Prüfung der korrekten Heizungstemperatur kann man relativ gut mit Testausdrucken prüfen- auch das Anfühlen des Blattes direkt nach dem Ausdruck kann Hinweise darauf geben, ob die Heizungstemperatur gestiegen ist.

Wichtiger Aspekt: Eigenreperaturversuche nur vornehmen, wenn die Garantie erloschen ist und die Kosten einer neuen Heizung die Anschaffungskosten des Gerätes übersteigen.

Weiterhin: Niemals den Drucker unter Netzspannung reparieren. Wünsche viel Erfolg beim Reperaturversuch.

Alexander’s car diagnostic software (OBD KW1281)

-Arduino Version-

Update 2015:   I developed an Arduino OBD reader for the older OBD KW1281 protocol:

  1. An OBD USB adapter (USB KKL adapter  ‘AutoDia K409 Profi USB‘) was hacked, so I could connect the car OBD to the Arduino (TX/RX via software serial).
  2. An Arduino LCD display (‘YwRobot LCMI602 IIC V1’) was attached to the Arduino.
  3. Arduino code was written for the KW1281 protocol to read car sensor data (RPM, oil/coolant temperature, throttle, air, etc.) and show them on the display.

obd_adapter_arduinoobd_kw1281_arduinoobd_arduino_car obd_arduino_display1 obd_arduino_display2

Download Arduino Code for the KW1281 OBD protocol: arduino_kw1281


-PC Version-

My Audi A4/B5 (1997) and many other old cars use the older OBD KW 1281 protocol – I tried to find any suitable OBD software for my car to speak to my motor and dashboard control units (ECU), however:

  • wbh-diag 0.89 : seem to work (unstable connection)
  • monoscan 2.30: seem to work, but does not have ‘set basic settings’ feature
  • VAG-COM 3.11/4.09: seem to work (you have to power off/on ignition while connecting as it sends some data before waking up and that confuses my engine ECU)
  • CarPort 1.3.2: seem to work (you have to power off/on ignition while connecting as it sends some data before waking up and that confuses my engine ECU)

So, using the KW1281 protocol, the correct initialization timing (baud 5) is critical, and some software does not wait before waking up the ECU. Finally, I decided to develop something on my own. Note: my software only supports the older KW1281 protocol!

Features of my KW1281 diagnostic software:

  • Read sensors (measurements)
  • Set basic settings – useful, if you want to start motor ECU throttle adaption
  • Read errors
  • Clear errors
  • Read ROM (does not work for all ECUs)
  • Showing sensor values in graph

What you need:

  • a PC runing Windows (XP/Vista/Win7)
  • an USB KKL adapter (it provides a virtual COM port, for example ‘AutoDia K409 Profi USB‘ – it uses the FTDI chipset to emulate a serial line)

Screenshot:
kw1281screenshot

Download:
obd_kw1281  (executable)
obd_kw1281  (freepascal_lazarus code)

Please send me your feedback! Thanks 🙂 If you send your feedback, please always send me the complete debug output.

My car’s OBD data:

- Audi A4 B5 1.8, 1997, ADR
- Engine ECU:
     Part Number : 8D0907558B      Component : 1,8L R4/5V  MOTR HS D02
- Dash board ECU
     Part Number : 8D0919860G      Component : B5-KOMBIINSTR.UN4   D01
     Descriptor 5 : IMMO-IDENTNR: AUZ8Z0V5170015

How to fix a specific OS X dynamic loader problem (dyld – 0x80000022)

The problem: You compile your C code on a OS X 10.6 machine like this:

gcc-4.2 -mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk ...

When trying to run the executable on a OS X 10.5 machine, you may get this error:

Dyld Error Message:

unknown required load command 0x80000022

The reason is that OS X 10.5 doesn’t understand the load command  'LC_DYLD_INFO_ONLY' (0x80000022) that was used by the OS X 10.6 linker.

Solution: Make sure you are using a deployment target by setting the environment variable just before your link command:

export MACOSX_DEPLOYMENT_TARGET=10.5

(or   setenv MACOSX_DEPLOYMENT_TARGET=10.5)

You can always check the load commands of the executable like this:

(without using deployment target)
otool -l binary

Load command 4
cmd LC_DYLD_INFO_ONLY
cmdsize 48
rebase_off 0
rebase_size 0
bind_off 462848
bind_size 1320
weak_bind_off 0
weak_bind_size 0
lazy_bind_off 464168
lazy_bind_size 2624
export_off 466792
export_size 4568
(using deployment target)
otool -l binary

Load command 4
cmd LC_DYLD_INFO
cmdsize 48
rebase_off 0
rebase_size 0
bind_off 466944
bind_size 1400
weak_bind_off 0
weak_bind_size 0
lazy_bind_off 468344
lazy_bind_size 2656
export_off 471000
export_size 4568


Another solution:  Read this Intel article here – it may give you another possible solution.

Wie funktioniert eine Digitalkamera und wie baut man eine eigene in 30 Minuten?

Unter http://www.bigshotcamera.org zeigt die  Columbia University wie eine Digitalkamera funktioniert – man lernt durch Lesen und in Experimenten direkt auf der Website Grundlagen einer Digitalkamera und der digitalen Bildverarbeitung. Desweiteren wird ein Prototyp zum eigenen Zusammenbau einer Digitalkamera gezeigt.

Ein wirklich tolles (Lehr-)Projekt – nicht nur für Kinder! Es sollte mehr solcher Projekte in Lehre und Forschung geben!

Leitungsverfolgung im Erdreich

Fast alle Rasenmähroboter verwenden eine Induktionsschleife (also einen geschlossenen Leiter von Punkt A nach Punkt B), um den Roboter auf das zu mähende Gebiet zu begrenzen – wie findet man aber die Stelle heraus, falls so eine Leitung einmal unterbrochen wurde? Ganz einfach: man baut sich einen “Cable Tracker” 🙂 …

Funktionsprinzip: Speist man eine Wechselspannung gegen Erde (als Masse) auf den unterbrochenen Leiter, so erzeugt diese ein elektrisches Feld um den Leiter. Dieses Feld kann man mit einer Spule detektieren. Wählt man für das Wechselsignal eine Frequenz von z.B. 400 bis 4000 Hz, so kann man dieses Signal um den Leiter herum mit einem kleinen Verstärker (z.B. Walkman) hörbar machen.

cable tracker

Verwendete Komponenten:

Der Sender:

  1. Eine fertige PWM-Motor-Controller Schaltung (min. 30V), gefunden bei eBay (ist quasi ein fertiger Rechtecksignal-Frequenzgenerator mit Verstärker)
  2. Ein Gleichstromnetzteil (30V – Achtung: auf keinen Fall mit höherer Spannung arbeiten)

Der Empfänger:

  1. Eine Spule mit vielen Windungen aus einem alten 230V-Relais
  2. Ein alter Walkman (oder Mikrofonverstärker)

Schritt 1:  Den Sender aufbauen

Zunächst wurde der PWM-Controller mit nur 10Volt und einem Lautsprecher als “Motor” betrieben, und dabei die fertige PWM-Schaltung durch einen parallel ergänzten Kondensator so eingstellt, dass die Schaltung ein Rechteck-Signal mit gut hörbarer Frequenz erzeugt. Danach wurde der Lautsprecher entfernt, das Netzteil angeschlossen und als “Last” das offene Ende der Induktionsschleife und die “Rückführung” über einen Erdungsleiter (einfach ein Stahlrohr in die Erde gerammt).

cable tracker sender

Schritt 2: Der Empfänger

Ein alter Walkman wurde geöffnet und anstelle des Tonkopfes eine Spule angeschlosen. Wenn man nun den Walkman betreibt, hört man in der Nähe von Netzteilen/Steckdosen/etc. das typische 50 Hz Brummen – ein Zeichen dafür, dass der Empfänger funktioniert.

cable tracker receiver

Schritt 3: Das Induktionskabel “abfahren”

Zum ersten Test nimmt man das Kabel für den Erdungsleiter einfach in die Hand (damit ist der abzufahrende Induktionskabel geerdet). Nun hört man in der Nähe (1-2 m) des Induktionskabels einen Ton, dessen Lautstärke durch Annäherung an das Kabel zunimmt. Genau an der Stelle der Unterbrechung hört der Ton auf und man hat die Stelle der Unterbrechung gefunden.

Viel Spaß beim Nachbauen 🙂

8051 Quickstart using STC MCU

This article describes the first steps how you start programming a 8051 compatible MCU (aka C51), in this case the STC12C5412AD using a USB-to-TTL adaptor.

stc_usb.jpg

Why 8051/C51 ?

  • very popular (you can find plenty of code examples)
  • simple to program (simple register maps etc.)
  • cheap
  • Todays 8051 compatible MCUs have most needed integrated (flash memory, EEPROM, ADC, UART, PWM, …)
  • almost nothing has changed since its beginning (same registers – the 1980’s code you find still works)


Why STC MCU?

  • cheap
  • easy to flash: no external programmer is required – TX/RX line is used to flash the MCU

What you need:

  • STC MCU (STC12C5410AD, STC12C5412AD, STC12C5620AD, …) – here we using the LQFP-32 pins version (right chip in the picture above)
  • USB-to-TTL (5V) adaptor like in the picture above (these can be found easily via eBay) – my adaptor uses the popular CP2102 USB-to-UART bridge
  • Wire, adaptor board, …
  • a PC
  • a book about 8051 programming (STC doesn’t provide a real 8051 programming reference paper, however this isn’t needed as their MCUs are 100% compatible to the original 8051 generic MCU programming !)

Steps:

  1. Connect the STC MCU to the USB-to-TTL adaptor:
    USB-adaptor TX <—> MCU RX
    USB-adaptor RX <—> MCU TX
    USB-adaptor +5V <—>  MCU VCC
    USB-adaptor GND <—> MCU GND
    That’s too easy isn’t it? 🙂
  2. Download STC ISP software v4.80 (Chinese user interface) – I needed v4.80 for my MCU, newer MCUs need newer ISP versions!
  3. Download Keil uVision IDE and Compiler (evaluation)
  4. Install uVision, create a new project “Atmel AT89S52”, no startup file. Under Project options, set OSC frequency, and check “hex file” output.
  5. In uVision, create a new file (test1.c), and add it to the project.  Write your first MCU program in this file.
  6. Add the corresponding STC MCU header file to your project and include it (e.g. STC12C5410AD.H or STC12C5620AD.H). They contain the port and memory definitions for your type of MCU. You can find them in the download below.
  7. Compile to .hex file
  8. Upload .hex file using the ISP software.  Important: the STC MCU automatically starts reading and flashing the program via RX line when a certain sequence is sent at start up – therefore, you first need to start the ‘Download’ in the ISP software, and _after_ that turn on the MCU !  Also, both the ISP software and MCU will automatically handshake a good baud rate  (e.g. if the internal 6 Mhz OSC is used, the ISP software will probe a ‘good’ baud rate, so that the MCU will start downloading).

Downloads:

stc_demo.zip
(shows how to initialize the UART, ADC and successively sends the value of ADC0 via UART to the PC)