Я использую Linux на экземпляре t1.micro в Amazon EC2. Как только я заметил попытки входа в систему через bruteforce ssh с определенного IP-адреса, после небольшого поиска в Google я выполнил две следующие команды (другой IP-адрес):
iptables -A INPUT -s 202.54.20.22 -j DROP
iptables -A OUTPUT -d 202.54.20.22 -j DROP
Либо это, либо другие действия, например yum upgrade
Возможно, это привело к следующему фиаско: после перезагрузки сервера он вышел без сетевого интерфейса!
Я могу подключиться к нему только через SSH-клиент JAVA Консоли управления AWS - через локальный адрес 10.x.x.x.
Консоли Attach Network Interface
так же как Detach..
для этого экземпляра выделены серым цветом.
Network Interfaces
элемент слева не предлагает никаких подсетей на выбор, чтобы создать новый N.I.
Посоветуйте, пожалуйста, как я могу воссоздать сетевой интерфейс для экземпляра?
Upd. Экземпляр недоступен извне: его нельзя пинговать, подключать по SSH или подключаться по HTTP через порт 80.
Вот ifconfig
вывод:
eth0 Link encap:Ethernet HWaddr 12:31:39:0A:5E:06
inet addr:10.211.93.240 Bcast:10.211.93.255 Mask:255.255.255.0
inet6 addr: fe80::1031:39ff:fe0a:5e06/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1426 errors:0 dropped:0 overruns:0 frame:0
TX packets:1371 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:152085 (148.5 KiB) TX bytes:208852 (203.9 KiB)
Interrupt:25
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Что еще необычно: новый микро-экземпляр, который я создал с нуля, не имеющий отношения к проблемному, тоже не пинговался.
Экземпляры EC2 имеют единый интерфейс - eth0. Этот интерфейс сопоставлен с частным IP-адресом вашего экземпляра и не может быть отключен от экземпляра. (Конечно, вы можете отключить интерфейс, но это функция операционной системы, а не AWS).
Единственный случай, когда вы можете подключать / отсоединять сетевые интерфейсы, - это если ваш экземпляр работает в виртуальном частном облаке (VPC). Такие экземпляры поддерживают несколько интерфейсов.
Поскольку у экземпляра есть только один сетевой интерфейс, тот факт, что вы можете подключиться к нему - даже если это только через консоль AWS - предполагает, что интерфейс все еще существует и работает (запись «Сетевой интерфейс» в AWS запись в консоли заполняется только для экземпляров VPC). Стоит отметить, что общедоступный IP-адрес экземпляра изменится, когда экземпляр будет остановлен и запущен (хотя «перезагрузка» не должна влиять на это). Эластичные IP-адреса могут использоваться для предоставления «статического» IP-адреса. Общедоступный IP-адрес (динамический или «эластичный») напрямую не связан с интерфейсом, скорее, сеть EC2 преобразует общедоступный адрес в частный через NAT.
Поскольку у вас по-прежнему есть SSH-доступ к экземпляру, вы можете подтвердить, что интерфейс работает, посмотрев запись eth0 в выходных данных ifconfig
. Вы также можете использовать ec2-describe-instances
команда, чтобы получить частный и общедоступный IP-адреса вашего экземпляра (ов).
Экземпляры EC2 обычно имеют две причины блокирования пакетов - брандмауэр операционной системы (в данном случае iptables / netfilter) или группа безопасности EC2. Насколько это возможно, всегда предпочтительнее блокировать трафик с помощью вашей группы безопасности, поскольку это предотвращает попадание данных в экземпляр. Однако группы безопасности не имеют состояния, и большинство пакетов не настроено для их динамического изменения, поэтому вы, вероятно, также будете использовать iptables.
По умолчанию группа безопасности EC2 отбрасывает все пакеты ICMP (необходимые для проверки связи), поэтому, если вы специально не включите ее, проверка связи не будет работать. Чтобы включить ping из консоли AWS (для вашей группы безопасности):
Вы можете увидеть свои текущие настроенные правила iptables с помощью: iptables -nvL
и вы можете просмотреть настройки своей группы безопасности с помощью ec2-describe-group SECURITY_GROUP
К сожалению, атаки методом грубой силы и сканирование вашего сервера являются частью того, что влечет за собой наличие общедоступного сервера сегодня. Как правило, эти атаки происходят не о чем беспокоиться, а о том, как настроен ваш сервер, чтобы эти атаки не привели к нарушениям. Обычно ручная блокировка одного IP-адреса не является самым эффективным способом, поскольку вы обычно найдете множество IP-адресов в качестве источников атак на ваш сервер. Я бы порекомендовал изучить fail2ban если вам нужно решение, основанное на неудачных попытках входа в систему (оно сканирует ваши журналы и динамически добавляет / удаляет необходимые правила брандмауэра) или iptables набор правил на основе последнего модуля.
Кроме того, при работе с iptables обычно рекомендуется настроить задание cron, которое сбрасывает ваши правила iptables (iptables -F
) через несколько минут, чтобы случайно не заблокировать доступ к серверу.
В этом случае обновление nginx привело к неверной конфигурации из-за добавления /etc/nginx/conf.d/default.conf
. Создайте пустой файл с тем же именем (вместо удаления файла), чтобы будущие обновления не вызывали ту же проблему. Хотя это, вероятно, не то, что большинство людей делают после обновления, вы всегда можете проверить свою конфигурацию nginx с помощью service nginx configtest
, который сообщит вам, если есть какие-либо проблемы, прежде чем вы завершите запущенный процесс nginx.
Если вы действительно обнаружите, что у вас отключен сетевой интерфейс (например, из-за ifdown eth0
), вы не сможете подключиться к экземпляру по SSH (или в любом случае связаться с ним). Решение для этого сценария состоит в том, чтобы остановить экземпляр, отсоединить корневой том EBS, присоединить его как дополнительный том к новому экземпляру EC2, устранить проблему, повторно подключить том EBS к исходному экземпляру и запустить его резервное копирование. Это одно из несомненных преимуществ томов EBS.