Linuxでポートを閉じる方法は?

Linuxでポートを閉じる方法は?

ポートを閉じることについていくつかの質問がありますが、何か奇妙なことが起こったようです。

使用して実行するとき

nmap --top-ports 10 192.168.1.1

これは、ポート23 / TCPが開いていることを示します。

しかし、私が実行するとき

nmap --top-ports 10 localhost

ポート 23/tcp が閉じていることを示します。

次のうちの事実は何ですか?システム全体でこのポートを閉じたいです。どうすればいいですか?

答え1

Nmapは素晴らしいポートスキャナーですが、時にはより権威のあるものが欲しい場合もあります。このユーティリティを使用して、どのプロセスでどのポートが開いているかをカーネルに尋ねることができますnetstat

My@myhost:~$ sudo netstat -tlnp
アクティブなインターネット接続(サーバーのみ)
Proto Recv-Q Send-Qローカルアドレス外部アドレスステータスPID /プログラム名
tcp 0 0 127.0.0.1:53 0.0.0.0:* リスニング 1004/dnsmasq    
tcp 0 0 0.0.0.0:22 0.0.0.0:* モニタ 380/sshd        
tcp 0 0 127.0.0.1:631 0.0.0.0:* リスニング 822/cupsd       
tcp6 0 0 :::22 :::* 380/sshd モニタリング        
tcp6 0 0 ::1:631 :::* 822/cupsdを聞く       

私が与えたオプションは次のとおりです。

  • -tTCPのみ
  • -lリスニングポートのみ
  • -nサービス名とホスト名を見つけずに数字のみを表示します。
  • -pプロセス情報の表示(root権限が必要)

sshdこの例では、すべてのインターフェイス(0.0.0.0)ポート22が受信されており、cupsdループバック(127.0.0.1)ポート631が受信されていることがわかります。出力にtelnetdローカルアドレスが表示されることがあります192.168.1.1:23。これは、ループバックアダプタの接続に応答しないことを意味します(応答できないなどtelnet 127.0.0.1)。

同様の情報を表示できる他のツール(例:lsofまたは/proc)がありますが、netstatが最も広く使用されています。 Windowsでも実行されますnetstat -anb()。 BSD netstatは少し異なります。ソックス統計(1)プロセス情報を得るために

プロセスIDとプログラム名がある場合は、プロセスを見つけてポートを閉じたいときにプロセスを終了できます。より詳細な制御のために、ファイアウォール(Linuxの場合はiptables)を使用して特定のアドレスにのみアクセスを制限できます。サービスの起動を無効にする必要があるかもしれません。 Linuxでは、PIDが「-」の場合はカーネルプロセスである可能性が高いので(たとえばNFSで一般的である)、それが何であるかを調べてください。

注:ネットワークの状態やファイアウォールのために邪魔にならないので、「権限あり」と言います。お使いのコンピュータを信頼すれば良いです。ただし、ハッキングされたと思われる場合は、コンピュータのツールを信頼できない可能性があります。攻撃者が標準ユーティリティ(時にはシステムコールまで)を特定のプロセスやポート(ルートキットとも呼ばれる)を隠すユーティリティに置き換えるのが標準的な方法です。この時点で最良の方法は、ディスクのフォレンジックコピーを作成してバックアップから復元し、そのコピーを使用してディスクがどのように入ったかを確認して終了することです。

答え2

ポートを「閉じる」ために利用可能iptables

sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP

答え3

Linuxシステムには、内部通信用のいわゆるループバックインターフェースがあります。ホスト名はlocalhost、IPアドレスはです127.0.0.1

あなたnmapが走るlocalhostとき仮想ループバックインターフェイス。192.168.1.1あなたのIPアドレスは何ですか物理(おそらくeth0)インターフェース。

したがって、2つの異なるネットワークインターフェイスで実行されているため、開いているnmapポートに違いがあります。それらはすべて本当です。

TCPポート23が開いていると、telnetサーバーが実行されているか(暗号化の欠如のために悪い)、コンピュータに一種のトロイの木馬がある可能性があります。

答え4

もし確かに、よりクリーンなポート23でサービスが実行され、リッスンしています。止めるtelnet実行を維持するのではなく、ポート23(おそらく)でリッスンするプロセス閉鎖またはブロックポート23が使用されますiptables

ポートを受信するプロセスがない場合、ポートをブロックするファイアウォールがなくてもポートに接続しようとすると、すぐに「接続拒否」(ECONNREFUSEDto connect(2))が発生します。

ポート23(該当するプロセスがある場合)でリッスンしているプロセス(および対応するpid)を見つける1つの方法は次のとおりです。

sudo lsof -i -P | grep ':23 '

-iオープンインターネットポート(UDPとTCP)は上にリストされており、-Pはポートをサービス名に変換することを無効にします(pass /etc/services)。

ポート23でリッスンしている実行中のプロセスが見つかったら、pstreeプロセスツリー(例:)を見て、そのプロセスがどのように開始されたかを確認できます。親プロセスはinit(最も可能性が高い)プロセス名の下で再帰的に検索できます/etc。たとえば、

sudo grep -r telnet /etc

これにより、最初から実行を無効にする最良の方法を見つけることができます。

関連情報