LinuxForum.Fans
Тема

Закрыть доступ к MySQL с помощью iptables

Автор: u23397 29 сообщений 5209 просмотров
#247950

Здравствуйте.
Необходимо закрыть доступ к MySQL из внешки для всех хостов, кроме вебсервера.
Создаю правила в iptables:

text
/sbin/iptables -I INPUT -i eth0 -p tcp -m tcp --dport 3306 -j REJECT
/sbin/iptables -I INPUT -s $webserver_ip -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

Всё ок, с левых хостов подключиться к мускулу я после этого не могу, но nmap при сканировании сервера видит:

text
PORT     STATE    SERVICE

3306/tcp filtered mysql

Вопрос - почему сканер это видит, и можно ли это исправить?

P.S.: Ubuntu 10.10

#247951

http://nmap.org/man/ru/

Выходные данные Nmap это список просканированных целей с дополнительной информацией по каждой в зависимости от заданных опций. Ключевой информацией является “таблица важных портов”. Эта таблица содержит номер порта, протокол, имя службы и состояние. Состояние может иметь значение open (открыт), filtered (фильтруется), closed (закрыт) или unfiltered (не фильтруется). Открыт означает, что приложение на целевой машине готово для установки соединения/принятия пакетов на этот порт. Фильтруется означает, что брандмауэр, сетевой фильт или какая-то другая помеха в сети блокирует порт, и Nmap не может установить открыт этот порт или закрыт. Закрытые порты не связаны ни с каким приложение, так что они могут быть открыты в любой момент. Порты расцениваются как не фильтрованные, когда они отвечают на запросы Nmap, но Nmap не может определить открыты они или закрыты. Nmap выдает комбинации открыт|фильтруется и закрыт|фильтруется, когда не может определить, какое из этих двух состояний описывает порт. Эта таблица также может предоставлять детали о версии программного обеспечения, если это было запрошено. Когда осуществляется сканирование по IP протоколу (-sO), Nmap предоставляет информацию о поддерживаемых IP протоколах, а не об открытых портах.
#247954

Я правильно понял - т.е. настроить iptables так, чтобы nmap думал что порт закрыт - нельзя?

#247955

В правиле цель REJECT на DROP поменяйте.

#247957
Lupo Alberto написал:
В правиле цель REJECT на DROP поменяйте.

Уже пробовал, результат тот же.

#247962
NW написал:

/sbin/iptables -I INPUT -i eth0 -p tcp -m tcp --dport 3306 -j REJECT
/sbin/iptables -I INPUT -s $webserver_ip -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

Я бы поменял местами две эти строчки. Так как первая сразу дает всем отлуп и до второй строчки дело просто не доходит.

#247963

Покажите все правила, т.е.

text

iptables-save
#247969
text
# Generated by iptables-save v1.4.4 on Tue Apr 24 12:05:41 2012
*filter
:INPUT ACCEPT [813952900:84927985671]
:FORWARD ACCEPT [40:11488]
:OUTPUT ACCEPT [695308628:83115813071]
:sshguard - [0:0]
-A INPUT -s 88.160.20.20/32 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j DROP
COMMIT
# Completed on Tue Apr 24 12:05:41 2012

Айпишник изменил, остальное как есть.

#247970
Cruiser78 написал:
[quote=NW]
/sbin/iptables -I INPUT -i eth0 -p tcp -m tcp --dport 3306 -j REJECT
/sbin/iptables -I INPUT -s $webserver_ip -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

Я бы поменял местами две эти строчки. Так как первая сразу дает всем отлуп и до второй строчки дело просто не доходит.[/quote]
Если не ошибаюсь добавление правил вставкой(-I) - добавляет правило в начало списка. Т.е. сначала добавляется правило на закрытие порта, далее при добавлении разрешения на доступ с нужного айпишника блокирующее правило смещается на след.позицию в списке.
Могу ошибаться, поправьте если не прав.

#247971
"NW" написал:
Могу ошибаться, поправьте если не прав.

Так и есть, т.е. не ошибаетесь.

"NW" написал:
text

-A INPUT -s 88.160.20.20/32 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j DROP

#247972

Как я понимаю, nmap видит первое правило и принимает решение, что порт фильтруется.

#247973
Lupo Alberto написал:
Как я понимаю, nmap видит первое правило и принимает решение, что порт фильтруется.

Поменял правила местами.
nmap также видит порт как filtered. Доступ с "разрешенного" сервера закрыло при этом.

#247974

В порядке бреда:
— остановите mysql, но оставьте только запрещающее правило, просканируйте;
— уберите и запрещающее правило, просканируйте.

#247976

Я не большой спец в этом вопросе, но разве MySQL своими средствами не может ограничить адрес либо диапазон адресов, с которых разрешено подключение?

#247983
"Lupo Alberto" написал:
В порядке бреда:
— остановите mysql, но оставьте только запрещающее правило, просканируйте;
— уберите и запрещающее правило, просканируйте.

К сожалению сейчас нет возможности остановить mysql, проверю позже. Бред не бред, приходится проверять все варианты . :)

"Lupo Alberto" написал:
Я не большой спец в этом вопросе, но разве MySQL своими средствами не может ограничить адрес либо диапазон адресов, с которых разрешено подключение?

Из того что мне известно - MySQL может ограничить подключения по 'user'@'hostname'. Т.е. подключение всё равно состоится, после чего пройдет проверка hostname и соединение дропнется если указанных 'user'@'hostname' нет.
Если ограничивать подключения средствами мускула - теоретически можно наплодить коннектов к мускулу(с левого хоста имею ввиду), что вызовет ненужную нагрузку на него. Поэтому хотелось бы дропать "левые" коннекты раньше, не доходя до MySQL.

#247995
Lupo Alberto написал:
В порядке бреда:
— остановите mysql, но оставьте только запрещающее правило, просканируйте;
— уберите и запрещающее правило, просканируйте.

1) С остановленным сервисом и запрещающим правилом сканер по-прежнему видит порт как filtered...
2) Остановил сервис, удалил правило - порт закрыт.
Продолжаю изыски..

#247997
"NW" написал:
1) С остановленным сервисом и запрещающим правилом сканер по-прежнему видит порт как filtered...
2) Остановил сервис, удалил правило - порт закрыт.
Продолжаю изыски..

Исходя из этого, nmap видит правило, а не сервис.
Что вас во всём этом смущает?

#247999
Lupo Alberto написал:
[quote="NW"]1) С остановленным сервисом и запрещающим правилом сканер по-прежнему видит порт как filtered...
2) Остановил сервис, удалил правило - порт закрыт.
Продолжаю изыски..

Исходя из этого nmap видит правило, а не сервис.
Что вас во всём этом смущает?[/quote]
Меня смущает что любой желающий может увидеть открытые порты + сервисы которые крутятся на сервере, хотя общается с этими сервисами один конкретный сервер.

#248001
"NW" написал:
Меня смущает что любой желающий может увидеть открытые порты + сервисы которые крутятся на сервере,
"Lupo Alberto" написал:
Исходя из этого, nmap видит правило, а не сервис.
#248002

повесьте mysql на другой порт. Злоумышленник не догадается, что это mysql. Или напишите правило, которое убирает сканеры в бан. Но обычно DROP хватает с головой. А nmap будет показывать filtered, потому-что не может определить состояние порта(открыт или закрыт) в независимости стоит ли DROP или REJECT.

Войдите или зарегистрируйтесь, чтобы ответить.