Показаны сообщения с ярлыком сетевое администрирование. Показать все сообщения
Показаны сообщения с ярлыком сетевое администрирование. Показать все сообщения

пятница, 19 марта 2021 г.

Блокировка "плохих" ip адресов через список blocklist.de

 Собственно на машинке помимо iptables нужно поставить ipset, а далее скрипт, который запихать в крон: 

#!/bin/bash
cd /opt/blackips/
rm tempips.txt -rf
if wget https://www.blocklist.de/downloads/export-ips_all.txt -O tempips.txt
then
iptables -D FORWARD -m set --match-set blacklist src -j DROP
iptables -D INPUT -m set --match-set blacklist src -j DROP
iptables -D FORWARD -m set --match-set blacklist src -j DROP
ipset destroy blacklist
#ipset create blacklist hash:ip hashsize 1227600
ipset create blacklist hash:net family inet hashsize 32768 maxelem 300000
iptables -I FORWARD -m set --match-set blacklist src -j DROP
iptables -I INPUT -m set --match-set blacklist src -j DROP
iptables -I FORWARD -m set --match-set blacklist src -j DROP
while read -r line; do
if [[ $line =~ .*:.* ]];
then
  echo "IPv6"
else
  ipset add blacklist "$line";
fi
done < tempips.txt
rm tempips.txt -rf
else
echo 'Error! Can not download black list of ip addresses!'
fi
 

суббота, 10 октября 2020 г.

Скрипт для проверки на ответ от DNS серверов на запрос об определённом домене с отсылкой в случае успешного результата в telegram

 Предположим мы только что прописали новый домен (предположим A запись) на каких-либо NS серверах и мы хотим проверять определённые dns серверы через определённый промежуток времени на ответ по нашему запросу на наш новый домен и если проверяемый dns сервер отдаст нам в результатах нами прописаный ip-адрес, который припаркован к нашему новому домену - нам прилетало бы уведомление в телеграм. Пишем на bash'е, если что понадобится dig, curl. Также понадобится (если ещё не заведён) завести себе бота в телеграме через @BotFather...

#!/bin/bash
# Created by Constantine in 2020
# $1 - domain for check
# $2 - dns server
# $3 - check ip address
# $4 - timeout between dns quireies in seconds
# here example for launch: ./checkdns.sh domain.tld 8.8.8.8 44.55.55.5 10
 
telegram_bot_id='krewpo2k3r5p253tewreqe3124234324235245345ds'
telegram_chat_id='34534534534'
telegram_message="Domain $1 has been found and now available by dns response from $2. Domain ip address is: $3"
 
 
while true; do
    if dig -t a $1 $2 | grep -q $3; then
        echo found
        curl -s -X POST https://api.telegram.org/bot$telegram_bot_id/sendMessage -d chat_id=$telegram_chat_id -d text="$telegram_message"
        exit 1
    else
        echo not found
    fi
    sleep $4
done

Пример запуска: ./checkdns.sh domain.tld 8.8.8.8 44.55.55.5 10

Теперь скрипт каждые 10 секунд будет делать запрос и в случае положительного результата нам прилетит в телегу:

Domain domain.tld has been found and now available by dns response from 8.8.8.8. Domain ip address is: 44.55.55.5

 

четверг, 30 апреля 2020 г.

Мониторинг интерфейсов mikrotik с помощью mikrotik api, telegraf и grafana

 С чего началось... Меня попросили запилить мониторинг за народом, коий подключается по vpn к офису с использованием pptp (кто когда подключался, кто сколько прокачивал...). Самый первый и очевидный способ - полезть в snmp, да и запилить на нём, НО... Это же тебе надо знать заранее oid каждого интерфейса, а если мы говорим про vpn, то интерфейсы динамические... Вот заводишь ты новый vpn для кого то и потом его в мониторинге прописывать, нафиг... Гемор одним словом... А что если сделать так, чтобы в мониторинг всё попадало автоматом...
 


воскресенье, 26 апреля 2020 г.

nginx проксирование tcp/udp соединений

 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;
    }


}


За сим всё... :)

пятница, 29 ноября 2019 г.

Блокирование гадов в iptables по подписке



