Так как при включении Cloudflare proxy, запросы к веб серверу будут приходить от серверов Cloudflare, а не напрямую от пользователей, по этому нужно настроить заголовок CF-Connecting-IP в котором передается реальный IP адрес пользователя, после настройки он будет отображаться как и раньше в логах и запросах.
Если apache2, то активируем модуль remoteip:
a2enmod remoteip
systemctl restart apache2
Откроем нужный файл конфигурации:
nano /etc/apache2/conf-enabled/remoteip.conf
or
nano /etc/apache2/sites-available/ixnfo.com.conf
И добавим:
RemoteIPHeader CF-Connecting-IP
# cloudflare.com/ips
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22
RemoteIPTrustedProxy 2400:cb00::/32
RemoteIPTrustedProxy 2606:4700::/32
RemoteIPTrustedProxy 2803:f800::/32
RemoteIPTrustedProxy 2405:b500::/32
RemoteIPTrustedProxy 2405:8100::/32
RemoteIPTrustedProxy 2a06:98c0::/29
RemoteIPTrustedProxy 2c0f:f248::/32
Проверим конфигурацию и перезапустим apache2:
apache2ctl configtest
systemctl restart apache2
Если веб сервер nginx, то добавим к конфигурации сайта:
real_ip_header CF-Connecting-IP;
# cloudflare.com/ips
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
Проверим конфигурацию и перезапустим nginx:
nginx -t
service nginx restart
Готово, заголовок CF-Connecting-IP настроен.
Также можно написать скрипт который будет обновлять IP адреса Cloudflare, но на практике они очень редко изменяются, дату последних изменений видно на странице с их списком.
Например скриптом их можно получать по официальным ссылкам www.cloudflare.com/ips-v4 и www.cloudflare.com/ips-v6, сохранять в файл и делать nginx -s reload чтобы применить изменения.
Также по желанию можно ограничить фаерволом порт 80 и 443 только для сетей Cloudflare, чтобы не получать прямые запросы на IP адрес сервера «Origin IP» или на домен если кто-то уже знает IP адрес сервера и пропишет его в локальном DNS или hosts на своем компьютере. Так как например есть сервисы которые хранят историю изменений DNS записей.
Пример скрипта:
#!/bin/bash
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
iptables -A INPUT -p tcp -m multiport --dports 80,443 -s $ip -j ACCEPT
done
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do
ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -s $ip -j ACCEPT
done
#iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
#ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
#iptables -nvL
#ip6tables -nvL
Или вручную:
iptables -A INPUT -s 173.245.48.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 103.21.244.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 103.22.200.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 103.31.4.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 141.101.64.0/18 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 108.162.192.0/18 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 190.93.240.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 188.114.96.0/20 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 197.234.240.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 198.41.128.0/17 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 162.158.0.0/15 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 104.16.0.0/13 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 104.24.0.0/14 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 172.64.0.0/13 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -s 131.0.72.0/22 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2400:cb00::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2606:4700::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2803:f800::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2405:b500::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2405:8100::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2a06:98c0::/29 -p tcp -m multiport --dports 80,443 -j ACCEPT
ip6tables -A INPUT -s 2c0f:f248::/32 -p tcp -m multiport --dports 80,443 -j ACCEPT
Если политика INPUT по умолчанию DROP, то удалим разрешающие правила, если ACCEPT, то запрещающие правила всегда должны быть после разрешающих:
iptables -D INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -D INPUT -p tcp -m tcp --dport 443 -j ACCEPT
ip6tables -D INPUT -p tcp -m tcp --dport 80 -j ACCEPT
ip6tables -D INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
Смотрите также мою статью:
Подключение Cloudflare proxy