Ubuntu: Заглушка с подменой web-страницы
Возникла ситуация, когда определенной группе клиентов необходимо ограничить доступв в интернет, при этом оповещая их об этом.
В моем случае это клиенты, которые не могут ходить в интернет, по причине того, что их учетная запись заблокирована. Выпускать их в интернет или нет, этим занимается биллинговая система, выдавая IP из определенных блоков адресов.
Осталось сделать страничку с оповещением, что клиенту "перекрыли интернеты". Пусть будет условно такая страница, поправите на свой вкус:
доступ заблокирован
Эту страницу помещаем на заранее заготовленный http сервер.
Помимио этого нам потребуется файл настройки, в котором мы обозначим, что любые модификации URL в любом случае будут перенаправляться на нашу страничку-заглушку
# cat .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^(.*)[png|gif|css|jpg|html|htm|js|swf]$
RewriteRule ^(.*)$ ./index.html
ErrorDocument 404 /index.html
Осталось настроить правила iptables
iptables -t nat -A PREROUTING ! -d 10.0.0.11/32 -s 172.16.128.0/17 -p tcp -m multiport --dport 80 -j DNAT --to-destination 10.0.0.11:80
Здесь мы даем задание для iptables, которое должно быть помещено в таблицу NAT и чтобы оно срабатывало еще до обработки правилами брандмауэра.
Если
- ! -d 10.0.0.11/32 - запрашиваемый адрес в браузере клиента не равен IP сервера с заглушкой
- -s 172.16.128.0/17 - и клиентский IP находится в этом блоке адресов
- -p tcp -m multiport --dport 80 - а порт, к которому пытается подключиться клиент (в нашем случае это любая веб-страница любого сайта)
- -j DNAT --to-destination 10.0.0.11:80 - то перенаправлять на нашу страницу-заглушку
Не забудьте в конце сохранить изменения, внесенные в iptables
iptables-save