FirewalldはTCPとUDPを1行として定義します。

FirewalldはTCPとUDPを1行として定義します。

もちろん、ポートとプロトコルを1行で定義することも可能ですが、TCPとUDPプロトコルを別々のFirewalldコマンドではなく1行にどのように定義しますか?

[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

マニュアルページによると、ポートには1つのプロトコルしか指定できません。これは、各ポートに対して2つのコマンドを実行する必要があることを意味します。

ポートは単一のポート番号またはポート範囲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

このタスクをエレガントに実行する方法を示すことを願っています。

関連情報