質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

1519閲覧

ProcessBuilderでfirewall-cmdを実行するとINVALID_RULE: internal error in _lexer()となる

hitokamu

総合スコア11

firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/09/03 10:04

Red Hat Enterprise Linux Server release 7.4上でfirewalldを実行するプログラムをJavaで作成しています。
コマンドを直接入力した場合は登録できるのですが、ProcessBuilderから同じコマンドを実行した場合にERROR: INVALID_RULEとなり、登録に失敗してしまいます。ProcessBuilderを使った場合に行わなくてはならない注意点などありますでしょうか?

java

1 final File file = new File("/dev/null"); 2 3 final ProcessBuilder processBuilder = new ProcessBuilder( 4 "firewall-cmd", "--permanent", "--zone=drop", target.toString()); 5 processBuilder.redirectOutput(file); 6 processBuilder.redirectInput(file); 7 processBuilder.redirectErrorStream(true); 8 final Process process = processBuilder.start(); 9以下省略

この時のtarget.toString()は

--add-rich-rule='rule family=ipv4 source address=192.168.10.10 port port=54500 protocol=tcp drop'

としており、事前に以下のコマンドを入力した場合に登録が可能なことを確認したのですが、

firewall-cmd --permanent --zone=drop --add-rich-rule='rule family=ipv4 source address=192.168.10.10 port port=54500 protocol=tcp drop'

プログラムから実行すると以下のエラーとなってしまいます。
/var/log/firewalld

ERROR: INVALID_RULE: internal error in _lexer(): rule family=ipv4 source address=192.168.10.10 port port=54500 protocol=tcp drop

実行環境は
OS : Red Hat Enterprise Linux Server release 7.4
Java: OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
firewall-cmd: 0.4.4.4
全てrootアカウントで実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tonkun4os

2018/09/09 03:52

ググるとhttp://tooljp.com/linux/Redhat7/faqRedhat7/html/INVALID_RULE-no-element-no-action.html
tonkun4os

2018/09/09 03:53

これは見ました?
hitokamu

2018/09/10 13:18

こちらは理由がno element, no actionと異なる事と、コマンドを直接実行して失敗する場合のため原因が違うという認識です。
guest

回答1

0

自己解決

結局--add-rich-rule=の先をプログラム上で生成することを断念しシェルスクリプトに引数を渡す方法で対応しました。

Java

1final ProcessBuilder processBuilder = new ProcessBuilder( 2 <シェルスクリプト名>, <引数1>, <引数2>, <引数3>); 3 processBuilder.redirectOutput(file); 4 processBuilder.redirectInput(file); 5 processBuilder.redirectErrorStream(true);

シェルスクリプト

bash

1#!/bin/bash 2/bin/firewall-cmd --zone=public --$1-rich-rule='rule family="ipv4" source address="'$2'" port port="'$3'" protocol=tcp accept'

投稿2018/09/27 12:37

hitokamu

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問