2016-12-14 12 views
0

У меня встроенное встроенное программное обеспечение Linux, работающее на домашнем маршрутизаторе. Когда я запускаю следующие команды один за другим с терминала как root, он работает без ошибок и служит моей цели. Я знаю, что это не безопасная политика. Это только для проверки чего-то.Как изменить записи iptable с помощью скрипта bash?

iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -F 
iptables -X 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 

Однако, когда это выполняется в Баш скрипт как корень, как показано ниже,

#!/bin/bash 
iptables -P INPUT ACCEPT 
iptables -P FORWARD ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -F 
iptables -X 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 

это дает следующее сообщение об ошибке:

iptables: Bad policy name. Run `dmesg' for more information. 
iptables: Bad policy name. Run `dmesg' for more information. 
iptables: Bad policy name. Run `dmesg' for more information. 
iptables: No chain/target/match by that name. 
iptables: No chain/target/match by that name. 

Я подтвердил, что последняя строка скрипт bash выполняется без ошибок, и запись может быть видна в iptables. Однако все остальные строки выдают ошибку. Что я делаю не так? Удивительно, но тот же командный скрипт отлично работает на моей машине Ubuntu.

+0

Как вы запускали сценарий оболочки с правами root? Можете ли вы сообщить нам, как вы его вызвали? – Inian

+0

Маршрутизатор был отправлен с помощью службы telnet по умолчанию с учетными данными по умолчанию. –

ответ

2

Создал сценарий в Windows или каким-либо другим способом, который дал ему окончание строк Windows (CRLF), где маршрутизатор ожидает окончания строки Unix (LF)?

Это приведет к тому, что интерпретатор будет считывать лишний непечатаемый символ в конце каждой из команд, что даст показанные ошибки.

Вы можете проверить, запустив cat -v myScript.sh. Некорректные окончания строки Windows будут отображаться как:

iptables -P INPUT ACCEPT^M 
iptables -P FORWARD ACCEPT^M 
iptables -P OUTPUT ACCEPT^M 
iptables -F^M 
iptables -X^M 
iptables -A INPUT -p tcp -i eth1 --dport 4444 -j ACCEPT 
+0

Спасибо вам большое! Это была проблема! –