開いているポートを「閉じる」にはどうすればいいですか?

開いているポートを「閉じる」にはどうすればいいですか?

数日前から私は自分のデータセキュリティについて非常に気にするようになり、次のようなことをnmap自分に言い聞かせるようになりました。nmap 127.0.0.1

驚いたことに、localhost をリッスンするアクティブなサービスが多数あります。

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

私が唯一かもしれない使用方法はssh(おそらく適切に構成されていないため、この問題は別の質問として残しておきます)。

私の知る限り、ippCUPS はプリンターを共有するためにプロトコルを使用しますが、プリンターを共有する必要はなく、サーバーからプリンターにアクセスするだけです。

netstat -lntupこれは、ローカルホスト アドレスを削除した、ルート ユーザーによる出力です。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

実際に使用しているときだけ外部の世界をリッスンするようにこれらのサービスを構成するにはどうすればよいですか?

答え1

露出度を決定する

コマンドからの出力を見るとnetstat、多くのサービスのように見えますが、実際には非常に短いリストです。

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

地形を把握する

このリストを見ると、そのままにしておくべきサービスがいくつかあります。

  • dhクライアント
    • IP アドレスを取得する責任を負う DHCP サーバー デーモン。これは必須です。
  • ドロップボックス
    • Dropboxは必須です

削減を開始する - Sambaを無効にする

おそらく、すぐに Samba を無効にできます。これは、上記のサービスのうち 2 つを占めており、nmbdですsmbd。ローカルホスト上であろうと、ネットワークに面した IP 上であろうと、ラップトップで Samba を実行する必要があるかどうかは疑問です。

実行中かどうかを確認するには、次のコマンドを使用しますstatus

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

upstart、/etc/rc.d、ビジネスで起こっているすべての変化により、サービスをオフにすることは混乱を招く可能性があり、どのサービスがどのテクノロジーの下にあるかを把握することが難しい場合があります。Samba の場合は、次のserviceコマンドを使用できます。

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

さあ出発です:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

永久にオフにしておく

これらをオフにしておくために、私はこのツール を使ってsysv-rc-confコンソールからサービスを管理してきました。これは他のほとんどのツールよりもうまく機能します。実行するサービスと、どのランレベルで開始/停止するかを確認できます。

$ sudo apt-get install sysv-rc-conf

   sysv-rc-conf の ss

必要のない残りのものを無効にする

Samba がオフになったので、次の状態になります。

  • avahiデーモン
    • zeroconf(プラグアンドプレイ)の一部なので、オフにする
  • rpcbind
    • NFSに必要なのでオフにする
  • rpc.statd
    • NFSに必要なのでオフにする

残りの 3 つについても、Samba の場合と同じ操作を行ってオフにすることができます。

カップ?

ちなみに、CUPS をオフにするには、実際には必要ありませんが、サービスをオフにしてから起動を無効にするという同じ手順に従うことができます。印刷できるようにするには、システム上の各プリンターを個別に設定する必要があります。これは GUI から行うことができますsystem-config-printer

これらのサービスをオンデマンドで提供しますか?

これはまさにあなたの質問の核心ですが、これらのサービスを「スマート」にして、常にではなく、使用されているときに実行されるようにするための特効薬は実際には存在しません。

#1 - systemd と upstart

その一部は、現在の分裂であるシステムそして成り上がり者2つの競合する技術の概要がよくわかるここ

両方のテクノロジーは、機能セットを考慮すると、少し異なることをしようとしていると私は考えています。systemd はサーバー向けであるのに対し、upstart はデスクトップ向けであるように思われます。時間が経てば、これは自然に解決され、両方のサービスが安定し、機能が豊富になるでしょう。

最終的には、両方のサービスとも、管理するすべてのサービスに対して、オンデマンドの開始と停止を全面的に提供する予定です。たとえば、などの機能はStopWhenUnneeded=yesすでに存在しているためsystemd、これらの機能が具体化されるのは時間の問題です。

