Архив автора: admin

Способы разграничения прав доступа в nginx

Проблема ограничения доступа к сайтам, директориям и файлам, которые располагаются на вашем сервере не является редкой и может возникнуть в десятках, если не сотнях случаев: реконструкция или разработка сайта, доступ к которому нужно ограничить его командой до завершения процесса, региональные или локальные проекты, борьба со школохацкерами и т.п.




1. Как при помощи nginx заблокировать доступ с определенного ip к некоторой секции сайта?




Открываем конфигурационный файл вашего сайта:




nano /etc/nginx/sites-available/sitename.com




Находим или создаем локейшн, доступ к которому нужно закрыть с определенного ip, например «111.222.333.444»:




location /testdir {
    deny 111.222.333.444;
    }




После чего нужно не забыть проверить правильность конфигурации командой:




nginx -t




И в обязательном порядке перезагрузить nginx:




sudo servcie nginx restart




Или просто заставить его перечитать конфигурационные файлы:




sudo service nginx reload




Дополнительно вы можете вывести свою страницу ошибки или даже сделать переадресацию на другой сайт:




location /testdir {
    error_page 403 = @deny;
    deny 111.222.333.444;
}

location @deny {
    return 301 http://example.com/comingsoon;
}




Аналогичным образом вы можете отдавать любой HTTP ответ, вместо стандартного «ERROR 403«:




location /testdir {     
        deny 111.222.333.444;
        return 444;
 }




Ошибка 444 (No Response) — это пользовательский код состояния, используемый для указания nginx на закрытие соединения без отправки ответа клиенту, чаще всего используется для отклонения вредоносных или искаженных запросов.




Действие с IP по условию




В зависимости от определенного IP-адреса NGINX может выполнять различные действия, а не только запрет доступа. Например, перенаправление.




В данном примере мы перенаправляем всех посетителей по пути https://$host$request_uri, кроме запросов с IP-адреса 111.222.333.444.




location / {

    ...

    if ($remote_addr != 111.222.333.444) {

        return 301 https://$host$request_uri;

    }

    ...

}




2. Как при помощи nginx заблокировать доступ с нескольких ip адресов к некоторой секции сайта?




Аналогичным образом вы можете отправить шуточный код ошибки «HTTP 418» I’m a teapot (Я — чайник). Этот код был представлен в 1998 году как одна из традиционных первоапрельских шуток IETF в RFC 2324, Hyper Text Coffee Pot Control Protocol. Ожидается, что этот код не будет поддерживаться реальными серверами. Как бы то ни было, реализации существуют. Сервер HTTP Nginx в своей конфигурации использует этот код для имитации поведения goto-like.




deny 111.222.333.444;
deny 111.222.333.555;
deny 111.222.333.666;
deny 111.222.333.777;




1 апреля 1998 года Internet Engineering Task Force (IETF, «Целевая группа по инженерному обеспечению Интернета) представила «протокол для контроля, мониторинга и диагностики кофемашин». В документе среди прочего описывались и ошибки. Проблема за номером 418 описывалась так: если кто-то попытается сварить кофе в чайнике, последний вежливо, но твердо сообщит: «Я – чайник. Ошибка 418».




Шутка прижилась (по крайней мере, в узких кругах). Например, у Google даже сегодня есть соответствующая страница google.com/teapot







3. Как при помощи nginx заблокировать доступ с диапазона или нескольких диапазонов ip адресов к некоторой секции сайта?




В данной ситуации локейшн не представляет ничего особенного и составляется по следующему принципу.




Для запрета доступа с одного диапазона (111.222.111.1-111.222.111.254) ip:




location /testdir {     
        deny 111.222.111.0/24;
 }




Для запрета доступа с нескольких диапазонов ip адресов:




location /testdir {     
        deny 111.222.111.0/24;
        deny 111.222.222.0/24;
 }




4. Как при помощи nginx заблокировать доступ из списка ip адресов и списка диапазонов ip? расположенных в отдельном файле к некоторой секции сайта?




Вот мы и подошли к более интересному случаю, когда мы можем заблокировать на одном сайте, в нескольких сайтах или же на большом количестве сайтов множество ip адресов и диапазонов сетей, которые у нас расположены в некотором файле «testdir_ip_deny.txt«, расположенном в папке «/etc/nginx/«




location /testdir {     
        include /etc/nginx/testdir_ip_deny.txt
 }




Содержимое файла «testdir_ip_deny.txt» может выглядеть следующим образом:




deny 111.555.111.0/24;
deny 111.222.333.444;
deny 111.222.333.555;
deny 111.222.333.666;
deny 111.222.333.777;
deny 111.666.222.0/24;
deny 111.333.333.888;
deny 111.444.333.999;
deny 111.222.321.666;
deny 111.222.456.777;




В таком виде nginx может обработать десятки тысяч ip адресов и диапазонов ip сетей.




