- linux-notes.org
- UNIX / Linux : How to lock or disable an user account
- 1. Lock the password
- 2. Expire the user account
- 3. Changing the shell
- Verify if the account is locked or disabled.
- HowTo: Nginx Block User Agent
- How do I block multiple http user agents?
- Case insensitive blocking:
- See also:
- забанить по user agent
linux-notes.org
В nginx имеется довольно много способов блокировки нежелательного трафика. Вы можете использовать правила allow/deny или установить пароль на каталог. Вы также можете избавиться от плохих ботов и избежать нападения от HTTP пользовательских агентов с GET или POST-запросов. Ниже приведены некоторые примеры защиты сайтов от распространенных незаконных подключений.
Что такое агент пользователя?
Агент пользователя (от анг яз user agent, UA) просто текстовая строка, которая помогает серверу и системе производить идентификацию браузера и операционной системы используемый клиентом.
Когда вы просматриваете веб-сайт, ваш браузер включает в себя поле пользовательского агента в его заголовке HTTP. Содержимое строки агента пользователя может варьироваться от браузера и ОС.
И в своей теме «Заблокировать User Agents используя Nginx» я расскажу как можно заблокировать UA используя nginx.
Зачем вам нужно знать информацию агента пользователя?
User agents являются хорошим способом блокировки распространенных атак против вашего сервера. И атак приступим, открываем конфигурационный файл самого nginx или виртуальный хост вашего сайта:
Внутри секции HTTP<> прописываем:
Тем самым, я заблокировал старые браузеры операционной системы (Windows 95 и 98) блокируются, так же, я заблокировал запросы с Wget, Curl и Libwww-Perl (используются для попадания на сервер удаленно). Есть много других ботов и инструментов для блокирования; это просто элементарный пример.
Имеются и пустые агенты, то для того чтобы заблокировать его, можно использовать (так же прописываем в конфиге nginx):
После чего, проверяем содержимое переменной «a» и если условие верно, я отдаю ошибку 403 всем пользователям, у кого наблюдается сочетание метода POST и пустого User-Agent:
После чего, нужно перезапустить nginx:
Проверяем что получилось:
- http://linux-notes.org/ — Это мой сайт и на нем я тестировал, вы меняете на свой домен (IP).
- malicious bot — Это имя агента который будет проверятся на доступность.
Некоторые заблокированные мной боты и user-agent
На этом все, я завершаю свою статью «Заблокировать User Agents используя Nginx».
Источник
UNIX / Linux : How to lock or disable an user account
There are several ways in which user account can be locked or disabled. The posts discusses few of the most widely used ways.
1. Lock the password
To lock a users account use the command usermod -L or passwd -l. Both the commands adds an exclamation mark (“!”) in the second field of the file /etc/passwd. For example :
2. Expire the user account
The commands passwd -l and usermod -L are ineffcient when it comes to disable/lock user accounts. These commands will not disallow authentication by SSH public keys (or other PAM modules other than pam_unix that may be enabled). Additionally, changing the shell to /bin/false or /sbin/nologin is unsatisfactory to us since this only affects interactive logins. So to completely disable user accounts you can user the command chage -E0. For example :
Expiring an account via use of the 8th field in /etc/shadow (using “chage -E”) will block all access methods that use PAM to authenticate a user.
3. Changing the shell
We can also change the default shell of the user to /sbin/nologin so that the user do not get any login shell when he tries to login into the system.
You can check for the 7th and last field in /etc/passwd for the change of shell to /sbin/nologin.
Verify if the account is locked or disabled.
For each of the methods described above, you can verify if the user account is locked/disabled using below methods.
1. Check if the user account is locked.
Check for the flag *LK* in the below command output which indicates that the account is locked.
2. Check if the account has an expire date.
Check for the lines Password expires and Account expires to check if the account password is expired.
3. Check for non-interactive shell
Check if the user shell has been changed to a non-interactive shell like /sbin/nologin.
Источник
HowTo: Nginx Block User Agent
H ow do I block a http user agent or a software agent using Nginx web server under Linux or Unix like operating systems?
You can block any http user agents with GET / POST requests that scrape your content or try to exploit software vulnerability. Use the following syntax. Edit /usr/local/nginx/conf/nginx.conf file, enter:
# vi /usr/local/nginx/conf/nginx.conf
In this example, block http user agent called wget:
Save and close the file. Reload nginx web server, enter:
# service nginx reload
OR
# /usr/local/nginx/sbin/nginx -s reload
How do I block multiple http user agents?
Use the following syntax:
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
Case insensitive blocking:
Please note the
* makes it case insensitive as opposed to just a
See also:
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
How do you put another condition instead of return? can you deny all and only allow a certain ip/subnet with those user agents to go through?
How do you put another condition instead of return? can you deny all and only allow a certain ip/subnet with those user agents to go through? any example?
i get the following error : “nginx: [emerg] “if” directive is not allowed here in /etc/nginx/nginx.conf:”
any thoughts?
You need to make sure your if statement is in the server block.
Thanks Nigel, that did the trick.
its working perfectly now.
What is server block meaning ?
I got the same problem nginx: [emerg] “if” directive is not allowed here
Question, is how to block a block that spoofs its user-agent, where it’s clear that the user agent is spoofed by the Comments token.
i.e. the following user-agent string:
“Mozilla/5.0 (compatible; ACHE/Unknown Version; +https://github.com/ViDA-NYU/ache; )”
Where we don’t want to be blocking by Mozilla/5.0, but rather want to be blocking by the entire string. (i.e. how to make the instruction look for “ACHE/Unknown Version” within the comments token of the user string.)
Thats the real question, what’s the point of blocking useragent when every bot uses Mozilla/5.0, and after that some random shi.t
Even we block http agent here (in my case its Jorgee) ,
how can we deny it, even without returning 403 for the request.
403 is denying it. It won’t able to do anything else on your server.
Источник
забанить по user agent
есть вдс, стоит isp manager как глобально забанить хосты по заданному user agent? желательно как в firewall, но там только ип можно указать
Если есть доступ непосредственно к консоли, то может помочь:
Рискну предположить, что однокнопочного решения нет.
Потому что, по любому сначала необходимо установить соединение, а потом только у удаленной машины спрашивать ее uaId. Так что сразу «глобально» массово запретить все соединения с определенным uaId не получится.
Вопрос, так ли нужно это.
вот что ответило- iptables: No chain/target/match by that name
хочу отсечь ботов, по ип баню но лезут новые, а юзер агент у всех одинаковый
Можно в .htaccess, как вариант.
можно, но хочу отсечь на более ранней стадии, чтобы меньше нагрузка плюс хочу не просто отсечь а сделать drop
Видимо не подгружен соответствующий модуль для такой фильтрации. Думаю, если погуглить, можно быстро найти что нужно загрузить дополнительно.
погуглил, пишут что нужно пересобирать iptables или вобще ядро целиком
ну так и в чём проблема?
ну так пересобери.
слишком сложно для меня
я так понимаю бан на уровне htaccess все равно будет создавать нагрузку на проц? в логах запрос проходит с ответом 403
htaccess да, будет создавать нагрузку, т.к ее парсит апач. чтобы конекты не доходили до апача, можно впереди поставить nginx и написать правило
http://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-nginx-block-user-agent/
файла /usr/local/nginx/conf/nginx.conf нету на вдс, зато есть в /etc/nginx/nginx.conf , это оно?
ну вообще-то да. но nginx нужно еще настроить, чтобы он слушал твой внешний айпи, а apache перенастроить, чтобы слушал внутренний. ну и соответственно сделать в nginx отдельный virtualhost для твоего сайта, настроить там проксирование и вписать твои правила для юзерагентов. короче в гугле полным полно howto, заточенных даже под разные дистрибутивы.
тот howto что я тебе скинул, видимо заточен под freebsd.
у меня nginx установлен и работает, или нужно еще шаманить? я тут почитал, оказывается нужно прописывать правило бана для каждой секции server, сразу для всех сайтов нельзя?
нельзя как видишь.
Боты нынче и гуглом подписываются, мне кажется это очень костыльное решение.
у гугла не так много диапазонов айпи, и они все известны. их можно добавить в исключение.
Можно, тогда задача поставлена неного неверно.
Если есть возможность поставить nginx впереди, то вот статейка для блокировки по USER_AGENT
Есть ещё такой вариант: парсить логи на предмет выявления какие IP засветились с целевым UserAgent-ом и добавлять эти IP в ipset который уже банить тупо фаерволом.
Лог парсится элементарно в одну команду (что-то вроде tailf ./access.log | grep ‘evil-useragent’ | cut -d ‘ ‘ -f 1). Фильтрация по ipset-у работает весьма быстро.
Пул адресов у ботнета едва-ли какой-то непомерный. Подделывать их в случае атаки прикладного уровня по tcp не получится, так-что достаточно быстро перебанишь всех. Если процесс автоматизировать то каждый бот успеет сделать всего по несколько запросов, что не фатально.
Некий набор общих правил можно вынести в отдельный конфиг и подключать его внутри каждого server через include.
парсить логи на предмет выявления какие IP засветились с целевым UserAgent-ом и добавлять эти IP в ipset который уже банить тупо фаерволом
Изобретение называется Fail2ban.
Кого будешь банить, вендоузятнегов?
Что-то мне кажется что на настройку Fail2ban уйдёт больше времени чем на построение такого костыля. Ведь буквально одна строчка в cron-е.
А из одной подсети или из разных?
Что-то мне кажется что на настройку Fail2ban уйдёт больше времени чем на построение такого костыля
Очень много времени. Целых 5 минут, чтобы добавить несколько строчек в пару конфигов.
А велосипед всё-равно быстрее.
Чёткие поцаны обычно DDoSят с ботнета (во всяком случае на прикладном уровне), так-что скорее всего из разных.
Правда совсем чёткие поцаны ещё и юзерагент рандомизируют.
htaccess да, будет создавать нагрузку, т.к ее парсит апач
Тормозит там даже не парсинг, а опрос дерева каталогов на каждом запросе. .htaccess — сильно зло, мириться с которым можно только на низких загрузках.
Пул адресов у ботнета едва-ли какой-то непомерный
Когда меня первый раз DDoSили, компов было дофига, но всего пара десятков подсетей, справился вручную. Вот второй раз была жесть. Когда атакующих IP набралось тысячи четыре и все из мелких подсетей, пришлось просто забить на них, подсовывая мелкую статику по атакуемым url (благо, их было немного).
Четыре тысячи IP адресов при быстрой автоматической блокировке это где-то 8 — 16 тысяч запросов, что не так уж непомерно.
Четыре тысячи IP адресов при быстрой автоматической блокировке
Проблема была в том, что однозначно (как тут с UA) атакующие не детектировались. Приходилось вычислять индивидуально по частым запросам к конкретным тяжёлым ресурсам и по отсутствию загрузки картинок. Так что методы пополнения чёрных списков были полуавтоматические и с какого-то времени возиться с этим надоело. Плюс атакующий контролировал ботнет и менял методы атаки «по живому», после того, как старые методы купировались. Вообще, интересная война была, больше недели с разной, но всё затухающей интенсивностью, 4 или 5 крупных атак. 🙂 Потом пошли всякие грязные мелочи, типа жалоб Гуглу Адсенсу на страницы форума со ссылками на торренты или где обнажённая натура была. Раза три отрубали рекламу. С учётом ещё совершенно идиотской политики Гугла в плане обратной связи было очень неприятно.
Источник