Стоит Linux Debian без графической оболочки, на ней есть программа которая с определенным интервалом делает запросы к одному из нескольких ip-адресов, (запрос как говорит разработчик пакетом http), на этот запрос с любого действующего ip должен прийти ответ тоже пакетом http и после этого работа программы продолжается дальше, если же ответ не приходит то программа автоматически закрывается. Если в iptables поставить:
$iptables -P INPUT ACCEPT
то пакет проходит нормально и программа работает без перебоев. Но мне нужно чтобы INPUT по умолчанию было DROP. Пробовал открыть доступ ip-шникам так:
$iptables INPUT -s ( один из ip) -m state NEW,RELATED,ESTABLISHED j ACCEPT
Пингуется этот ip после запуска системы нормально но пакеты не доходят.
Если INPUT по умолчанию стоит ACCEPT то при просмотре пакетов идущих через iptables видно что строку
$iptables INPUT -s ( один из ip) -m state NEW,RELATED,ESTABLISHED j ACCEPT
пакеты проходят нормально. Нужно как то по другому давать доступ ip-шникам.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Для вашего случая (когда default policy входящих соединений DROP, исходящих ACCEPT и программа является инициатором соединения) для того чтобы программа могла соединяться с удаленным сервером и получать необходимые данные этого правила должно быть достаточно, при условии что другие правила не влияют на установление соединения и прохождение важных для нас пакетов.
Если что-то не работает, смотрите счетчики срабатывания правил (iptables -vxnL) или настройте логирование (как написали выше).
А вообще надо смотреть на остальные правила (iptables-save).
есть программа которая с определенным интервалом делает запросы к одному из нескольких ip-адресов, (запрос как говорит разработчик пакетом http), на этот запрос с любого действующего ip должен прийти ответ
Я чего-то не понял. Ответ приходит «с любого действующего ip» или конкретно с IP, к которому программа послала запрос? То что программа может послать запрос к любому из набора IP - понятно.
И еще. Предлагаю разбить правило:
$iptables INPUT -s ( один из ip) -m state NEW,RELATED,ESTABLISHED -j ACCEPT
на два:
$iptables INPUT -m state RELATED,ESTABLISHED -j ACCEPT
$iptables INPUT -s ( один из ip) -m state NEW -j ACCEPT
Так лучше смотреть прохождение пакетов по цепочке.
ЗЫ: то что у Вас перед «j ACCEPT» не стоит "-" - опечатка или злой умысел?
то что у Вас перед «j ACCEPT» не стоит "-" - опечатка или злой умысел?
А ничего что у вас и у ТС'а в вызове iptables отсутствует ключ -A (или -I)? А еще после -m state идут сразу состояния соединения, хотя нужно их отдельно передавать с ключом --state.