ブロックされたイベントでポート/プロトコルをチェック/オープンするスクリプトを作成しています。私がこれまでにしてきたことは以下の通りです。ポート/プロトコル名は私には奇妙に見えます。私はIPアドレスを期待していただろうが、私は以前これをやったことがない。ホストはDSLAMのIPアドレスですか?また、現在のマシンであればホストを指定せずにncを実行できますか?それ以外の場合、このスクリプトは必要な処理を行いますか?ブロックされたイベントでポート/プロトコルを開くシェルスクリプトが正しいかどうかわからない
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
echo -e "############################nnnPresent ports opened on this machine are
$(iptables -nL INPUT | grep ACCEPT | grep dpt)
nCompleted listing...nnn#########################"
#these look funny to me
PORTS=(123 161 69 "UDP" 80 443 22 8443 8080 23 25 3307 "TCP" "HTTPS" "SNMP" "SFTP" "TFTP")
#modified ip's for public sharing
HOSTS=("10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x")
for HOST in "${HOSTS[@]}"
do
for PORT in "${PORTS[@]}"
do
#see which ones need opening...0 is pass (open), 1 fail, 5 timeout; need host still
#alternatively try nmap
nc -z -v -w5 ${HOST} ${PORT}
#if it's not open, then open it
if [ "$?" ne 0 ]; then #shellcheck err this line: Couldn't parse this test expression.
iptables -A INPUT -m tcp -p tcp --dport "$PORT" -j ACCEPT &&
{ service iptables save;
service iptables restart;
echo -e "Ports opened through iptables are n$(iptables -nL INPUT | grep ACCEPT | grep dpt)"; }
else
echo "Port $PORT already open"
fi
done
done
私はtest if port is openに言及し、またopen portてきました。その後、必要ではない
HOSTS=("10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x" "10.x.x.x")
for HOST in "${HOSTS[@]}"
do
< stuff ... >
done
が< stuff ... >
4回実行仮定:
を私はいくつかの構文エラーを参照してくださいかなり確信しています。 http://shellcheck.netにあなたのコードをカット/ペーストし、見つかったエラーを修正し、あなたのQを更新してください。 – shellter
ありがとう!そのサイトが存在するかどうかはわかりませんでした。それはまだif行を解析することに不満がありますが、私はなぜそれがわかりません。 if行を必要なスペースで更新しました。 – Michele
'[...]'の中に '-ne'を入れたいと思っています。そして、私はシェルチェックがそれを逃したことには驚きました。コマンドラインでその行のコードを実行すると、 '-ksh:[:ne:unknown operator'が表示されますが、それは' 'ksh''です。テストする現在の 'bash'を持っていません。がんばろう。 – shellter