nginx - это не только 10 килограммов веб серверов, но ещё и как все помним офигительный проксятник... Прилетела мне тут задачка - мониторить соединения которые стучатся на определённый tcp порт (а если понадобится, то и на udp)... Навскидку конечно можно проще простого - закрутить iptables с логированием да и делов, но вот nginx... Эта штука даёт куда больше воли в плане фантазии - к примеру редиректить соединения по условиям (скажем откуда кто пришёл, туда того и редиректить); можно прикрутить на 1 порт разнае редиректы/условия и т.д. и т.п. Но мне пока достаточно логировать соединения и в принципе на этом могу в последующем фигачить какие то графики (хочешь в модуле статистики самого nginx'a, хочешь прикручивай это дело к графане/zabbix и т.п.) и выстраивать какие то звонилки (а в некоторых случаях если угодно сразу банить козлов через прикрутку к fail2ban) в случае возникновения аномалий в работе тех или иных сервисов... Итак, собираю nginx...
sudo add-apt-repository -y ppa:nginx/development
sudo apt-get update
sudo apt-get install -y wget curl tmux unzip nginx
Далее создают конфиг для nginx'а (обычно пасутся /etc/nginx/conf.d или /etc/nginx/sites-[available/enabled])... примерно с таким содержанием (говорю же - мне пока достаточно...):
stream {
# Исключаем локальные (свои айпишники из логов)
map $remote_addr $log_ip {
"77.220.204.113" 0;
"77.220.204.114" 0;
default 1;
}
upstream strange_web_server {
server 10.20.20.10:8080;
}
upstream backup_server {
server 10.20.20.11:22;
}
# формат логов (если что необходимо, привинтить доп. переменные какие надо...
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/tcpproxy.log proxy if=$log_ip;
error_log /var/log/nginx/error-tcpproxy.log;
# Собственно слушаем на определённом айпишнике, на определённом порту ну и проксируемс...
server {
proxy_connect_timeout 60s;
listen 8.8.8.5:88;
proxy_pass strange_web_server;
}
server {
proxy_connect_timeout 60s;
listen 8.8.8.5:7722;
proxy_pass backup_server;
}
}
За сим всё... :)
Комментариев нет:
Отправить комментарий