Аналогичным образом вы можете заблокировать доступ ко всем сайтам и всем локейшинам nginx, не прописывая правила блокировки во всех конфигах сайтов.




Для этого достаточно создать файл ip_deny_to_all.conf в директории конфигурационных файлов (/etc/nginx/conf.d) nginx:




nano /etc/nginx/conf.d/ip_deny_to_all.conf




B вставить в него произвольный список запретов:




...
deny 111.666.222.0/24;
deny 111.333.333.888;
...




include добавлять никуда не нужно, т.к. все конфигурационные файлы (*.conf) из данной директории автоматически подключаются в основной конфиг в секцию HTTP, проверить это вы можете открыв соответствующий файл:




nano /etc/nginx/nginx.conf




И найдя следующий код:




http {
...

   include /etc/nginx/conf.d/*.conf;
   include /etc/nginx/sites-enabled/*;
}




Таким образом вы сможете заблокировать или разрешить доступ ко всем сайтам, учитывая содержимое файла /etc/nginx/conf.d/ip_deny_to_all.conf




Таким образом вы можете составить несколько списков, в том числе и списки по странам (вместо использования NGINX GeoIP Module), взяв их, например, на одном из следующих сайтов:




https://www.countryipblocks.net/acl.php (может быть недоступен с ip адресов РФ и РБ)




http://ipverse.net/ipblocks/data/countries/xx.zone (пример: xxru)




Диапазоны IP-адресов по странам




Major IP Addresses Blocks By Country




На деле это редко когда может быть актуальным, т.к. тратит ресурсы сервера: канал и процессорное время и правильнее использовать блокировку при помощи ipset или iptables!









2022-06-30T03:09:51
Настройка web сервера

OpenVPN Client Configuration in Windows 10/11

OpenVPN is an excellent VPN solution for transmitting data securely over public network. Configuring an OpenVPN Server either on MikroTik RouterOS or Ubuntu Server, we can access local servers or devices from remote place using Windows 10/11, Android or MacOS. 




How to configure OpenVPN Server in Ubuntu Server was discussed in the previous article. In that article, I also discussed how to create a new OpenVPN client (for Windows OS) who will be able to connect the OpenVPN Server. So, in this article I am going to show how to install and configure OpenVPN client in Windows 10/11 and how to connect OpenVPN Server from this Windows Client PC.




Installing OpenVPN Client Software in Windows 10/11




OpenVPN Client Software for Windows 10/11 can be downloaded from OpenVPN’s download page. So, Go to OpenVPN’s Community Download Page and download the software that matches with your Operating System. For OpenVPN 2.5.7, the download option looks like the following image.



OpenVPN Download Options
OpenVPN Download Options



I will install OpenVPN client for Windows 10. So, I am downloading Windows 64-bit MSI installer.




After downloading installer package, install the software in your windows operating system. The software installation is as simple as installing other software in Windows Operating System.  






After OpenVPN client software installation, two OpenVPN network adapters will be installed like the following image. If these two adapters do not appear, OpenVPN client will not work.



OpenVPN Client Adapter
OpenVPN Client Adapter



After successful installation, you will find a OpenVPN GUI icon on your Desktop. Double click on it to run OpenVPN client. If OpenVPN GUI runs successfully, a small connection icon will be found in task bar or under hidden icons bar like the following image.



OpenVPN GUI
OpenVPN GUI



Click mouse right button on the OpenVPN GUI. First time it will ask to import the client config file that was generated while installing OpenVPN Server. If you yet don’t download the OpenVPN client config file from the Ubuntu Server where OpenVPN Server has been installed, download it and then import the config file.






As soon as the config file will be uploaded, it will ask to connect the client clicking the Connect option.  So, click the Connect option and if everything is OK, the OpenVPN connection will be established and the OpenVPN GUI icon will turn into green color.



Connected OpenVPN GUI
Connected OpenVPN GUI



You will also find the assigned IP address in your OpenVPN adapter if you keep mouse pointer on OpenVPN GUI or you can see IP information from Network and Sharing Center.




Note: If you try OpenVPN Server in your LAB or local environment, don’t forget to edit IP address in Client Config File because by default OpenVPN script will assigned public IP address. Otherwise, your test will be failure.




How to download and install OpenVPN client software in Windows 10/11 and how to configure OpenVPN client to connect OpenVPN Server have been discussed in this article. I hope you will now be able to install and configure OpenVPN client in Windows Operating System without any confusion. However, if you face any confusion, feel free to discuss in comment or contact me from Contact page. I will try my best to stay with you.



2022-06-29T20:20:17
MikroTik VPN Configuration with Winbox

KDE Plasma Mobile 22.06 уже выпущен, и это его новости

В выпуск новой версии KDE Plasma Mobile 22.06, в котором подготовлены изменения версии Plasma 5.25 и в который внесены довольно интересные улучшения.

Тем, кто не знаком с KDE Plasma Mobile, следует знать, что это платформа на базе мобильной версии настольного компьютера Plasma 5, библиотеки KDE Frameworks 5, телефонный стек Ofono и коммуникационный фреймворк Telepathy.



Читать

Firefox 102 выходит с улучшениями, исправлениями и многим другим

Firefox 69

объявление мозиллы недавно запуск новой версии вашего браузера Firefox 102 и с этим объявлением Mozilla воспользовалась возможностью, чтобы предоставить информацию о том, что Firefox 91, который является выпуском ESR (выпуск с расширенной поддержкой), выиграет от двух других крупных обновлений и больше не будет поддерживаться с 20 сентября 2022 года.

Начиная с этой даты, пользователи Firefox 91 автоматически обновятся до Firefox 102, новой версии ESR, которая заменит Firefox 91.





Читать

Thunderbird 102 выходит с новостями, улучшениями и многим другим

Mozilla выпущена недавно выпустили новую версию вашего почтового клиента Thunderbird 102, версия которой, как новость, команда Thunderbird объявляет о новой адресной книге, в дополнение к которой, среди прочего, она также совместима со спецификациями vCard.

Тем, кто не знает о Thunderbird, следует знать, что это это бесплатный почтовый клиент от Mozilla Foundation, который легко настраивается и настраивается, а также имеет множество функций. Этот клиент также доступ к файлам XML, фидам (Atom и RSS), он блокирует изображения, имеет встроенный антиспам-фильтр и механизм, предотвращающий мошенничество через сообщения.



Читать

Перевод сайтов на шифрованное подключение https/ssl. Получение сертификата от Let’s Encrypt и установка/настройка nginx. + автообновление при помощи certbot на Ubuntu 20.04 LTS в 2022 году

1. Устанавливаем certbot




Используем команду:




 apt install python3-certbot-nginx




Подтверждаем установку клавишей «Y» и «Enter«




Теперь Certbot установлен и готов к использованию, но, для того, чтобы он мог настроить SSL для Nginx, нам сперва необходимо проверить настройки Nginx.




2. Проверка настроек Nginx




Certbot должен иметь возможность найти корректный серверный блок в вашей конфигурации Nginx для того, чтобы автоматически конфигурировать SSL. Для этого он будет искать директиву server_name, которая совпадает с доменным именем, для которого вы запросите сертификат.




Если вы следовали инструкциям по настройке серверного блока в руководстве по установке Nginx, у вас должен быть серверный блок для вашего домена по адресу /etc/nginx/sites-available/example.com с уже правильно настроенной директивой server_name.




Для проверки откройте файл серверного блока в nano или любом другом текстовом редакторе:




 sudo nano /etc/nginx/sites-available/example.com 




Найдите строку с server_name. Она должна выглядеть следующим обр:




...
server_name example.com www.example.com;
...




Если она выглядит таким образом, закройте файл и переходите к следующему шагу.




Если она не выглядит так, как описано выше, обновите директиву server_name. Затем сохраните и закройте файл, после чего проверьте корректность синтаксиса вашего конфигурационного файла командой:




sudo nginx -t




Если вы получили ошибку, откройте файл серверного блока и проверьте его на наличие опечаток или пропущенных символов. После того, как ваш конфигурационный файл будет проходить проверку на корректность, перезагрузите Nginx для применения новой конфигурации:




sudo service nginx reload 




Теперь Certbot может находить и обновлять корректный серверный блок.




Далее обновим настройки файрвола для пропуска HTTPS трафика.




Настраиваем certbot:




sudo certbot certonly 




После чего вы увидите следующее сообщение:




Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
1: Nginx Web Server plugin - Alpha (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
Select the appropriate number [1-3] then [enter] (press 'c' to cancel):




Выбираем «3» (Place files in webroot directory (webroot)) вариант.




После чего нас попросят ввести наш e-mail. Она будет отображаться во всех установленных сертификатах:




your@eeee.mail




После этого вас просят прочитать соглашение и либо принять его или отклонить.




Согласшамся и нажимаем «A» -agree




После чего вас просят подписаться или не подписаться на рассылку от Let’s Encrypt:




Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights.
(Y)es/(N)o:




Согласшамся и нажимаем Y -yes или отказываемся и нажимаем N -no




После чего нас просят ввести домен/ы, разделенные запятыми, пробелами или /. Отказываемся, вписав «C«.




3. Получение сертификата для домена sitename.ru




certbot certonly -d sitename.ru -d www.sitename.ru




Последние версии certbot автоматически создают задание для
автообновления сертификатов по крону: /etc/cron.d/certbot либо с использованием системного таймера systemctl list-timers и создавать его самому не нужно!




Оригинал используемой статьи: https://www.digitalocean.com/community/tutorials/nginx-let-s-encrypt-ubuntu-18-04-ru




Проверить правильность настройки https можно на сайте: https://www.ssllabs.com/ssltest/index.html



2022-06-28T17:29:05
Настройка web сервера