セキスペの過去問を解いていたらポートスキャンに関する問題が出てきた。
synを送ってその反応を見る、というもので、
まず「それを何というか」という問題があり、「ポートスキャン」と回答したが、
正解は「SYNスキャン」であった。
SYNスキャンはポートスキャンの一種なので間違いではないが、
SYNだけ送って、そのあとSYNACKが返ってきてもセッションを確立しないので、
スキャン先に接続履歴を残したくないときに使うそうだ。
もう一つの問題は、「ポートが閉じているときにどういう反応があるか」というもので、
私は「応答なし」と答えたのだが正解は「RSTACK受信」および「応答なし」であった。
私は応答がないと思い込んでいたので、えっと思って
パソコンでwiresharkを起動して自分のサーバへのアクセスで試してみた。
接続できないはずのtelnetアクセスをしてみると応答がない。
しかしそれはポートが開いてるかどうか以前にiptablesで許可していないからだと気づき、
一時的にiptablesを無効にして、再度telnetしてみた。
RST,ACKが返ってくる。
なるほど。
以前nmapでポートスキャンしたときに、「ポートにアクセスできないがフィルターされているかもしれない」みたいな結果が出たことがあった。
これはsynに応答がなかった場合であろう。
サーバでtelnetサービスが動いていてもiptablesとかその前のFW装置で許可されていなければ応答が返ってこない。
だから応答が返ってこない場合はポートが開いているか閉じているかはわからない。
今書いていて思ったのだが、ポートが開いていないときにRSTを返さないような設定ができるんじゃないだろうか?
できないか?
まあいい。ふつうはRST ACKが返るということがわかった。
ところで、「ポートが開いている」という言い方をよくするが、
私はまだ若いころ、その確認方法がよくわからなかった。
どこかに設定ファイルがあって、開けるポート番号または閉じるポート番号を指定してあるのだと思っていた。
しかし、サーバ(RedHat9)設定のどこを探してもそのような設定はない。
そのサーバではiptablesは設定していなかった。設定方法も知らなかった。
検証環境のサーバだからだ。
調べていくうちにiptablesのこともわかってきたのだが、
iptablesは確かに通信を許可するポートを開けたり閉めたりするが、
いわゆる「ポートが開いている」というのはそのことを言うのではない。
まあ、ユーザや運用管理者にとっては「FWで閉じている=閉じている」
ということでよいだろう。
しかし、「FWで開いている=開いている」にはならない。
というか、そもそも「ポートが開いている」という言い方が不正確で誤解を生む。
開いているという言い方だとFWで開け閉めするのを想像するが、
正確には「そのポートをリッスンしているサービスが稼働している」
という状態である。
たとえばtelnetサービスを有効にしていてその使用ポートが23であれば、
「TCP23が開いている」となる。
使用ポートは変更できるので、telnetサービス(正確にはtelnetサーバサービス)が動いている=23番が開いているとも言えない。
そんな人はいないと思うが、telnetで80番を使うようにすることもできる(よね?)。
私のサーバではtelnetは動作していず、sshが動作していてポート番号は22でないものに変更している。
このとき、「TCP23は開いていず、SSH接続できるがTCP22は開いていない」という状態になる。
そして、iptablesでTCP23とTCP22は拒否しているので、
ポートスキャンするといずれも応答が返らない。
しかし、その結果だけからは、サーバの手前の別装置のFWやアクセスリストで拒否されているのか、
サーバのiptablesで拒否されているのか、サーバがダウンしているのか、はわからない。
アクセスしているIPアドレスが間違っている可能性もある。
pingは返ってくる、80番はアクセスできる、23番は応答がない、
であればFWかサーバのiptablesで拒否されているとわかる。
このブログを検索
2019/04/07
2008/08/27
「ポートが開いている」とは
私の職場でRedHat Linux9を使っている。古いOSであるが理由があって使っている。
「ポート」について、疑問を感じたことがある。ポートは必要最小限のものしか開けてはならない、と言うことは知っている。
今、自分自身をポートスキャンしてみると、telnet とか ftpとかで使用するポートが開いているのがわかる。全部で10個もないくらいである。
だが、私はこのLinuxマシンで、一度もポートを開ける設定も閉める設定もした覚えはない。インストールするときに、ファイアウォールを設定するか、というところでファイアウォールなしにした記憶はある。
それなのに、ちゃんと必要最低限のポートしか開いていないのである。一体どこに、このポートは開けて、このポートは閉める、という設定がしてあるのか、探してみたがわからない。
inetd.confが非常に怪しいとにらんだ。nmapで開いているとされているポートで使用しているサービスがここで設定されているからだ。ここに設定するとポートが開くんだな、とほとんど確信しかけたが、ntpは設定されていないし、それ以外にも開いているポートがいくつかある。
nmapの結果
キーワードをいろいろと変えて検索してみたがどこにも「xxxのxxxをxxxxするとポートが開放される」などとは書いていなかった。
しかし、「ポートの開放の仕方なんか少し調べればすぐ見つかるよ」見たいな冷たい反応はたくさんみつかった。iptablesがどうのこうの、という情報もたくさん見つかったが、iptablesなど設定していないし、確認したがすべてのポートが許可されている。
一体、どこの誰がポートを開けているのか!?
......
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10465&forum=10&4
を見て。
どうやら、「あるポートが開いている」というのは、「あるポートを使って通信をおこなっているサービスが存在している」という意味のようだ。
つまり、ftpdを稼動させれば21番などが開いているということになる。窓のようなポートというものが存在している訳ではないようである。
iptablesというのは、それとは違って、サービスの状況によらずポートをフィルタリングする。だから、iptablesで何もフィルタリングしていない状態であっても、サービスがなにもしていなければ、ポートは開いていないということになる。
「ポート」について、疑問を感じたことがある。ポートは必要最小限のものしか開けてはならない、と言うことは知っている。
今、自分自身をポートスキャンしてみると、telnet とか ftpとかで使用するポートが開いているのがわかる。全部で10個もないくらいである。
だが、私はこのLinuxマシンで、一度もポートを開ける設定も閉める設定もした覚えはない。インストールするときに、ファイアウォールを設定するか、というところでファイアウォールなしにした記憶はある。
それなのに、ちゃんと必要最低限のポートしか開いていないのである。一体どこに、このポートは開けて、このポートは閉める、という設定がしてあるのか、探してみたがわからない。
inetd.confが非常に怪しいとにらんだ。nmapで開いているとされているポートで使用しているサービスがここで設定されているからだ。ここに設定するとポートが開くんだな、とほとんど確信しかけたが、ntpは設定されていないし、それ以外にも開いているポートがいくつかある。
nmapの結果
PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 70/tcp open gopher 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 513/tcp open login 672/tcp open unknown 901/tcp open samba-swat PORT STATE SERVICE 69/udp open|filtered tftp 111/udp open|filtered rpcbind 123/udp open|filtered ntp 137/udp open|filtered netbios-ns 138/udp open|filtered netbios-dgm 836/udp open|filtered unknown 32768/udp open|filtered omad inetd.conf ftp telnet gopher login tftp swat
どうなっているんだ・・・。そもそも、「ポートが開いている」とはどういう状態なのか?
キーワードをいろいろと変えて検索してみたがどこにも「xxxのxxxをxxxxするとポートが開放される」などとは書いていなかった。
しかし、「ポートの開放の仕方なんか少し調べればすぐ見つかるよ」見たいな冷たい反応はたくさんみつかった。iptablesがどうのこうの、という情報もたくさん見つかったが、iptablesなど設定していないし、確認したがすべてのポートが許可されている。
一体、どこの誰がポートを開けているのか!?
......
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10465&forum=10&4
を見て。
どうやら、「あるポートが開いている」というのは、「あるポートを使って通信をおこなっているサービスが存在している」という意味のようだ。
つまり、ftpdを稼動させれば21番などが開いているということになる。窓のようなポートというものが存在している訳ではないようである。
iptablesというのは、それとは違って、サービスの状況によらずポートをフィルタリングする。だから、iptablesで何もフィルタリングしていない状態であっても、サービスがなにもしていなければ、ポートは開いていないということになる。