Řešil jsem nutnost vytvoření super jednoduchého - jednoúčelového - proxy serveru, kvůli chybějícímu otevření firewallu a jak jinak než urgentnímu požadavku na zprovoznění mimo pracovní dobu.
Použil se na to virtuální stroj s Ubuntu a minimální velikostí. Jako proxy sloužil nástroj iptables, ale dalo by to udělat i s nginx proxy nebo apache2 proxy.
Prvnotní kontrolu prázdných iptables lze provést příkazem
iptables-save
kde by nemělo být žádné pravidlo
Nejjednodušší je vytvoření skriptu s pravidlem transparentní proxy příkazem
nano natscript.sh
kam přijde text
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.10:8080
iptables -t nat -A POSTROUTING -p tcp -d 10.10.10.10 --dport 8080 -j SNAT --to-source 11.11.11.11
přičemž 10.10.10.10 je cílová adresa, kam se vlastně chceme připojit a 11.11.11.11 je adresa hostitelského serveru, aby se provoz dostal zpátky k odesilateli požadavku. Překlad portu neprobíhá a zůstává na 8080.
Pojďme na to a spustit skript, který založí vytvořená pravidla
sudo chmod +x natscript.sh
sudo ./natscript.sh
Po vykonání tohoto příkazu už bude vidět pravidlo v kontrolním logu s příkazem iptables-save
# Generated by iptables-save v1.6.1
*nat
:PREROUTING ACCEPT
:INPUT ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
-A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.10.10.10:8080
-A POSTROUTING -d 10.10.10.10/32 -p tcp -m tcp --dport 8080 -j SNAT --to-source 11.11.11.11
COMMIT
# Generated by iptables-save v1.6.1
Nyní je potřeba uložit tuto konfiguraci permanentně
sudo su root
sudo apt-get install iptables-persistent
případně při změně
recall dpkg-reconfigure iptables-persistent
Nicméně tato konfigurace stále nezůstane zachována při restartu serveru, je potřeba v souboru
sudo nano /etc/sysctl.conf
odkomentovat řádek
net.ipv4.ip_forward=1
a uložit
Namísto směřování požadavků na adresu 10.10.10.10:8080/path/file provádíte nyní dotazování adresy 11.11.11.11:8080/path/file se stejným výsledkem.
Pokud si přejete debugovat pravidla při překladu, doporučuji příkaz tcpdump
sudo tcpdump dst port 8080 or src port 8080
To by bylo vytvoření jednoduchého proxy serveru obcházející chybějící ACL pravidlo na firewallu.