[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:77177] how to shut off all ports with ipchains (was Re: Re:一番簡単なセキュリティー対策方法)


こんにちは。松田陽一 _at_ PAL-NET三鷹です。
質問の内容を変更します。
一応、関連する話題ということで、In-Reply-To: 及び References: を
残しておきました。

From: MATSUDA Yoh-ichi / 松田陽一 <matsuda _at_ palnet.or.jp>
Subject: [linux-users:77127] Re: 一番簡単なセキュリティー対策方法
Date: Tue, 5 Dec 2000 10:35:00 +0900

> 例えば、ダイヤルアップサーバにおいて、全てのポートを閉めて、尚且つ
> IPマスカレードを用いて、 web 閲覧、 ftp アクセス、メール取り込み程
> 度のことができれば十分、という要求を満たすにはどうしたら良いのか、
> とか。

私を含め、常時接続環境を持つ個人ユーザーが増加しています。
Linux BOX をダイヤルアップルータにして、常時接続環境にする場合、
下手をすると踏み台にされてしまう恐れがあります。
最低限、外部へのサービスを行う必要が無いなら、不要なポートは閉め
なければならないと思います。
ポートを閉める、ということは、ダイヤルアップユーザに限らず、常時
接続環境において最低限やらなければならないことではないかと思いま
す。

この時点での私の認識に間違いがありましたらご指摘下さい。

ポートを閉める、となると、現状では 2.2 系カーネルに対応する ipchains
を使うことになるかと思います。
mini-HOWTO 及び HOWTO 文書が出ていますが、いわゆる「典型的なスタ
イル」としてのシェルスクリプトの書き方の定石みたいなものが未だ示
されていないように思います。

先ず、私は ipchains-mini-HOWTO に書かれている事例

http://www.linux.or.jp/JF/JFdocs/ipchains-mini-HOWTO.html

及び、 debian-users ML でのスレッド

   Linkname: [debian-users:24982] Re: ipchainsのログ機能
        URL: http://lists.debian.or.jp/debian-users/200011/msg00074.html

を参考に、現在以下のように設定しています。

--- /etc/ppp/ip-up ---
#!/bin/sh
#
# $Id: ip-up,v 1.2 1998/02/10 21:25:34 phil Exp $
#
# This script is run by the pppd after the link is established.
# It uses run-parts to run scripts in /etc/ppp/ip-up.d, so to add routes,
# set IP address, run the mailq etc. you should create script(s) there.
#
# Be aware that other packages may include /etc/ppp/ip-up.d scripts (named
# after that package), so choose local script names with that in mind.
#
# This script is called with the following arguments:
#    Arg  Name                          Example
#    $1   Interface name                ppp0
#    $2   The tty                       ttyS1
#    $3   The link speed                38400
#    $4   Local IP number               12.34.56.78
#    $5   Peer  IP number               12.34.56.99
#    $6   Optional ``ipparam'' value    foo

# The  environment is cleared before executing this script
# so the path must be reset
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH
# These variables are for the use of the scripts run by run-parts
PPP_IFACE="$1"
PPP_TTY="$2"
PPP_SPEED="$3"
PPP_LOCAL="$4"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"
export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM


# as an additional convenience, $PPP_TTYNAME is set to the tty name,
# stripped of /dev/ (if present) for easier matching.
PPP_TTYNAME=`/usr/bin/basename "$2"`
export PPP_TTYNAME 

# Main Script starts here

run-parts /etc/ppp/ip-up.d

# last line

# 以下がまつだが設定したもの

# ppp-in チェインの設定 (ipchains-mini-HOWTO より)
/sbin/ipchains -N ppp-in
/sbin/ipchains -A input -i ppp0 -j ppp-in

# ポート 6000, 7000 を DENY
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL 6000 -j DENY -l
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL 7000 -j DENY -l

# ip 偽装を DENY
/sbin/ipchains -A ppp-in -s 192.168.10.0/24 -j DENY -l

# ポート 1024〜65535 の tcp syn パケットを DENY
/sbin/ipchains -A ppp-in -s 0/0 -d $PPP_LOCAL 1024:65535 -p tcp -y -j DENY -l

# ポート 1024〜65535 の syn パケット以外の tcp パケットを ACCEPT
/sbin/ipchains -A ppp-in -s 0/0 -d $PPP_LOCAL 1024:65535 -p tcp ! -y -j ACCEPT

# ポート 1024〜65535 の udp パケットを ACCEPT
# これを指定しないと DNS 参照ができない
/sbin/ipchains -A ppp-in -s 0/0 -d $PPP_LOCAL 1024:65535 -p udp -j ACCEPT

# ssh を ACCEPT
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d 0/0 ssh -j ACCEPT
/sbin/ipchains -A ppp-in -p udp -s 0/0 -d 0/0 ssh -j ACCEPT

# 一部の pop server の為に auth を ACCEPT
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d 0/0 auth -j ACCEPT

# ntp を ACCEPT
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d 0/0 ntp -j ACCEPT
/sbin/ipchains -A ppp-in -p udp -s 0/0 -d 0/0 ntp -j ACCEPT