#2 - サービスサポート

一部のサービスは、停止/開始をまったくサポートしていません。このようなサービスは、sshd特に頻繁に使用される場合、オンデマンドで実行してもあまり意味がないようです。また、Apache などの一部のサービスは、自分自身で管理する独自のリスナーを多かれ少なかれ起動するためのメカニズムを内部に提供しています。そのため、オンデマンドがこれらのタイプのサービスによってどのように提供されるか、またはsystemdこれらupstartのサービスとどのように統合されるかは不明です。

これは本当に必要ですか?

これはやりすぎだ、あるいは絶対に必要なものだけをインストールするミニマリストのアプローチを取るべきだという意見が双方から聞かれるでしょうが、それは本当に個人的な選択です。これらのサービスが存在し、それが何をするのかを理解することが本当に重要です。結局のところ、コンピューターはツールであり、Unix システムを使用するということは、カーテンの裏側を覗いてコンピューターがどのように動くかを理解するつもりがあるということをすでに表明していることになります。

この種の疑問こそが、コンピューターや Unix 全般を扱うときに目指すべき心構えだと私は思います。

参考文献

答え2

127.0.0.1 は「外の世界」ではなく、家の中を見回しています。

ファイアウォールの設定 (現在の Linux では iptables) を確認してください。ほとんどのファイアウォールは外部からアクセスできないはずです。

必要のないサービスを実行しないでください。不要なソフトウェアはすべてアンインストールしてください。

変化パスワードより強力に。システムの使用状況を確認し、興味のあるウェブサイトを無作為に追いかけないようにしてください。ブラウザのフィッシング対策、スクリプト対策などの設定を確認してください。SSH と su/sudo の使用を見直してください。

しかし、何よりも過度の妄想は逆効果です。テクノロジーの輝き

答え3

個々のサービスを「シャットダウン」することもできますが、ファイアウォールをセットアップする方が簡単かもしれません。ほぼすべての一般的なディストリビューション (Ubuntu、Debian、Centos など) には、iptables のサポートが組み込まれています。

開始するためのシンプルなルール セット: (コマンド プロンプトでこれらを入力するだけです。永続的にするには、スタートアップ スクリプトに追加するか、使用しているディストリビューションをお知らせください。たとえば Centos の場合、system-config-firewall は iptables ルールを構成するための優れた UI です)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

基本的には、SSH の受信を許可し、その他はすべてドロップします。

INPUT チェーンは次のようになります。

  • 'ssh'のパケットがコンピュータに入ってきたら、許可する
  • パケットが以前のルールのいずれにも一致しなかった場合は、単に破棄します。

その後、後日、「samba」(Windowsファイル共有)を許可したいとします。次のように実行します。

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

-Iリストの先頭にルールを追加し、 はリストの末尾に-Aルールを追加します。したがって、チェーンは次のようになります。

  • 'samba'のパケットがコンピュータに入ってきたら、許可する
  • 'ssh'のパケットがコンピュータに入ってきたら、許可する
  • パケットが以前のルールのいずれにも一致しなかった場合は、単に破棄します。

チェーンINPUTは、システム宛てのパケットを指します。その他のチェーンは、OUTPUTコンピュータからインターネットに送信されるパケットと、FORWARDコンピュータを経由してルーティングされるパケット (つまり、空港のトランジット エリアのようにコンピュータを「通過する」パケット -INPUTコンピュータに入っていないため通過しないもの) 用です。

最後に、127.0.0.1 を nmap するのはあまり役に立ちません。多くのサービスは 127.0.0.1 からしかアクセスできず、他のアドレスからはアクセスできません。nmap を実行できる別のマシンがない場合は、Gibson Research の Shields UP! ( を使用してください。https://www.grc.com/shieldsup) - 無料のオンライン nmap-lite です。または、IP/メール アドレスをコメントに追加していただければ、私が nmap します :)

関連情報