Пока копался в интернетах на тему блок листов всяких, я нашёл один хороший чёрный список всяких гадов, кои сканируют ресурсы и напичканы всякими плохими ботами. Список этот обновляется регулярно и поставляется любезно в виде списка правил для операционки routerOS. Но тут мне понадобилось получить ровно такой же функционал и на машинках под управлением обычных дистрибутивов GNU Linux. Оговорюсь сразу, что это можно/лучше проделывать на машинках, у которых есть хороший запас по cpu и памяти. Итак, я ставлю для начала на машинку пакет ipset:

sudo apt install ipset

Я написал короткий bash-скрипт, который положил в /opt/blackips/block-black-ips.sh (Будем блочить ТОЛЬКО IPv4):

#!/bin/bash
cd /opt/blackips/
rm drop.malicious.rsc -rf
if wget https://www.squidblacklist.org/downloads/drop.malicious.rsc -O drop.malicious.rsc
then
iptables -D FORWARD -m set --match-set blacklist src -j DROP
iptables -D INPUT -m set --match-set blacklist src -j DROP
iptables -D FORWARD -m set --match-set blacklist src -j DROP
ipset destroy blacklist
#ipset create blacklist hash:ip hashsize 1227600
ipset create blacklist hash:net family inet hashsize 32768 maxelem 300000
iptables -I FORWARD -m set --match-set blacklist src -j DROP
iptables -I INPUT -m set --match-set blacklist src -j DROP
iptables -I FORWARD -m set --match-set blacklist src -j DROP
cat drop.malicious.rsc | grep address= | awk '{print $8}' | sed 's/address=//' > tempips.txt
while read -r line; do
if [[ $line =~ .*:.* ]];
then
  echo "IPv6"
else
  ipset add blacklist "$line";
fi
done < tempips.txt
rm tempips.txt -rf
else
echo 'Error! Can not download black list of ip addresses!'
fi


Теперь добавим его в cron (sudo crontab -e):

# download black list of bad ip's and put them into iptables rules for DROP action
*/12 * * * * /opt/blackips/block-black-ips.sh

вторник, 30 апреля 2019 г.

Линуксоиды Кыргызстана в 2019 году или как дела в целом в наших Интернетах...

Мы провели ряд опросов в нашей группе Linux User Group (LUG) в телеграмме, на основе которых получились интересные выводы, которые собственно тут выкладываю... На текущий момент у нас в чате зарегистрировано 246 человек, активных из них примерно 40-50... Результаты напишемс в конце...

1. Как вообще народ относится к своему Интернет-провайдеру...


На сколько вы довольны работой своего Интернет-провайдера?
Anonymous Poll

24%
Всё отлично

69%
Иногда бывают косяки, но в целом устраивает

7%
Всё плохо, надо сваливать на другого...

среда, 9 января 2019 г.

Включаем поддержку NFS в LXC контейнерах Proxmox 5.3

На стороне гипервизора выполнить (обращаем внимание на название директивы - profile lxc-container-default-cgns):
nano /etc/apparmor.d/lxc/lxc-default-cgns

# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc
 
profile lxc-container-default-cgns flags=(attach_disconnected,mediate_deleted) {
  #include 
 
  # the container may never be allowed to mount devpts.  If it does, it
  # will remount the host's devpts.  We could allow it to do it with
  # the newinstance option (but, right now, we don't).
  deny mount fstype=devpts,
  mount fstype=cgroup -> /sys/fs/cgroup/**,
  mount fstype=cgroup2 -> /sys/fs/cgroup/**,
  mount fstype=nfs,
  mount fstype=nfs4,
  mount fstype=nfsd,
  mount fstype=rpc_pipefs,
}
Далее для необходимого контейнера (где нужна поддержка nfs) подправить конфиг машинки (nano /etc/pve/lxc/{container-num}.conf):

lxc.apparmor.profile: lxc-container-default-cgns
После чего релоудим apparmor и перезапускаем контейнер:

systemctl restart apparmor.service && pct stop {container-num} 
&& pct start {container-num}
Уауля! Теперь можно  что ставить nfs сервер в контейнер, что монтировать какие то nfs поинты...