물론 포트와 프로토콜을 한 줄에 정의하는 것도 가능하지만 TCP와 UDP 프로토콜을 별도의 Firewalld 명령이 아닌 한 줄에 어떻게 정의합니까?
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/tcp/udp
Error: INVALID_PORT: bad port (most likely missing protocol), correct syntax is portid[-portid]/protocol
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/tcp-udp
Error: INVALID_PROTOCOL: 'tcp-udp' not in {'tcp'|'udp'|'sctp'|'dccp'}
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/tcp|udp
-bash: udp: command not found
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/tcp,udp
Error: INVALID_PROTOCOL: 'tcp,udp' not in {'tcp'|'udp'|'sctp'|'dccp'}
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/tcp udp
usage: see firewall-cmd man page
firewall-cmd: error: unrecognized arguments: udp
[root@centos8 /]# firewall-cmd --permanent --add-port=2222/'tcp''udp'
[root@dynatrace /]# firewall-cmd --permanent --add-port=2222/tcp udp
usage: see firewall-cmd man page
마지막 출력에서 볼 수 있듯이 매뉴얼 페이지를 확인했지만 이에 대한 예를 찾을 수 없습니다.
답변1
매뉴얼 페이지에 따르면 포트에 대해 하나의 프로토콜만 지정할 수 있습니다. 이는 각 포트에 대해 두 개의 명령을 실행해야 함을 의미합니다.
포트는 단일 포트 번호이거나 포트 범위 portid-portid일 수 있습니다. 계약은 다음과 같이 할 수 있습니다.어느 하나TCP, UDP, sctp 또는 dccp.
서비스가 동일한 포트에서 TCP와 UDP를 모두 수신하는 경우는 매우 드뭅니다. 제가 아는 서비스는 이런 방식으로 작동하는 서비스가 딱 하나 있는데, 바로 DNS입니다.
라이너로 만들려면 다음과 같은 쉘 기능을 사용할 수 있습니다.
ftu() {
firewall-cmd --permanent --add-port="$1"/TCP
firewall-cmd --permanent --add-port="$1"/UDP
}
ftu 1000
답변2
한줄로 완성
나는 이것이 오랜 질문이라는 것을 알고 있지만 아무도 대답을 제공하지 않았다는 것을 알았습니다. 몇 가지를 시도해 보았지만 가장 좋은 해결책은 확장 프로그램을 사용하는 것 같습니다. 이것은 꽤 까다로울 수 있습니다.
# simple
firewall-cmd --add-port={80,443}/tcp
# both protocols
firewall-cmd --add-port={80,443}/{tcp,udp}
# can be a bit complex (notice nested brackets)
firewall-cmd --add-port={{80,443}/{tcp,udp},{110,995}/tcp}
그런 다음 무엇을 했는지 확인해 보세요 :)
firewall-cmd --list-ports
이는 포트와 프로토콜을 사용하여 조합을 만드는 방법을 보여주는 데모일 뿐입니다.
더 나은 서비스
저도 시도해 보았는데 --add-services
그 이름은 /etc/services
파일에서 찾을 수 있습니다. 또한 포트를 사용하는 것보다 작동하고 더 우아합니다.
이름과 포트가 모두 있습니다.
grep -E 'http|imap|pop3|smtp|dns|ftp' /etc/services
우리는 또한 이것을 할 수 있습니다:
# Simple and readable
firewall-cmd --add-service={http,https}
firewall-cmd --list-services
이 작업을 우아하게 수행하는 방법을 보여주기를 바랍니다.