азы iptables (Пожалуйста, помогите разобраться!)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
loner
Сообщения: 149
ОС: Debian 5.0

азы iptables

Сообщение loner »

Здравствуйте уважаемые учасники форума!

Очень хочу разобраться с настройкой iptables, читаю iptables tutorial 1.19 c opennet.ru, но мало чего понимаю.
Проблема в следующем: нужно открыть доступ к ssh на машине 192.168.0.1(linux, celeron) с адреса 192.168.0.3(windows, athlon).

Написал

IPT="/sbin/iptables"
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -F
$IPT -X

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

$IPT -I INPUT 1 -p tcp -d 192.168.0.1 --dport 22 -j ACCEPT
(я правильно понимаю? - разрешаем входящие пакеты для протокола tcp у которых адрес назначения 192.168.0.1 и порт 22)

$IPT -I OUTPUT 1 -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
(разрешаем исходящие пакеты для протокола tcp которые идут на 192.168.0.3 порт 22?)

iptables -L

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere Celeron tcp dpt:ssh


Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- Athlon anywhere tcp dpt:ssh

SSH не работает. Где я ошибся?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: азы iptables

Сообщение serzh-z »

А кто сказал, что SSH не работает из-за iptables? Вообще, ставим shorewall и не парим себе и людям моск - он довольно удобно оборачивает правила iptables в более удобоваримый вид.
Спасибо сказали:
little Jon
Сообщения: 212

Re: азы iptables

Сообщение little Jon »

$IPT -I INPUT 1
мне кажется что ключик -I лучше заменить на -A (append) циферка 1 вроде как тоже не понятно к чему, номера правил здесь явно излишни. Посмотри вот сюда. http://linuxforum.ru/index.php?showtopic=2...mp;#entry258634
А вообще твоя задача решается через TCP wrappers
/etc/host/allow /etc/host/deny
если мне не изменяет память руководство называется host_access


Linuxforum@conference.jabber.ru
Спасибо сказали:
Аватара пользователя
loner
Сообщения: 149
ОС: Debian 5.0

Re: азы iptables

Сообщение loner »

> А кто сказал, что SSH не работает из-за iptables?

Потому что без iptables он работает


> Вообще, ставим shorewall и не парим себе и людям моск

Извините что отнял у Вас пару минут драгоценного времени :) Конечно, для двух правил iptables без shorewall никуда :)


> мне кажется что ключик -I лучше заменить на -A (append) циферка 1 вроде как тоже не понятно к чему, номера правил здесь явно излишни

А это сильно важно? Результат один и тот же.


> А вообще твоя задача решается через TCP wrappers

Сейчас разбираюсь с iptables.


И все-таки проблема не в этом, а в понимании как работают правила. Есть какие то предположения что я не так написал?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: азы iptables

Сообщение serzh-z »

Ну раз нравится писать "эти два правила" вручную, кто же запрещает. :) Но в таком случае стоит и заодно изучать детали стека TCP/IP. Например стоило бы знать, что помимо SYN на 22-й порт (запрос коннекта) нужно разрешить пакеты в состоянии RELATED и ESTABLISHED.
Спасибо сказали:
Аватара пользователя
VisualN
Сообщения: 213
ОС: Gentoo Linux

Re: азы iptables

Сообщение VisualN »

Перевожу то, что ты написал:
$IPT -I INPUT 1 -p tcp -d 192.168.0.1 --dport 22 -j ACCEPT
Пропускать входящие tcp пакеты с назначением 192.168.0.1 на порт 22.
Это значит что пройдет любой пакет посланный на 192.168.0.1, разве ты этого хотел?
Думаю подразумевалось вот это: $IPT -I INPUT 1 -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
Т.е. пропускать трафик на ssh только с ip 192.168.0.3.
Если нужно разрешить всей локалке то можно в качестве источника указать подсеть, или разрешить соединения не с какого то ip, а с интерфейса вообще.
Далее: $IPT -I OUTPUT 1 -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
Пропускать исходящие пакеты с источником 192.168.0.3 на порт 22
Во-первых: с интерфейса(192.168.0.1), в нормальной ситуации, ни как не может вылететь пакет с source 192.168.0.3, в цепочке OUTPUT source ip пакета всегда есть ip интерфейса с которого пакет отправлен.
Во-вторых: порт назначения может быть любым, т.к. мы не знаем с какого порта будет инициировано соединение на удаленной машине. Здесь скорее надо --sport использовать.
Думаю ты хотел вот так: $IPT -I OUTPUT 1 -p tcp -d 192.168.0.3 --sport 22 -j ACCEPT

Важно понимать что у каждого TCP/IP пакета есть такие параметры как source ip, dest ip, source port и dest port. И в разных цепочках абсолютно идентичные пакеты должны фильтроваься по-разному. Например source ip в цепочке INPUT это "с какого ip к нам пришел пакет", а в цепочке OUTPUT это "с какого ip мы его отправили", понимаешь разницу? То же касается и --sport, и --dport

По поводу RELATED и ESTABLISHED:
В приведенных мною выше правилах есть один ньюанс, они разрешают инициировать соединение с порта 22 на ip 192.168.0.3,
и будучи параноиком можно запретить и это. Как сделать не запретив отвечать по ssh на ip 192.168.0.3?
Для этого и есть правила RELATED и ESTABLISHED, которые разрешают пакеты уже установленных tcp поединений.

P.S. Мое представление о работе iptables не претендует на точноть, т.е. могу ошибаться, я не спец в этом
Nothing ever changes...
Спасибо сказали:
Аватара пользователя
loner
Сообщения: 149
ОС: Debian 5.0

