Если Вам довелось обслуживать сервер или VPS, на котором размещается множество сайтов и сайты эти принадлежат разным людям или компаниям, есть смысл, а скорее даже необходимость разграничивать права и уровни доступа владельцам этих сайтов.
Даже, если все сайты Ваши — лучше для каждого сайта или домена создать отдельного пользователя.
Так, если используется PHP в режиме CGI/FastCGI каждому пользователю можно создать свой php.ini, в случае взлома одного из сайтов остальные останутся в безопасности, ведь скрипты зараженного сайта не получат доступ к «чистым» сайтам.
Но этого мало. До тех пор, пока не будет найдена и устранена уязвимость, нужно максимально обезопаситься от негативных последствий взлома, но при этом, сохранить работу сайтов на время лечения.
Если оставить все как есть на время разбирательств — злоумышленник отправит с Вашего сайта сотни или даже тысячи писем, сможет использовать Ваши ресурсы для атак или брутфорса, а это чревато попаданием во всяческие блек и спам листы.
Выход есть — блокировка исходящих соединений с помощью IPTables.
Почти все примеры и руководства упоминают о закрытии отдельного порта или исходящего трафика в целом на сервере, но у нас ведь там не один пользователь и есть «чистые сайты», так что это не выход.
Итак, с помощью дополнительного флага
-m owner —uid-owner имя пользователя или ID мы можем закрыть порты определенному пользователю.
Как известно, чем больше правил в iptables, тем медленнее работа сервера. Так что порты можно закрыть в одно правило, несколькими способами:
iptables -A OUTPUT -p tcp -m tcp —source-port 1:65534 -m owner —uid-owner username -j DROP
В этом примере блокируется диапазон портов с 1-го по 65534-й (65535-й я по доброте душевной оставил открытым).
или же
iptables -A OUTPUT -p tcp -m multiport —port 21,22,25,80,81,443 -m owner —uid-owner username -j DROP
тут мы блокируем пользователю непоследовательный ряд портов.