начал для себя изучать iptables. Пока успехи минимальны, напсиал тут пару правил, и возник вопрос. Почему не работаюи исходящие ICMP запросы? хотя входящие работают на ура
...пишет.что доступ запрещен да и пингуемая машина находится в той же подсети и на том же свитче)
Пожалуйста-пожалуйста.
Доступ запрещен? Хм... тогда грешу только на firewall со стороны пингуемого, так как в построенных Вами правилах используется политика DROP. То есть неподходящие пакеты просто сбрасываются, при этом никаких уведомлений в ответ не отсылается (например, как в правилах REJECT).
О! И вдруг подумалось... очень помогают в выявлении истины: -j LOG в правилах _перед_ сбросом пакетов; отдельный инструмент - tcpdump.
*- Большинство проблем, дружок, завсегда покажет лог! -*
имхо, не катит...
Проверял, не работает, на чтении списка файлов останавливается. Для фтп, простого открытия порта 21 не работает. Т.к. в пассивном режиме там на другой порт перекидывается.
$IPTABLES -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
этого достаточно для пассивного ftp. если обычный то нужно еще добавить правило $IPTABLES -A allowed -p TCP --syn -j ACCEPT, и соответственно открыть порт tcp ftp-data (20)
теория достаточно хорошо изложена в man iptables (в т.ч про модуль ядра state)
фтп открыл, путем дополнительного открывания 1024-65535 портов... теперь как бы и то и то работает.
А других методов нету? а то оставлять столько портов открытыми...
Загрузить спец модуль для ftp командой modprobe ip_conntrack_ftp.
Открыть 20 21 порты. Сделать фильтрацию пакетов по состоянию пакетов... должно помочь.
Или явным образом указать порты демону фтп которые он может использовать для передачи файлов.
в proftpd это делается так: PassivePorts 49152 65534 сразу после опции Port.
... -m state --state ESTABLISHED,RELATED -j ACCEPT
как раз и указывает "использовать ip_contrack", которого вполне достаточно, чтобы работали ftp: когда к вашему узлу подключился ftp (порт 21 открыт) и control-соединение установлено (ESTABLISHED) , в таблице /proc/net/ip_contrack имеется соответствующая запись, то опция RELATED, обеспечивает прозрачность для любых пакетов, связанных с этим существующим соединением
на сколько я понимаю (поправьте pls, если не прав) ip_conrack_ftp, ip_contrack_irc, ip_contrack_h323 - это частные случаи для пакетов опреденного протокола
что касается исходящих, то вариантов два - когда допускается использование ftp passive mode и когда нет. в первом случае для исходящих правил достаточно будет открытого порта ftp и того же established+related, как написано выше. второй случай требует явного открытия ftp-data
да, добавлю, что все это для iptables сервера и клиента, но не шлюза (там, вероятно сложнее)
Если в итоге открывать все порты (или даже только в верхнем диапазоне), то зачем вообще париться с iptables?
Протокол FTP отличается от других протоколов тем, что у него есть два соединения. Первое соединение (управляющее) устанавливает клиент с сервером по (стандартному) порту 21. А вот направление второго соединения (для передачи данных - комнады ls, get, put и др.) зависит от того, какой режим используется - активный или пассивный. При пассивном режиме соединение для данных устанавливает клиент, при активном (изначально - это стандартный режим) - сервер. А порт, по которому устанавливается соединение для данных, назначается ВНУТРИ пакета.
Сам iptables внутренности пакета не рассматривает, он работает только со стандартными заголовками. Вот как раз для работы с "потрохами" пакетов конкретных протоколов и используются специальные модули. Так что для правильной работы с ftp-протоколом упомянутый модуль необходим. Примеры работы с этим модулем есть в руководстве по iptables.
подскажите теорией ( а то не могу понять ),
имеется локальная сеть с 192.168.1.0/24 адресами, имеется сервер 192.168.1.250, к его eth1 подключен адсл модем в режиме роутера. Требуется, чтобы при устанвоки сервера основным шлюзом, он отдавал инет через модем. Если модем не в роутере, и до него надо поднимать PPPoE, то я понимаю что надо использовать маскарадинг(т.к. динамический ип). А вот в этом случае, не могу понять =\
или это просто надо включить ip_forward ?