2010-07-17 6 views
0

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

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 для решения или любого понятия.

Удачи!

ответ

0

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

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