港を閉鎖する際に質問がありますが、奇妙なことがありました。
実行するとき
nmap --top-ports 10 192.168.1.1
23 / TCPポートが開いていることを示しています。
しかし、私が実行するとき
nmap --top-ports 10 localhost
23 / tcpポートが閉じていることを示しています。
どちらが本当ですか?システム全体でこのポートを閉じたいのですが、どうすればいいですか?
港を閉鎖する際に質問がありますが、奇妙なことがありました。
実行するとき
nmap --top-ports 10 192.168.1.1
23 / TCPポートが開いていることを示しています。
しかし、私が実行するとき
nmap --top-ports 10 localhost
23 / tcpポートが閉じていることを示しています。
どちらが本当ですか?システム全体でこのポートを閉じたいのですが、どうすればいいですか?
回答:
Nmapは優れたポートスキャナーですが、より信頼できるものが必要な場合があります。netstat
ユーティリティを使用して、どのプロセスがどのポートを開いているかをカーネルに問い合わせることができます。
me @ myhost:〜$ sudo netstat -tlnp アクティブなインターネット接続(サーバーのみ) Proto Recv-Q Send-Qローカルアドレス外部アドレス状態PID /プログラム名 tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1004 / dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 380 / sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 822 / cupsd tcp6 0 0 ::: 22 ::: * LISTEN 380 / sshd tcp6 0 0 :: 1:631 ::: * LISTEN 822 / cupsd
私が指定したオプションは次のとおりです。
-t
TCPのみ-l
リスニングポートのみ-n
サービス名とホスト名を検索せず、数字を表示するだけです-p
プロセス情報を表示する(ルート権限が必要)この場合、我々はそれを見ることができます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は少し異なります。代わりにsockstat(1)を使用してプロセス情報を取得する必要があります。
プロセスIDとプログラム名を取得したら、ポートを閉じたい場合は、プロセスを見つけて強制終了できます。よりきめ細かい制御を行うには、ファイアウォール(Linuxではiptables)を使用して、特定のアドレスのみへのアクセスを制限できます。サービスの起動を無効にする必要がある場合があります。LinuxでPIDが「-」の場合、それはおそらくカーネルプロセス(たとえばNFSで一般的です)であるため、それが何であるかを見つけるのは幸運です。
注:ネットワークの状態やファイアウォールの影響を受けないため、「信頼できる」と言いました。コンピューターを信頼するなら、それは素晴らしいことです。ただし、ハッキングされた疑いがある場合は、コンピューター上のツールを信頼できない可能性があります。特定のプロセスまたはポート(別名ルートキット)を隠すものに標準ユーティリティ(および場合によってはシステムコール)を置き換えることは、攻撃者の間での標準的な慣行です。この時点で最善の策は、ディスクのフォレンジックコピーを作成し、バックアップから復元することです。次に、コピーを使用して、彼らが入った方法を決定し、それを閉じます。
Linuxシステムには、内部通信用のいわゆるループバックインターフェイスがあります。ホスト名はlocalhost
で、IPアドレスは127.0.0.1
です。
あなたが実行するときnmap
にlocalhost
、あなたが実際にポートスキャンを実行する仮想ループバックインターフェイス。物理(ほとんどの場合)インターフェース192.168.1.1
のIPアドレスです。eth0
したがってnmap
、2つの異なるネットワークインターフェイスで実行しているため、開いているポートに違いがあるのはこのためです。両方とも真実です。
TCPポート23を開いている場合は、telnet
サーバーが実行されている可能性があります(暗号化がないため、これは良いことではありません)。または、マシンに何らかのトロイの木馬があります。
iptables
近くの回答が示唆するようにルールを追加できますが、それはサービスを未使用のままにし、リソースを消費します。したがって、実行してtelnetd
いる場合は、シャットダウンしてください。
使用できるポートを「閉じる」には iptables
sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
DROP
、それが言うように、パケットを見て、それを無視することに注意してください。通常(iptablesが有効になっていない場合)、カーネルはICMPポート到達不能パケットを送信します(これはのREJECT
代わりにターゲットでシミュレートできますDROP
)。
REJECT
書き込みによってターゲットを-j REJECT --reject-with tcp-reset
。
その場合nmap localhost
、別の状況について説明します。Linux上の一部のプログラムはサーバーとして機能しますが、ローカルでのみ使用されます。これは、他のプログラムが接続先サーバーのようにそれらを使用するためです。あなたは何か違うことを尋ねるので、両方の答えは本当です。
ポート23はtelnetに使用されます。通常はもう使用されません。nmap -sV 192.168.1.1
どのプログラムがポートを開くかを確認してください。
(192 ...はローカルネットワークIPであるため、nmap <your outside world IP>
ファイアウォールの設定などにより、結果も異なる結果になります)
場合は、ポート23で実行されているサービスやリスニングを持って、それがために間違いなくクリーンで停止(おそらくポート23に耳を傾け、そのプロセスtelnet
)が実行し続けるとするよりも、近いまたはブロック使用して、ポート23をiptables
。
ポートでリッスンするプロセスがない場合、ファイアウォールブロックがない場合でも、ポートに接続しようとすると、すぐに「接続拒否」(ECONNREFUSED
to connect(2)
)になります。
そのようなプロセスがある場合、ポート23でリッスンするプロセス(およびそのpid)を見つける1つの方法は次のとおりです。
sudo lsof -i -P | grep ':23 '
上記の-i
リストでは、開いているインターネットポート(UDPとTCPの両方)、および-Pはポートのサービス名への変換を禁止します(経由/etc/services
)
ポート23でリッスンしている実行中のプロセスが見つかったら、プロセスツリー(たとえば、pstree
)を見て、どのように開始されたかを把握できます。その親がinit
(非常に可能性が高い)の場合、プロセスの名前を再帰的に検索できます/etc
。例えば:
sudo grep -r telnet /etc
これにより、1位での実行を無効にする最良の方法が得られます。
sudo lsof -Pi :23
。
23
)のみが一致することを確認します。あとはスペースを含めない場合:23
、それは一致する:234
、:2345
など
lsof -Pi :23
)のないコマンドは完全に一致するものを探しているようです。
localhost
はlo
(ループバック)インターフェイスにアクセスしています。IPアドレスは、おそらく、あなたの本当のインターフェースをaccesingされるeth0
か、wlan0
またはsomesuch。