# 以下より ICMP の ACCEPT
#    Linkname: Linux IPCHAINS-HOWTO: IP ファイアウォーリングチェイン
#         URL: http://www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-4.html

# ping を ACCEPT
/sbin/ipchains -A ppp-in -p icmp -s 0/0 echo-reply -d 0/0 -j ACCEPT

# "destination unreachable" を ACCEPT
/sbin/ipchains -A ppp-in -p icmp -s 0/0 destination-unreachable -d 0/0 -j ACCEPT

# ping を ACCEPT
/sbin/ipchains -A ppp-in -p icmp -s 0/0 echo-request -d 0/0 -j ACCEPT

# traceroute を ACCEPT
/sbin/ipchains -A ppp-in -p icmp -s 0/0 time-exceeded -d 0/0 -j ACCEPT

# 上記以外は DENY
/sbin/ipchains -A ppp-in -j DENY -l
--- end of /etc/ppp/ip-up ---


私は Debian 2.2 (potato) を使用しており、 /etc/network/interfaces
には、以下のように設定しています。

iface eth0 inet static
    address 192.168.10.1
    network 192.168.10.0
    netmask 255.255.255.0
    broadcast 192.168.10.255

    up ipchains -A forward -s 192.168.10.0/24 -d 0.0.0.0/0 -j MASQ
    up ipchains -A input -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
    up ipchains -A output -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
    up ipchains -A input -s 0/0 -d 192.168.10.0/24 -j DENY

forward チェインには MASQ を設定し、ローカルネットワーク同士は全
て ACCEPT にしています。

ここで質問です。

(1) 上記設定で、
    ・ssh, auth, ntp 以外の well-known ポートを閉めた
    ・1024番以降のポートは SYN パケットをブロックするようにした
    と思いますが、上記内容に何処か不備はあるでしょうか?

(2) 上記設定で、 nmap -sU を実行すると、

WARNING:  -sU is now UDP scan -- for TCP FIN scan use -sF

Starting nmap V. 2.12 by Fyodor (fyodor _at_ dhp.com, www.insecure.org/nmap/)
Interesting ports on p0842-ip03higasisibu.tokyo.ocn.ne.jp (211.122.46.80):
Port    State       Protocol  Service
1       open        udp        tcpmux          
2       open        udp        compressnet     
3       open        udp        compressnet     
4       open        udp        unknown         
5       open        udp        rje             
6       open        udp        unknown         
7       open        udp        echo            

    以下、延々と udp ポートが開いている、という旨のメッセージが
    続きます。
    well-known ポートについては全てブロックしている筈なのに、何
    故このようなメッセージが出るのでしょうか?
    事実、 well-known ポートに対する udp でのスキャンは、
    /var/log/messages に記録されています。
    本当に udp は DENY されているのでしょうか?

(3) また、1024番以上のポートにおいて、 udp をブロックすることは
    できません。
    DNS 参照にどうしても必要だからです。
    これ以上の対策としては、何をすべきなのでしょうか?
    udp を用いる攻撃に対して、 ipchains にて何を設定すれば良い
    のでしょうか?


From: Tatsuya BIZENN <bizenn _at_ visha.org>
Subject: [linux-users:77131] Re: 一番簡単なセキュリティー対策方法
Date: Tue, 5 Dec 2000 10:54:43 +0900

> 備前です。またまた割込み。

どうもです。^^

> > 例えば、ダイヤルアップサーバにおいて、全てのポートを閉めて、尚且つ
> > IPマスカレードを用いて、 web 閲覧、 ftp アクセス、メール取り込み程
> > 度のことができれば十分、という要求を満たすにはどうしたら良いのか、
> > とか。
> 
> そこまで具体的にやってること、やりたいことが提示されているのなら、具体
> 策を提示することも可能になりますね。元の方のメッセージには、そういう情
> 報はなかったように思います。

了解です、今回はこの内容に基づいて質問をしました。
元の質問をされた方のことについては無視しています。
何故なら、もう既に色々な方が問題点を指摘しているからです。

> > 一連の議論をずっと見ていて思ったのですが、具体的な方策が示されない
> > ので、初心者である私は歯がゆい思いで読んでいました。
> 
> 具体的な目的や守りたいものや状況が説明されない限り、方策を示すのは不可
> 能でしょう。前述した「原則」は示せますが、そんなものは Web や書籍にい
> くらでも転がってる情報ですよね?

「原則」も大事だとは思います。
が、既にその概念は示されていると思います。
私のような理解力の不足している者に対しても十分に示されているかど
うかは別として。

今求められているのは、具体的な事例ではないかと考えます。
にわか管理者云々以前に、最低限、「家に鍵をかける方法」が必要では
ないかと思います。
その上で、「典型的な鍵のかけ方」を明確に示すものが見つからなかっ
たので、敢えてこのような質問をしました。

# 「家に鍵をかける」というくだりは私のオリジナルではなく、DMを下
# さった宮本久仁男さんのメールから拝借しました。(__)
--
よぉ、ちぇきらっ、ちょぉ!(ぼうよみ)
松田 陽一(yoh)
mailto:matsuda _at_ palnet.or.jp (メールアドレス変更しました)
http://www2.palnet.or.jp/~matsuda/index.htm

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: