iptables nat show wrong source ip address
Снощи се натъкнах на нещо много странно което в последствие оправих, но реших да пиша за него в блога си защото сигурно и други са имали или имат такъв проблем. Става дума за следното :
Имам един рутер (debian) на който има вдигнати няколко реални айпи адреса, и които маскирам зад него. Всичко е 6 до момента в който ми се наложи да направя Port forwarding на няколко порта към едно от вътрешните айпита. Оказа се че виждам вместо клиентското source ip, айпито на рутера ми. Използвах следната настройка на firewall скрипта:
iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 22 -j DNAT --to 192.168.1.210:22 iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 80 -j DNAT --to 192.168.1.210:80 iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 113 -j DNAT --to 192.168.1.210:113 iptables -t nat -A PREROUTING -p tcp -d 87.97.x.x -i $internet --dport 443 -j DNAT --to 192.168.1.210:443
Така оставени нещата, Port forwarding-a работи ,но дефакто се получи така наречения :
iptables nat show wrong source ip address
След малко тестове, разбрах, че проблема идва заради маскирането – „MASQUERADE“ тъй като самото то прави входящите и изходящи пакети да бъдат маскирани чрез айпи адреса на самия рутер. Така може да се дове до проблеми като моя или дори по-лошо – да се получи дупка в системата.
За целта смених MASQUERADE-то със следния ред:
iptables -t nat -A POSTROUTING -s 192.168.1.210 -j SNAT --to 87.97.x.x
И… проблема е решен 🙂