Jenkins Port 8080 mittels iptables blocken

Das folgende Snippet ist für diejenigen interessant, die ein Proxy-Setup für Jenkins (oder Hudson) fahren. Standardmäßig ist Jenkins über yourdomain.com:8080 von außen erreichbar. Das Proxy-Setup besteht in einer internen(!) Umleitung der Zugriffe auf Port 80 einer Subdomain für Jenkins auf den Port 8080.

ci.yourdomain.com(80) -> localhost:8080 (127.0.0.1:8080)

Insgesamt bestehen mit Proxy-Zugriff also Zugriffmöglichkeiten über localhost:8080 (127.0.0.1:8080), sowie yourdomain.com:8080 und die Subdomain ci.yourdomain.com.

Um den Port 8080 für externe Zugriffe abzudichten, kann man folgende Regeln für “iptables” einsetzen:

R1. > iptables -A INPUT -i lo -p all -j ACCEPT
R2. > iptables -A OUTPUT -o lo -p all -j ACCEPT
R3. > iptables -A INPUT -p tcp -s 0/0 -d 0/0 –dport 8080 -j REJECT

Regel 1 erlaubt den lokalen Input auf alle lokalen Ports.
Regel 2 erlaubt den lokalen Ouput von allen Ports.
R1 und R2 sorgen also dafür, dass ein interner Loopback möglich ist.
Regel 3 schließt nun Port 8080, indem alle TCP-Anfragen an diesen Port abgelehnt (rejected) werden. Hierbei wird ein ICMP-Paket “unreachable” an den Client gesendet. Man kann natürlich auch einfach verwerfen (droppen) einsetzen, allerdings wartet der Client nach dem TCP-Request dann völlig unnötig auf den TCP-Timeout.

Kontrolle mittels:
iptables –list-rules (oder -L)