[サーバ]
OS:OpenBSD3.8
ネットワークインタフェース:bge0(190.x.x.3)の1枚
[クライアント]
OS:WinXP(190.x.x.2)
[ルータ]
190.x.x.1
ルータにOpenBSDとXPをLANで接続
##PFの設定##
scrub in all
block in all
block out all
pass quick on lo0 all
antispoof for bge0 inet
block drop in quick inet proto udp from any to any port 514
block drop in quick inet proto udp from any to any port 4500
pass in quick on bge0 proto tcp from any to 190.x.x.3 port 80 keep state
#########
この状態で、
XPからnmapでnmap 190.x.x.3とすると
PORT STATE SERVICE
80/tcp open http
となります。
次にnmap -O 190.x.x.3とすると、
PORT STATE SERVICE
80/tcp open http
Running: OpenBSD 3.X
OS details: OpenBSD 3.5 or 3.6, OpenBSD 3.6, OpenBSD 3.7と表示されてしまいます
http://hacks.oreilly.com/pub/h/1347
などを見て同じように書いてみたんですが、
nmap -O してみると、上の状態と同じ表示がでます。
パケットのウインドウサイズがOpenBSDは他のOSとことなっている?ので~とかかいていたような。
80番ポートを空けている時点でOSの種類をわからなくすることって無理なのでしょうか?
あれー、そうですか。間違ったことを言ってごめんなさい。
nmap には nmap-os-fingerprints というファイルがあって、
冒頭には
# TEST DESCRIPTION: # Tseq is the TCP sequenceability test # T1 is a SYN packet with a bunch of TCP options to open port # T2 is a NULL packet w/options to open port # T3 is a SYN|FIN|URG|PSH packet w/options to open port # T4 is an ACK to open port w/options # T5 is a SYN to closed port w/options # T6 is an ACK to closed port w/options # T7 is a FIN|PSH|URG to a closed port w/options # PU is a UDP packet to a closed port
と書いてありますから、おもにフラグで調べているようです。でも TCP シーケンスの働きとかまで見るので、新しい nmap ではフラグだけじゃダメなのかもしれませんね。
で、
Fingerprint OpenBSD 3.5 - 3.7 Class OpenBSD | OpenBSD | 3.X | general purpose TSeq(Class=TR%gcd=<6%IPID=RD%TS=2HZ) T1(DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T2(Resp=Y%DF=Y%W=0%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=Y%W=4000%ACK=S++%Flags=AS%Ops=MNWNNT) T4(DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(DF=Y%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
という部分が該当しますので、ここらへんを見ながら PF で何とかすることもできそうですが、面倒になるので正直おすすめしません。こういうセキュリティの基幹部分において「面倒」というのは非常に危険ですから。
御存じと思いますが、OS タイプを隠すというのは、(security from obscurity って言うんですか)、「windows はソースが非公開だからセキュアだ」と言っているようなもので、真のセキュリティではないわけです。PF であまり細かく OS を隠そうとしている人は多くないと思います。それよりは pf.conf をシンプルに堅牢にしておくことを優先したほうが良さそうですから。
http://archives.neohapsis.com/archives/openbsd/2005-04/1335.html
でも簡単に
block in from any os NMAP to any
みたいなこともできるので、この程度のことは結構みんなやっているかもしれません。
お役に立てなくて、申しわけありませんでした。
quick を使ってあるので、
pass in quick on bge0 proto tcp from any to 190.x.x.3 port 80 keep state
の前にそのオライリーのサイト情報みたいな
block return in quick proto tcp flags FUP/WEUAPRSF block return in quick proto tcp flags WEUAPRSF/WEUAPRSF block return in quick proto tcp flags SRAFU/WEUAPRSF block return in quick proto tcp flags /WEUAPRSF block return in quick proto tcp flags SR/SR block return in quick proto tcp flags SF/SF
を書けば nmap の目を逃れることができそうです。