Почему Capistrano блокируется при выполнении определенной команды iptables? - PullRequest
0 голосов
/ 18 июля 2010

Я пытаюсь удаленно открыть порт в брандмауэре iptables с помощью Capistrano. Вот моя задача:

  desc "Open up a port in the firewall"
  task :open_port, :roles => :all do
    port = variables[:port] || nil
    if (!port)
      puts "You must specify the port number"
      next
    end
    run "#{sudo} /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport #{port.to_s} -j ACCEPT"
    run "#{sudo} /sbin/service iptables save"
    run "#{sudo} /etc/init.d/iptables restart"
  end

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

У меня буквально много десятков других правил, которые очень похожи на это, но отлично работают. На самом деле, у меня есть похожая задача, где первая команда - это вызов iptables для создания сопоставления портов, и эта задача отлично работает.

Более того, я могу успешно выполнить эту команду на хосте Capistrano:

  ssh -l deployer core sudo /sbin/iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport 2424 -j ACCEPT

Это отлично работает. Это должно быть именно то, что пытается сделать Капистрано.

Почему эта команда блокирует Capistrano?

TIA для решения или какой-либо подсказки.

Веселись всем !!!

1 Ответ

0 голосов
/ 05 сентября 2010

На днях понял это сам.Проблема заключалась в том, что я использовал имя «порт» в качестве параметра для моей задачи.Порт «параметра» распознается командой «run» и заставляет систему пытаться подключиться к целевой машине через этот порт, а не через обычный ssh-порт.Отсюда и блокировка.

Я изменил имя своего параметра на «dport», и задача начала работать так, как я ожидал.

...