最近のCentOS7やFedoraなどはデフォルトでfirewalldが有効になっており、基本的にポートは塞がっている。
サービスを提供するには、適切に設定されたサーバアプリケーションと適切なポート開放が必要となる。例えばwebサーバの場合apacheなどを設定し起動、その後firewalldの設定を行い80番のポートを開放する必要がある。
このページではCentOSのポート解放についてお伝えしよう。
目次
そもそもポートとは?
念のためご紹介しておこう。
TCPやUDPで通信を行うときは、コンピュータ単位ではなく「プロセスやスレッド単位」で通信が行われる。この時の通信の窓口がポートである。
ネットワーク間でやり取りされる情報の基礎は「プロトコル」と「アドレス」と「ポート番号」この三つが主軸になっている。
日本語におとしこむと「どのような方法」(プロトコル)で「どこ」(アドレス)の「何号室」(ポート)でアクセスするか?という話になる。
ポートの種類
一般的なサービスを提供するため、決め打ちされたポートが多く存在している。これらは任意で変更できるが、基本的にはそのまま使用することが多い。
セキュリティのために変えることもあるが、特にはじめて勉強するときは同じままにしたほうがいいだろう。
0~1023までを「ウェルノウンポート番号」という。これらはIANAという団体により管理されていて、だいたい割り振りが決まっている。
そのなかでも代表的なポートをあげてみよう。
- TCP 20 : FTP (データ)
- TCP 21 : FTP (制御)
- TCP 22 : SSH
- TCP 23 : Telnet
- TCP 25 : SMTP
- UDP 53 : DNS
- UDP 67 : DHCP(サーバ)
- UDP 68 : DHCP(クライアント)
- TCP 80 : HTTP
- TCP 110 : POP3
- UDP 123 : NTP
- TCP 443 : HTTPS
などだ。
CentOSでポートを実際に設定してみる
例えばwebサーバを稼動させて、ポートを解放してみよう。
今回はLAN内部でwebサーバを稼動させfirewalldの設定を施しポートを開放することにする。
取り敢えずサービスであるhttpdをインストールしサービスを有効化しよう。
サーバアプリのインストール
# yum install httpd
# systemctl start httpd
起動時にサーバを起動させたいならば
# systemctl enable httpd
としておくとよいだろう。
firewalldのポートを開ける
webサーバを運営するうえで、解放しなければならないポートは80番となっている。firewalldにはメジャーなサービスを許可するためのテンプレートが用意されている。
# firewall-cmd --zone=public --add-service=http
とするとWebサーバのTCP、80番ポートが開放される。しかしこれは一時的な反映だ。恒久的な設定をするには、
# firewall-cmd --zone=public --add-service=http --permanent
としておこう。
最後に、
# firewall-cmd --reload
として恒久的な設定を反映させる。
設定を確認してみよう
# firewall-cmd --list-all
servicesの項目にhttpが追加された。
この時点でローカルエリアネットワーク内であればブラウザのURLにサーバのIPアドレスを入力すればサーバの稼働が確認できるはずだ。
ポートを直接開く
またサービス単位ではなくポートを直接開く方法もある。
試しにTCPの443ポートを開放してみよう。
即時反映
# firewall-cmd --zone=public --add-port=443/tcp
恒久的な設定の反映
# firewall-cmd --zone=public --add-port=443/tcp --permanent
リロード
# firewall-cmd --reload
設定を確認してみよう。
# firewall-cmd --list-all
portsの項目に443/tcpが追加されているのがわかる。
ポートが開いているか確認
一般的に他のマシンから、サーバマシンへポートスキャンを行うと、どのポートが開放されているか知ることができる。代表的なポートスキャナとして「nmap」というプログラムがある。単にポートのチェックをしたいだけならば以下のようにすればよい
取り敢えずnmapをインストールしよう。
他のマシンでパッケージマネージャを使ってインストールしよう。
CentOS系の場合
# yum install nmap
一応、Debian系の場合も
# apt-get install nmap
これでインストールされるはずだ。後は
# nmap <アドレス>
とすればよい。
例えば192.168.12.18というIPアドレスを持つサーバがあるとする。nmapがインストールされたマシンから、サーバマシン192.168.12.18へポートスキャンするには以下のようにすればよい。
# nmap 192.168.12.18
ssh及び、httpとhttpsを提供するためのポートが開いているのが確認できる。
もしくはポートをインターネットからスキャンしてくれるサービスも存在する。
参考:https://www.cman.jp/network/support/port.html
しかし外部のネットワークから、ルータを越えてスキャンを実行する場合、ルータのポートも開放しなければならないことに気をつけよう。ルータの設定はメーカー毎に違うため細かくは触れないが。大概は「ポート開放」という項目があるだろう。
ポートに関してはこちらも参照してほしい
まとめ
このページではCentOSでのポート解放についてお伝えした。ポート番号やサービスを予め把握しておき、コマンドでオープンにしていくイメージだ。
何度かチャレンジしてみて様子を確認してみよう。
リロードコマンドのハイフンが一つ少ないと思います。
firewall-cmd --reload
こちらご指摘ありがとうございます。修正させていただきます。
"ポートを直接開く"のリロードコマンドのハイフンが一つ少ないです。
firewall-cmd --reload
コメント頂きありがとうございます。
ご指摘の通り、-reload → --reload となります。該当箇所の記述を訂正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。