Re: азы iptables

Сообщение loner »

Замечательное обьяснение. Спасибо.
> Думаю подразумевалось вот это: $IPT -I INPUT 1 -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
Согласен
> Во-вторых порт назначения может быть любым

хм...
При установленном соединении
cat /proc/net/ip_conntrack
tcp 6 431999 ESTABLISHED src=192.168.0.3 dst=192.168.0.1 sport=1044 dport=22 packets=11382 bytes=652760 src=192.168.0.1 dst=192.168.0.3 sport=22 dport=1044 packets=17315 bytes=1885096 [ASSURED] mark=0 use=1

Это как? Windows использует 1044 порт (причем прошлый раз был другой )??????
Подскажите доку насчет портов (желательно с примерами на С и полегче :) (пытался читать Стивенса "Unix разработка сетевых приложений" - ниасилил) ). Я почему то думал что если к примеру я конекчусь к 80 порту, то у меня на компьютере тоже открываеться 80 порт (и не мог понять как например при открытии Оперой 10 сайтов я с одного порта соединяюсь с восьмедисятыми портами разных ip адресов. )

Поменял как Вы написали, проблему это не решило.
Буду читать по поводу RELATED и ESTABLISHED.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: азы iptables

Сообщение diesel »

loner писал(а):
09.10.2006 00:59
Замечательное обьяснение. Спасибо.
> Думаю подразумевалось вот это: $IPT -I INPUT 1 -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
Согласен
> Во-вторых порт назначения может быть любым

хм...
При установленном соединении
cat /proc/net/ip_conntrack
tcp 6 431999 ESTABLISHED src=192.168.0.3 dst=192.168.0.1 sport=1044 dport=22 packets=11382 bytes=652760 src=192.168.0.1 dst=192.168.0.3 sport=22 dport=1044 packets=17315 bytes=1885096 [ASSURED] mark=0 use=1

Это как? Windows использует 1044 порт (причем прошлый раз был другой )??????

Клиент ssh (в вашем случай Винда) коннетится к серверу на 22-й порт. Но для обмена у клиента 22-й порт не должен открываться, это бы означало например что можно по SSH коннектится только из-под root'а потому что только root может на UNIX-машине этот порт открыть. Поэтому у клиента выбирается любой, первый попавшийся порт выше 1024.

loner писал(а):
09.10.2006 00:59
Поменял как Вы написали, проблему это не решило.
Буду читать по поводу RELATED и ESTABLISHED.

При создании соединения серверу посылается пакет SYN, сервер отвечает пакетом SYN/ACK, клиент подтвержает получение ответа от сервера пакетом ACK после этого соединение считается установленным. Чтобы дальше проходил нормальный обмен между клиентом и сервером нужно разрешить установленные соединения:
iptables -A INPUT -p ALL -d 192.168.0.1 -m state --state ESTABLISHED,RELATED
Спасибо сказали:
Аватара пользователя
VisualN
Сообщения: 213
ОС: Gentoo Linux

Re: азы iptables

Сообщение VisualN »

С теми 2-мя правилами что я написал должно работать и без ESTABLISHED,RELATED
Nothing ever changes...
Спасибо сказали:
malor
Сообщения: 335

Re: азы iptables

Сообщение malor »

Я каждый раз перезагружаясь смотрю на вывод iptables -L и вижу пару строчек типа DROP(было дело, ставил когда-то...). Сьрасываю iptables -F, сохраняю iptables-save. Больше ничего не изменяю. Но при следующей загрузке те два правила снова как ни в чем не бывало на месте. Почему снова воскресают?

ASPLinux 11
Спасибо сказали:
little Jon
Сообщения: 212

Re: азы iptables

Сообщение little Jon »

mallory писал(а):
09.10.2006 21:13
Я каждый раз перезагружаясь смотрю на вывод iptables -L и вижу пару строчек типа DROP(было дело, ставил когда-то...). Сьрасываю iptables -F, сохраняю iptables-save. Больше ничего не изменяю. Но при следующей загрузке те два правила снова как ни в чем не бывало на месте. Почему снова воскресают?

11


iptables-save делает вывод правил. Похоже в приведенном примере вывод делается на консоль. А надо в файл iptables-save > my_iptables. Вместо my_iptables должен быть другой файл который загружает правила по умолчанию. я не использовал ASPLinux поэтому не знаю полное имя файла.


Linuxforum@conference.jabber.ru
Спасибо сказали:
Аватара пользователя
loner
Сообщения: 149
ОС: Debian 5.0

Re: азы iptables

Сообщение loner »

Вот так вот работает:
$IPT -A INPUT -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT
$IPT -A OUTPUT -p tcp -d 192.168.0.3 -j ACCEPT

Но для второй цепочки указать --sport я не могу, потому что неизвесно на какой порт будет отправлять пакеты 192.168.0.1. А так небезопасно, потому что все открыто на выход для 192.168.0.3. А если нужно было бы открыть доступ для целой подсети? Тогда всем бы были на выход открыты все порты?
Спасибо сказали:
Аватара пользователя
VisualN
Сообщения: 213
ОС: Gentoo Linux

Re: азы iptables

Сообщение VisualN »

--sport в цепочке OUTPUT это твой порт, --sport 22 по идее должно работать, но раз не получается, тут как раз -m state --state ESTABLISHED,RELATED и поможет, вместо второго правила прописать:
iptables -A OUTPUT -p ALL -i имя_интерфейса(который 192.168.0.1) -m state --state ESTABLISHED,RELATED -j ACCEPT
Nothing ever changes...
Спасибо сказали: