차단 된 이벤트에서 포트/프로토콜을 확인/열어 볼 스크립트를 작성하고 있습니다. 내가 지금까지 가지고있는 것은 아래에있다. 포트/프로토콜 이름이 이상하게 보입니다. 나는 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 ... >
네 번 실행 가정하면
나는 몇 가지 구문 오류를보고 확신합니다. http://shellcheck.net에 코드를 잘라내거나 붙여 넣기하여 오류를 수정 한 다음 Q를 업데이트하십시오. – shellter
감사! 그 사이트가 존재한다는 것을 몰랐습니다. if 행을 구문 분석하는 것에 대해 여전히 불평하고 있지만, 이유는 확실하지 않습니다. if 라인을 필요한 공백으로 업데이트했습니다. – Michele
'[...]'안에'-ne'을 넣고 싶다고 생각합니다. 그리고 나는 그 shellcheck이 그것을 놓쳤다는 것에 놀랐다. 커맨드 라인에서 그 라인의 코드 만 실행하면,'-ksh : [: ne : unknown operator',하지만 그것은'ksh'입니다. 테스트 할 현재'bash '가 없습니다. 행운을 빕니다. – shellter