Показать полную графическую версию : Запрет SSH к серверам, кроме как с определённых IP.
Можно каким скриптом сделать? Серверы разные, в основном, CentOS и Ubuntu разных версий. IP должны браться из файла.
ПС: сам не линуксоид, так, на уровне пользователя.
Jula0071
14-12-2017, 20:37
Это называется настройка брандмауэра. В любом линуксе он есть - iptables, да, синтакс непонятен для новичка, но есть обёртки, упрощающие настройку. Например в убунте - ufw.
Лично я предпочитаю обёртку FireHOL. IP должны браться из файла. »
ipset лучше.
Jula0071, Я понимаю, но требуется централизованно на нескольких сотнях серверов это распространить с помощью скрипта.
Jula0071
14-12-2017, 20:46
Распространяйте себе на здоровье. Кстати, чем, puppet?
Jula0071, Пока не суть чем. Сначала скрипт надо придумать, а я в линуксовое программирование ни в зуб ногой. Возможно, с виндового сервера plink'ом из vbs-скрипта.
Jula0071
14-12-2017, 20:54
Пока не суть чем. »
Ой как всё плохо. Я правильно понял, что как централизованно на нескольких сотнях серверов это распространить » вы ещё даже не думали?
а я в линуксовое программирование ни в зуб ногой »
Программирование от платформы не зависит. Да и вопрос не о программировании, а тупо применить на сотнях серверов определённые настройки.
Возможно, с виндового сервера plink'ом из vbs-скрипта. »
Божечки...
Jula0071, "вы ещё даже не думали? "
Это второй вопрос. ))
Пока мне бы придумать какой-нить перловый или баш-скрипт, который делал это хотя бы для одного сервера.
Возможно, у кого-то есть готовые решения, которые я смогу переделать под себя, в программировании ВООБЩЕ разбираюсь, понять код скрипта на незнакомом языке смогу.
"Божечки..."
А что не так? ))
Еще раз говорю - я не линуксоид ни разу.
Jula0071
14-12-2017, 21:13
Еще раз говорю - я не линуксоид ни разу. »
Ещё раз, то, про что вы говорите - применение настроек на сотнях серверов - универсально. Не сильно зависит от ОС.
Для этого есть инструменты, относящиеся к Software configuration management, один из них - Puppet (https://en.wikipedia.org/wiki/Puppet_(software)). Есть ещё Rex, Foreman, короче, десятки их. Изучите хоть тот же паппет и вам станет хорошо.
Jula0071, ОК. Переформулирую вопрос. Есть 1 (ОДИН) сервер с убунтой или центос. Нужен скрипт или командный сценарий, который брал бы из текстового файла список IP-адресов (порядка 100 штук) и разрешал бы коннект на 22 порт только с этих адресов, с других запрещал бы.
Jula0071
14-12-2017, 22:04
Предполагая, что policy ACCEPT:
for i in $( cat /tmp/allowed_ssh_ip.txt ) ; do ipset -A ALLOWED_SSH $i ; done
iptables -I INPUT -p tcp -m multiport ––dport 22 -m set ––match-set ALLOWED_SSH src -j ACCEPT
iptables -I INPUT -p tcp -m multiport ––dport 22 -m set ! ––match-set ALLOWED_SSH src -j DROP
Учтите, тут нет никаких проверок от автозабана, лучше пользоваться обвязками. Правила не проверял, они только для примера.
Jula0071, принцип понятен, спасибо. Поясните, что такое автозабан и обвязки, плз.
Jula0071
14-12-2017, 22:36
Всё же решил проверить, поднял лабу.
root@lv70002:/home/test# cat /tmp/allowed_ssh_ip.txt
10.40.8.2/32
root@lv70002:/home/test# cat ./fw.sh
#!/bin/bash
ipset create ALLOWED_SSH hash:ip
for i in $( cat /tmp/allowed_ssh_ip.txt ) ; do ipset -A ALLOWED_SSH $i ; done
iptables -A INPUT -p tcp --dport 22 -m set --match-set ALLOWED_SSH src -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m set ! --match-set ALLOWED_SSH src -j DROP
root@lv70002:/home/test# ipset list
Name: ALLOWED_SSH
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 176
References: 2
Members:
10.40.8.2
root@lv70002:/home/test# iptables -nvL
Chain INPUT (policy ACCEPT 3 packets, 397 bytes)
pkts bytes target prot opt in out source destination
212 14756 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 match-set ALLOWED_SSH src
2 120 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ! match-set ALLOWED_SSH src
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 117 packets, 13900 bytes)
pkts bytes target prot opt in out source destination
Автозабан - это когда вы по ошибке включаете запрещающее правило, которое отключает вас от машины. Про обвязки я уже говорил выше.
Jula0071, вроде все понятно, буду пробовать.
Jula0071
14-12-2017, 22:48
glukin, не забывайте, что это только пример, если у вас уже есть на серверах правила iptables, то скрипт всё поломает.
Jula0071, А нельзя сделать так, чтобы он добавлял правила, а не перезаписывал?
Jula0071
14-12-2017, 23:02
glukin, ну тут он как раз добавляет. Но мало ли что там у вас. Нужно подходить творчески. Ещё раз про обвязки - есть скрипты обвязки для iptables, уже называл выше, я пользуюсь FireHOL. В чём плюс - синтакс гораздо более human readable, во-первых, во-вторых есть защита от дурака с автозабаном. Отредактировал я конфиг, сказал firehol try, всё заглохло - автозабанился. Но не беда, он через 30 секунд откатится на предыдущую версию конфига. Ну и 2000+ правил ручками рисовать синтаксом iptables увольте...
Jula0071, автозабан, я думаю, не проблема, есть доступ к консоли вмвари. Там же не забанится локалхост?
Jula0071
14-12-2017, 23:09
автозабан, я думаю, не проблема, есть доступ к консоли вмвари. Там же не забанится локалхост? »
Не локалхост, но не забанится. :)
Jula0071, ну да-да, это я пошутить попытался. ))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.