Gdy już ustawimy reverse proxy przed Apache szybko można zauważyć że w logach zamiast adresów IP zdalnych użytkowników pojawia się tylko jeden adres: adres naszego proxy. Również z poziomu php’a jako adres klienta widać IP naszego proxy.
By poradzić sobie z tym problemem trzeba na serwerze reverse proxy ustawić przekazywanie informacji o oryginalnym adresie IP klienta w nagłówku X-Forwarded-For. W przypadku gdy reverse proxy działa na nginx’e wystarczy dodać taki wpis:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Teraz w trzeba zainstalować moduł mod_rpaf dla Apachego, który to zajmie się interpretacją nagłówka i podmianą IP proxy prawdziwym IP. Na Debianie wystarczy wpisać:
apt-get install libapache2-mod-rpaf
Po instalacji należy w pliku /etc/apache2/mods-available/rpaf.conf
w opcji RPAFproxy_ips
dopisać adresy IP serwerów proxy, np (oczywiście wpisz swoje adresy):
RPAFproxy_ips 127.0.0.1 10.24.0.5
Ważne by były to zaufane adresy IP - bo w tym miejscu pozwalamy by z tych lokalizacji możliwe było nadpisanie adresu IP np. w logach. Jeżeli pozwolimy na modyfikację adresów IP z zewnątrz to atakujący może wykorzystać to by nadpisać swój prawdziwy adres fałszywym.
Pozostało uruchomić moduł i zrestartować Apachego aby go załadował:
a2enmod rpaf
invoke-rc.d apache2 restart
Teraz zarówno w logach Apache’go jak i skryptach PHP’a będzie przekazywane rzeczywiste IP użytkownika.