LINUX.ORG.RU

IPTables в Debian, или непонятненький парадокс

 , ,


0

0

Привет товарищи, первое сообщение, для которого и проводилась регистрация на сие форуме, или замечательном острове Unix-юзверей. Проблема заключается в любознательности вообще работы IPTables. Есть две машинки на Deb8, виртуальные, к одной из них есть прямой доступ, к другой только по SSH. Стоит задача, закрыть все порты, кроме 22, 80, 160, 161, 443. Но загвоздка вот в чём: работа через SSH, именно через него. И из-за этой загвоздки дропать цепочки нельзя, иначе SSH отпадает как и контроль над ней. Я заметил парадокс (либо я тупой): Когда я пропишу все диапозоны портов на дроп (цепочка INPUT по умолчанию ACCEPT), при прописи 444:65535 - SSH отваливается, и это происходит на любой машинке. Хоть порт 22 открыт, но SSH не работает. Естественно заходим напрямую, удаляем последнее правило - всё начинает работать. Очищаем правила и делаем тоже самое, только в слегка противоположном смысле. А именно - дропаем цепочку и данные порты разрешаем - SSH работает. Вот не понятно как это происходит, может мне кто объяснит вообще логику, когда делаем одно и тоже, только разными способами, и работает, как оказалось по разному. А может я глупый и не понял чего-то, недавно пользуюсь Дебианом без GUI.

Ответ на: комментарий от ving2

Я это делаю исключительно в познательных целях. По этому работаю без сохранения, работает до перезагрузки ведь.

Для первого варианта, с неработающим SSH. Скриншот

Для второго случая, с работающим SSH.

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             multiport por                                                                                        ts ssh,http,https,zabbix-agent
2    ACCEPT     tcp  --  anywhere             anywhere             multiport por                                                                                        ts zabbix-trapper

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

WeOrangeSky ()
Ответ на: комментарий от WeOrangeSky
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Xwo ()
Ответ на: комментарий от Xwo

Если я первую строку введу в SSH, дальше я ничего не напишу ведь, т.к. вся цепочка отклоняет любое входящее соединение в случае отсутствии правил. Напрямую - получится, не спорю.

WeOrangeSky ()
Ответ на: комментарий от WeOrangeSky

Сначала добавь правила для ssh и все что тебе будет нужно, потом уже дефолтный полиси. Также правила можно удалять по одному (-D) и вставлять в произвольное место (-I).

zfree ()

Делать надо drop/reject по умолчанию, а не accept. И только то что надо accept. Это стандартный подход, и фаервол надо так и настраивать

samson ★★ ()
Ответ на: комментарий от Xwo

Я понимаю что делает каждая строка, но суть вообще в главном посте. Я не спрашиваю как это делать, а как это происходит. Если дропать все порты по диапозонам и SSH отваливается при INPUT ACCEPT, либо ацептить все порты при INPUT DROP и SSH работает нормально. А по поводу ваших команд - первая строка мне запретит 22 порт, и я написать дальше ничего не смогу.

WeOrangeSky ()
Ответ на: комментарий от WeOrangeSky
-A INPUT -p tcp -m multiport --ports 444:65535 -j DROP

так делаешь да ? Данный критерий проверяет как исходящий так и входящий порт пакета.

ving2 ()
Последнее исправление: ving2 (всего исправлений: 1)

Вот не понятно как это происходит

Пакет «спускается по правилам», если удовлетворяется условие, то делается действие (-j). Если не одно правило не удовлетворено, то делается действие по умолчанию.

Все просто

samson ★★ ()

Почитайте iptables tutorial, сразу отпадут многие вопросы, даже те, которые на первый взгляд кажутся умными.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от WeOrangeSky

Я понимаю что делает каждая строка

видимо нет.

ving2 ()
Ответ на: комментарий от WeOrangeSky

Если дропать все порты по диапозонам и SSH отваливается при INPUT ACCEPT

Так может и ssh тоже дропаешь и до input accept просто не доходит, пакет отбрасывается/дропается

Имел ввиду что ssh случайно не в этом диапазоне?

samson ★★ ()
Последнее исправление: samson (всего исправлений: 1)
Ответ на: комментарий от Infra_HDC

Infra_HDC правильный совет дал. Почитайте туториал и сразу все прояснится

samson ★★ ()
Ответ на: комментарий от samson

да он дропает диапазон портов 444:65535 . В пакете адрес источника попадает под этот критерий и ssh у него отваливается.

ving2 ()
Ответ на: комментарий от WeOrangeSky

Ответ на вопрос: сделай скрипт с правилами и запускай его. ssh отваливается, но потом сможешь переподключиться.

Xwo ()
Ответ на: комментарий от Xwo

А вот по поводу скрипта тоже думал. Но я задаю вопрос, почему в первом случае отпадает SSH а во втором нет, если по сути выполняется тоже самое.

WeOrangeSky ()
Ответ на: комментарий от WeOrangeSky

Так если адрес источника (source) и адрес получателя (destination) двадцатые

Ты точно уверен что адрес источника «двадцатые»?

ving2 ()
Последнее исправление: ving2 (всего исправлений: 1)
Ответ на: комментарий от ving2

Божечки, так я думал оно выходит 22м, и заходит в 22. В данном случае просто --dports надо было писать вместо --ports, закрывая только локальные порты.

WeOrangeSky ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.