Debian/GNU Linux に防火壁を設定する

環境

参考

目次


インストールするパッケージ

iptables を aptitude, dselect, apt-get でインストールします。
後は Debian のパッケージマネージャに「おまかせコース」です。


設定

iptables の操作は、root 権限で行います。
なお、このサーバが「直接外に繋がっているならば」という想定でフィルタを設定します。

設定の確認

現在の設定を確認します。 これは同時に iptables が機能しているかの確認にもなります。

~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 

Chain FORWARD (policy ACCEPT)
target prot opt source destination 

Chain OUTPUT (policy ACCEPT)
target prot opt source destination 
~#

ついでに、サーバ機のLANインタフェースとIPアドレスを確認します。

~# ifconfig
eth0 Link encap:Ethernet HWaddr ??:??:??:??:??:?? 
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:906003 errors:0 dropped:0 overruns:0 frame:0
TX packets:618475 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 
RX bytes:144957189 (138.2 MiB) TX bytes:96715281 (92.2 MiB)

lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:15646 errors:0 dropped:0 overruns:0 frame:0
TX packets:15646 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 
RX bytes:1181367 (1.1 MiB) TX bytes:1181367 (1.1 MiB)

Macアドレスは機器割り出しの材料になるので、念のために隠しておきます。
ゴメンなさいね。

更に、netstat で、どこのポートが使われているかも調べておきましょう。

~# netstat -a
tcp 0 0 *:imaps *:* LISTEN 
tcp 0 0 *:pop3s *:* LISTEN 
tcp 0 0 *:time *:* LISTEN 
tcp 0 0 *:discard *:* LISTEN 
tcp 0 0 localhost:mysql *:* LISTEN 
tcp 0 0 *:daytime *:* LISTEN 
tcp 0 0 *:pop3 *:* LISTEN 
tcp 0 0 *:imap2 *:* LISTEN 
tcp 0 0 *:www *:* LISTEN 
tcp 0 0 *:auth *:* LISTEN 
tcp 0 0 *:ftp *:* LISTEN 
tcp 0 0 gomimaki.inco.jp:domain *:* LISTEN 
tcp 0 0 localhost:domain *:* LISTEN 
tcp 0 0 *:ssh *:* LISTEN 
tcp 0 0 *:smtp *:* LISTEN 
tcp 0 0 localhost:rndc *:* LISTEN 
udp 0 0 *:1024 *:* 
udp 0 0 *:discard *:* 
udp 0 0 gomimaki.inco.jp:domain *:* 
udp 0 0 localhost:domain *:* 
udp 0 0 gomimaki.inco.jp:ntp *:* 
udp 0 0 localhost:ntp *:* 
udp 0 0 *:ntp *:* 

全部表示させているので、かなりの量がありました。
とりあえずTCPとUDPだけを抜き出しましたが、それにしてもイロイロ動いていますねぇ。(^^;)

見せるものと隠すものは?

サーバ運用の方針を決めましょう。
機器構成は単純に「LAN が一つ」なので、「基本的に入力は禁止,出力は可」で良いでしょう。
後は必要に応じて出さないようにしていきます。
Windowsは、とてもお喋りです。 ネットワーク関係(135,139,445/tcp 135,137,138,445/udp)は、外に出しても意味がありませんから、止めておく事を勧めます。
Macは使っていないので判りませんが、どうなのでしょうね。 念のために 515,548/tcp くらいは止めておくのが良いかもしれません。

次に、サーバの外に見せるもの、つまり、受け付けるポートを選びます。
先ほどの netstat の結果を参考にすると…
TCPは、ftp, domain, smtp, www 辺りでしょうか。 UDPは、domain だけで良さそうです。
auth は…どうしましょうか。 サーバ機からftpやsshを利用することも考えて、開いておくのも良いのですが、イロイロと探りを入れる方がいらっしゃるようなので、無視(DROP)ではなく拒否(REJECT)辺りで妥協してみましょう。(レスポンスが悪ければ、開くことも検討します)