Firewalld는 TCP와 UDP를 한 줄로 정의합니다.

Firewalld는 TCP와 UDP를 한 줄로 정의합니다.

물론 포트와 프로토콜을 한 줄에 정의하는 것도 가능하지만 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

이 작업을 우아하게 수행하는 방법을 보여주기를 바랍니다.

관련 정보