心地よいライフハック

これ便利だな〜と思ったことなど

 firewall-cmd ポート番号 指定 と サービス名 指定。 挙動の違いについてまとめてみたら 少し危ないことが見えてきた。

気になったので、 動作を確認して、まとめておく。
 
○ この世界の中では、ポート番号指定 | サービス指定 、それぞれ少し別な動き。
 
○ filrewall-cmd --reload しなくても、 反映されたもの。reload しないといけないもの。  
「Firewalld Centos7」の画像検索結果
 

 
< 環境 >
CentOS Linux release 7.5.1804 (Core)
firewall-cmd --version  0.4.4.4
 

 
Q、 この世界( firewalld )の中での、ポート番号 指定 サービス指定、って それぞれなんであるの?
 
 サービスによっては、複数のポートを使っているため、サービス名で定義した方が、設定の「やり方」は  簡潔。
( ただし、ポート番号 指定による定義 と サービス名 指定による定義 を混在させてしまった場合は、設定確認が 煩雑になる。詳細は以下 )
 

 
Q、 サービス と ポート 両方 許可しないとダメか? ポートだけではダメか?
  
  -> どうやら、 同じ 80/tcp ないし http にしても、 厳密には、サービス名指定とポート番号指定 で 挙動に違いがあるようだ。
 
ざっくり動きを観た結果、80ポートを閉じても、http サービスが許可されている状態だと webサービスに接続することができた。
また逆に、 httpサービスを閉じて 80ポートを解放しても、 webサービスに接続することができた。
 
つまり OR条件 で 開放 された。
 
サービス名での指定 、ポート番号での指定 により、両方開けた場合は、両方 とも閉じることで、遮断された。
 
「Firewalld Centos7」の画像検索結果
 
 注記 :  " webサービス " とは 内部 tcp/80 でリッスン状態にある nodejs で たてた、 簡素なwebサーバー。アクセスされると、  適当なログを出させて確認した 。
 

 
ポート番号指定 ( --permanent オプションあり ) で firewall 設定時の疑問
 
Q、  " firewall-cmd --reload " コマンドって 意味あるの? reload しなくても反映されてるような。。
 
- - -
 
ポート番号 での 指定  --zone=public --remove-port=80/tcp では、  reload しなくても 反映された。
 
しかし、 サービス名 での指定の場合は、 reload  しないと、反映されていない部分が見受けられた。
( # firewall-cmd --list-all の結果に違いが出る  )
 
ただ  ポート番号の指定であっても、 reload する方が 確実で無難そう。冗長な気はするが、、
 

 
 
Q、サービスと ポート 両方 許可しないとダメか? ポートだけではダメか?
 
- - - 
 
-> ざっくり挙動 を 観た感じ では、片方で良いはず。
 
ただ、個人的には、 ポート番号指定 か サービス名指定  どちらかに統一すべき。
 
ポート番号 で指定した場合、コマンドで 確認しやすい。
# firewall-cmd --list-ports 
443/tcp 22/tcp
 
 
 両方の定義方法を混ぜた場合、煩雑であり、閉じたつもりが、認識違いで 片方空いていたら、目も当てられない。
 
 ただし、使い分けたい場合、もしくは、設定を2重で確実にしたい (?) などの場合は、両方の定義を使う ということになるかと思います。
 
「Firewalld Centos7」の画像検索結果
 
 

 < 余談 >
 
22/tcp 以外で ssh  させたい場合。
例えば 41451/tcp でやりたい場合は、Firewall の設定を以下のようにする。
 
# firewall-cmd --zone=public --remove-service=ssh --permanent
# firewall-cmd --zone=public --remove-port=22 --permanent
firewall-cmd --zone=public --add-port=41451/tcp --permanent
# firewall-cmd --reload
 
上から順に、
- 念のため ssh サービス を 閉じる ( 恒久的に )
- 22番ポート を 閉じる ( 恒久的に )
41451番ポート を開放する ( 恒久的に )
- 設定をリロード
 

 
< まとめ >
 
○ 本件、指定方法の違いにより、挙動が 微妙に違っていたので、その記録 が主旨です。
 
○ 例えば 普通の webサーバー が 80 番で 稼働中の時、firewalld 的に、 80/tcp が空いている状態 or httpサービスが 開放 状態の時、アクセス される。
 
○ サービス 名 指定 と ポート番号 指定、 どちらも 行なっている人は ここを特に気をつける。
意図せず、ポート or サービスが 空いていた、、なんてことがないようにしましょう。
 
○ また、 firewall-cmd は、 まだ version  が 0.4.4.4 ( 2018/10月 初旬現在 ) ということもあり、個人的には この仕様のままかどうかが懐疑的。
 仕様変更がないかどうか、 将来わからないので、大事なシステム導入の際には、今回のように挙動の確認 を 取っておくのがベター なのではないかと個人的には思った🤔