0) первоначальные настройки ufw и ipset
1) скрипт добавления ключа ssh
2) 2fa google auth для определенных подьзователей (in progress)
3) syslog(in progress)
4) системы анализа (lynis) (in progress)
5) ids (portsentry)
6) postfix (in progress)
7) смотрим дебажим (fatrace) (in progress)
0) первоначальные настройки ufw и ipset
Первоначально у меня настроен ipset c несколькими списками так как перевалило за 65к хостов пришлось увеличить размерность/etc/iptables/ipset.up.rules.all
create dropipsall hash:ip family inet hashsize 16384 maxelem 208516
/etc/iptables/ipset.up.rules.mail
create dropipsmail hash:ip family inet hashsize 16384 maxelem 208516
/etc/iptables/ipset.up.rules.ssh
create dropipsssh hash:ip family inet hashsize 16384 maxelem 208516
/etc/iptables/ipset.up.rules.web
create dropipsweb hash:ip family inet hashsize 16384 maxelem 208516
/etc/iptables/ipset.rules
create dropips hash:ip family inet hashsize 16384 maxelem 208516
скрипт создания списков: (ipsetfistcreate.sh)
#!/bin/sh ipset restore -! < /etc/iptables/ipset.up.rules.all ipset restore -! < /etc/iptables/ipset.up.rules.mail ipset restore -! < /etc/iptables/ipset.up.rules.web ipset restore -! < /etc/iptables/ipset.up.rules.ssh
#!/bin/sh ipset save dropipsall> /etc/iptables/ipset.up.rules.all ipset save dropipsmail> /etc/iptables/ipset.up.rules.mail ipset save dropipsssh> /etc/iptables/ipset.up.rules.ssh ipset save dropipsweb> /etc/iptables/ipset.up.rules.web ipset save dropips> /etc/iptables/ipset.rules
-A INPUT -m set --match-set dropipsall src -j DROP -A INPUT -m set --match-set dropipsssh src -p tcp -m multiport --dports 1052 -j DROP -A INPUT -m set --match-set dropipsmail src -p tcp -m multiport --dports 25,110,222,465,587,143,993,995,80,443 -j DROP -A INPUT -m set --match-set dropipsweb src -j DROP
.... # allow all on loopback -A ufw-before-input -i lo -j ACCEPT -A ufw-before-output -o lo -j ACCEPT -A ufw-before-input -m set --match-set dropipsall src -j DROP -A ufw-before-input -m set --match-set dropipsssh src -p tcp -m multiport --dports 222 -j DROP -A ufw-before-input -m set --match-set dropipsmail src -p tcp -m multiport --dports 25,110,222,465,587,143,993,995,80,443 -j DROP -A ufw-before-input -m set --match-set dropipsweb src -j DROP
[Unit] Description=ipset persistent configuration Before=network.target # ipset sets should be loaded before iptables # Because creating iptables rules with names of non-existent sets is not possible Before=netfilter-persistent.service Before=ufw.service ConditionFileNotEmpty=/etc/iptables/ipset [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ipset restore -exist -file /etc/iptables/ipset # Uncomment to save changed sets on reboot # ExecStop=/sbin/ipset save -file /etc/iptables/ipset ExecStop=/sbin/ipset flush ExecStopPost=/sbin/ipset destroy [Install] WantedBy=multi-user.target RequiredBy=netfilter-persistent.service RequiredBy=ufw.service
1) скрипт добавления ключа ssh
#/bin/sh cd /root mkdir .ssh chmod 700 .ssh cd .ssh touch authorized_keys chmod 600 authorized_keys echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABM= yabloko@mac-book' >>authorized_keys
3) syslog(in progress)
Первоначльно уберем сообщения от cron в auth. Не знаю как кого а меня они бесят:
*.*;auth,authpriv.none,cron.none -/var/log/sys/syslog kern.* -/var/log/sys/syskern.log mail.* -/var/log/sys/sysmail.log mail.err /var/log/sys/mail.err :msg, contains, "pam_unix(cron:session)" stop auth,authpriv.* /var/log/auth.log #:programname, isequal, "CRON" stop #auth,authpriv.* /var/log/auth.log *.emerg :omusrmsg:* auth,authpriv.* /var/log/sys/auth.log
5) ids (portsentry)
portsentry показала достаточно хорошо от всякого рода кулхацкеров. Логика такая, открываются порты, которые слушает демон portsentry. При стучании на эти порты выполняется скрипт который прописан в конфиге. Перевешиваем стандартный ssh на нестандартный порт, и все что будет пробывать ломится на стандартный ssh блокируем фаерволом. Какие бы я порты блокировал из tcp 1,7 - echo txpmux
21,23 фтп и телнет
389 и 636- лдап
2049 - nfs
3128 - прокси (если нету)
3389 - rdd
4899 - radmin
5222 -jabber
5432 - postgres
10050,10051 - zabbix
из udp брал из конфига (все равно нифига не блокирует)UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"
apt-get install portsentry
добавляем в конфиг или меняем (а то что есть комментируем):
TCP_PORTS="1,7,21,23,389,636,2049,3128,3389,4899,5222,5432,10050,10051"
UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,32773,32774,31337,54321"
RESOLVE_HOST = "1" BLOCK_UDP="1" BLOCK_TCP="1" KILL_ROUTE="/sbin/ipset -A dropipsall $TARGET$" KILL_RUN_CMD="/etc/portsentry/scan_port_mail.sh $TARGET$ $PORT$ $MODE$"
если забудете отключить прибивание маршрута то удалить из маршрутов можно коммандой: route del -host ip-address reject
У меня все эти блокировки пишется в таблицу mysql (если вдруг списки потеряются чтобы восстановить можно было) и в файл /var/log/block.log
scan_port_mail.sh
#!/bin/sh main_e_mail="mysqcretmail@arti.pp.ua" attak_date="`date +%Y-%m-%d`" attak_time="`date +%H:%M:%S`" local_mashine="`uname -n`" TODAY=`date +%Y%m%d` hacker_IP=$1 scanned_port=$2 hacker_DNS=`host ${hacker_IP} | awk '{print $5}'` #echo " обнаружена попытка сканирования . #Имя машины: ${local_mashine} #Отсканенные порты: ${scanned_port} # #Прикрепляем данные атакующего: #IP: ${hacker_IP} #DNS: ${hacker_DNS} #======= #Атака заблокирована(). #" | mail -s port_scanned_on_${local_mashine} ${main_e_mail} RES=`mysql -u fail2ban -p2ban -D fail2ban -N -B -e "select ban_host_ip('${hacker_IP}','ADD','HAND_PORTSENTRY','SCAN:${scanned_port}');"` if [ $RES = "-1" ]; then echo $RES else echo "DROP ${hacker_IP}" block=`/sbin/ipset -A dropipsall ${hacker_IP}` echo 'block' echo "$TODAY portsentry DROP ${hacker_IP} " >> /var/log/block.log fi
/etc/ufw/applications.d/portsentry
[portsentry] title=IPS portsentry description=port for blocking ports=1/tcp|7/tcp|21/tcp|23/tcp|389/tcp|636/tcp|2049/tcp|3128/tcp|3389/tcp|4899/tcp|5222/tcp|5432/tcp|10050/tcp|10051/tcp|1/tcp|7/tcp|9/tcp|69/tcp|161/tcp|162/tcp|513/tcp|640/tcp|700/tcp|32770/tcp|32771/tcp|32772/tcp|32773/tcp|32774/tcp|31337/tcp|54321/udp
ufw allow portsentry
Комментариев нет :
Отправить комментарий