DMZ内の実験サーバ(Squeeze)の初期設定


 これが無くてもクリーンなSqueezeではvmnetは動作したが、
 もしかしたら、このLANドライバが原因かも知れない。
 ただ、LennyからSqueezeにアップデート後もしばらく使えていたので、
 なんとも言えない。。。

 パッケージ: firmware-linux-nonfree (0.28+squeeze1) [non-free]
 http://packages.debian.org/squeeze/firmware-linux-nonfree

■squidとsquidGuardを導入する。

$ sudo apt-get install -y rsync

 下位プロキシサーバとしてのSquidの設定
 http://d.hatena.ne.jp/labunix/20111224

 SqueezeにもsquidGuardを導入 
 http://d.hatena.ne.jp/labunix/20120312

 debian SquidGuardでブロックログを出力
 http://d.hatena.ne.jp/labunix/20120315

■Exim4からpostfixに変更
 ※マニュアル上は「/etc/postfix/transport」

$ sudo apt-get install -y postfix
スマートホスト付きインターネット
「smtp.localhost」の削除

$ sudo dpkg-reconfigure postfix
root と postmaster のメール受け取りユーザ:
ローカルネットの設定

$ sudo cp -pi /etc/postfix/main.cf /etc/postfix/main.cf.org
$ sudo vim /etc/postfix/main.cf
$ sudo diff /etc/postfix/main.cf /etc/postfix/main.cf.org
32d31
< transport_maps = hash:/etc/transport
$ cat /etc/transport
mail.labunix.net       :
mail2.labunix.net          smtp:192.168.177.177
vmsqueeze.localdomain    smtp:192.168.164.177
vmlenny.localdomain    smtp:192.168.233.177
*                               :
$ sudo postmap /etc/transport

■clamav+amavis+spamassassinとpostfix(procmail)連携

$ sudo apt-get install -y sharutils

 Squeezeにclamavを導入。EICARチェック
 http://d.hatena.ne.jp/labunix/20120423

 squeezeのclamavとpostfix連携(amavis)
 http://d.hatena.ne.jp/labunix/20120430

 spamassassinでヘッダ情報に「X-Spam」を追加する
 http://d.hatena.ne.jp/labunix/20120501

■Sambaの設定
 /home配下にディレクトリを持ち、smbpasswdが有効なユーザのみ。

$ sudo apt-get install -y samba
$ echo `whoami` | sudo smbpasswd -a `xargs`
$ echo `whoami` | sudo smbpasswd -e `xargs`
$ sudo cp -pi /etc/samba/smb.conf /etc/samba/smb.conf.org
$ sudo diff /etc/samba/smb.conf /etc/samba/smb.conf.org  239d238
<    path=/home/%S
244c243
<    write list = %S
---
>

$ testparm 2>&1 | grep -A 8 "^\[homes"

[homes]
        comment = Home Directories
        path = /home/%S
        valid users = %S
        write list = %S
        create mask = 0700
        directory mask = 0700
        browseable = No

$ sudo /etc/init.d/samba restart

■ntpサーバの導入

 Debian Lenny + ntp でうるう秒の監視メール
 http://d.hatena.ne.jp/labunix/20120201

$ diff /etc/ntp.conf /etc/ntp.conf.org
21,25c21,25
< #server 0.debian.pool.ntp.org iburst
< #server 1.debian.pool.ntp.org iburst
< #server 2.debian.pool.ntp.org iburst
< #server 3.debian.pool.ntp.org iburst
< server -4 ntp.nict.jp iburst
---
> server 0.debian.pool.ntp.org iburst
> server 1.debian.pool.ntp.org iburst
> server 2.debian.pool.ntp.org iburst
> server 3.debian.pool.ntp.org iburst
>
37c37
< #restrict -6 default kod notrap nomodify nopeer noquery
---
> restrict -6 default kod notrap nomodify nopeer noquery
41c41
< #restrict ::1
---
> restrict ::1

$ sudo /etc/init.d/ntp restart

■ntpdateの導入
 2番目の権威サーバで、LIフラグが「00」で正常。

$ sudo apt-get install -y ntpdate
$ sudo /etc/init.d/ntp stop;sudo ntpdate -d ntp.nict.jp;sudo /etc/init.d/ntp start
$ sudo ntpq -c rv | sed s/", "/"&\n"/g | grep "^leap\|^stratum" | column
leap=00,        stratum=2,

■ntpサーバだけだと同期に時間がかかる場合は以下もチェックする。

$ sudo ntptime | grep ^ntp
ntp_gettime() returns code 0 (OK)
ntp_adjtime() returns code 0 (OK)

■ntpサーバの次回の同期先をチェック。

$ sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-b3.nict.go. .NICT.           1 u   58   64  177   10.472  -15.134  11.479

■Snortの導入

 ※snortの設定は手動でも出来るが、「dpkg-reconfigure」で良い。
$ sudo dpkg-reconfigure snort

 Lenny 侵入検知システムsnortでApachekillerを検出
 http://d.hatena.ne.jp/labunix/20110917

 Snortの警告の対応方法のテンプレート
 http://d.hatena.ne.jp/labunix/20120512

 snortのログによるディスクフル、/tmpのオーバーフロー 
 http://d.hatena.ne.jp/labunix/20111219

■iptablesの導入

$ wget -O smallfirewall \
  "http://sourceforge.jp/users/labunix/pf/smallfirewall/git/?a=blob_plain&h=26e03fa53a75bfd2cdd673bbd4680685e2bd92bd&f=smallfirewall"
$ chmod +x smallfirewall
$ sudo ./smallfirewall
Usage ./smallfirewall [-v|-c|-i|-u|--report|--smallfirewall|--test|-w|-h]
      or [-v|--version] or [-c|--cechk]
      or [-i|--install] or [-u|--uninstall]
      or [--report] or [-h|--help]  or [--smallfirewall]
         # arg option
         [--test "iptables-command"]
         [-w|--watch second]

    example debuf facility log : /var/log/iptables.log

$ vim /etc/rsyslog.conf
###############
#### RULES ####
###############
kern.debug  /var/log/iptables.log
:syslogtag, contains, "iptables" ~

$ sudo /etc/init.d/rsyslog restart
  -v|--version
    version info
  -c|--check
    check file or directory path
  -i|--install
    install /etc/init.d/itables
    rpm beta version
  -u|--uninstall
    uninstall /etc/init.d/iptables
    if not use ./smallfirewall,check before uninstall env file,and delete it.
    rpm beta version
    ./smallfirewall --check
  --report
    report iptables command format
    example : sort /var/log/sfwreport.log | uniq -c | sort -k 1
  --smallfirewall
    /etc/iptables-save to /etc/smallfirewall script
    support filter only
  --test "iptables command"
    test mode itables command
    example :
  ./smallfirewall --test "iptables -A INPUT -i eth0 -p tcp --sport 22 -j ACCEPT"
  -w|--watch [sec]
    use watch command,default 10 second
  -h|--help|*
    this help messages
$ sudo ./smallfirewall -i

■ログ用に以下を準備する。
 「smallfirewall」の最初にあるとおり、rsyslog.confの設定変更も行う。

 設定、ログファイルからiptablesコマンドに変換する
 http://d.hatena.ne.jp/labunix/20120318

$ sudo cat /etc/iptables-save
*filter
[0:0] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -i eth0 -j LOG --log-level=7 --log-prefix="iptables "
[0:0] -A FORWARD -i lo -j LOG --log-level=7 --log-prefix="iptables "
[0:0] -A FORWARD -i eth0 -j LOG --log-level=7 --log-prefix="iptables "
[0:0] -A OUTPUT -o lo -j ACCEPT
[0:0] -A OUTPUT -o eth0 -j  LOG --log-level=7 --log-prefix="iptables "
COMMIT

$ sudo vim /etc/rsyslog.conf
$ sudo /etc/init.d/rsyslog restart

■iptablesのルールを適用、確認、再保存

$ sudo iptables-restore -c /etc/iptables-save
$ sudo iptables -L -v -n | grep LOG
   34  2385 LOG        all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 7 prefix `iptables '
    0     0 LOG        all  --  lo     *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 7 prefix `iptables '
    0     0 LOG        all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 7 prefix `iptables '
   22  3497 LOG        all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 7 prefix `iptables '
$ su root -c ' iptables-save -c > /etc/iptables-save '
$ cat /etc/iptables-save
# Generated by iptables-save v1.4.8 on Sun Jun 17 14:14:01 2012
*filter
:INPUT ACCEPT [170:12870]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [122:13354]
[0:0] -A INPUT -i lo -j ACCEPT
[170:12870] -A INPUT -i eth0 -j LOG --log-prefix "iptables " --log-level 7
[0:0] -A FORWARD -i lo -j LOG --log-prefix "iptables " --log-level 7
[0:0] -A FORWARD -i eth0 -j LOG --log-prefix "iptables " --log-level 7
[0:0] -A OUTPUT -o lo -j ACCEPT
[122:13354] -A OUTPUT -o eth0 -j LOG --log-prefix "iptables " --log-level 7
COMMIT
# Completed on Sun Jun 17 14:14:01 2012

■ログを集めて設定変更

$ sudo ./smallfirewall --report
$ sudo less /var/log/sfwreport.log
iptables -A OUTPUT -o eth0 -s 192.168.177.177 -d 192.168.177.188 -p TCP --sport 139 --dport 2896 -j ACCEPT
$ sudo vim /etc/iptables-save
...
[0:0] -A OUTPUT -o eth0 -s 192.168.177.0/32 -d 192.168.177.0/32 -p tcp -m tcp --sport 139 -j ACCEPT
...
$ sudo iptables-restore -c /etc/iptables-save
$ su root -c ' iptables-save -c > /etc/iptables-save '

■一通り済んだら、iptables.logを空にしてrsysllogを再起動
 sfwreport.logも空になるはず。

$ su root -c 'echo "" > /var/log/iptables.log '
$ sudo /etc/init.d/rsyslog restart
$ sudo ./smallfirewall --report
See /var/log/sfwreport.log
and delete /var/log/sfwreport.tmp
$ wc -l /var/log/sfwreport.log
0 /var/log/sfwreport.log

■nmapの導入。

 ※今回はapacheが無いので、apachekillerのチェックが出来ない。

 Lennyのiptablesをデーモン化
 http://d.hatena.ne.jp/labunix/20120208

 iptables にnetbios名前解決用のポートを追加する
 http://d.hatena.ne.jp/labunix/20111105

$ sudo nmap `hostname -s` 2>&1 | grep "^PORT\|^[0-9]"
PORT     STATE SERVICE
25/tcp   open  smtp
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3128/tcp open  squid-http
8022/tcp open  unknown

■rpcbindポートを削除

$ apt-cache show portmap | grep -A 6 ^Description-ja
Description-ja: RPC ポートマッパー
 portmap は RPC (リモートプロシージャコール) プログラム番号を DARPA プロ
 トコルのポート番号に変換するサーバーです。RPC コールを作るためには、動
 作していなければなりません。
 .
 RPC を使うサービスには、NFS や NIS が含まれます。
Homepage: http://neil.brown.name/portmap/

$ dpkg -l | grep nfs | awk '{print $2}'
libnfsidmap2
nfs-common

$ sudo /etc/init.d/nfs-common stop
$ sudo /etc/init.d/portmap stop
$ sudo apt-get purge libnfsidmap2 nfs-common portmap

$ sudo nmap `hostname -s` 2>&1 | grep "^PORT\|^[0-9]"
PORT     STATE SERVICE
25/tcp   open  smtp
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3128/tcp open  squid-http
8022/tcp open  unknown

■pstreeから不要なパッケージがないかチェック
 ※実機なのでacpidはあっても良い。

$ pstree
init─┬─acpid
     ├─amavisd-new───2*[amavisd-new]
     ├─atd
     ├─clamd───{clamd}
     ├─cron
     ├─dbus-daemon
     ├─freshclam
     ├─6*[getty]
     ├─master─┬─pickup
     │        ├─qmgr
     │        └─tlsmgr
     ├─nmbd
     ├─ntpd
     ├─rsyslogd───3*[{rsyslogd}]
     ├─smbd───2*[smbd]
     ├─snort
     ├─spamd───2*[spamd]
     ├─squid─┬─8*[squidGuard]
     │       └─unlinkd
     ├─sshd───sshd───sshd───bash───pstree
     └─udevd───2*[udevd]

■パッケージ数の確認。

$ dpkg -l | grep ^ii | wc -l
379

■UDPポートのチェック
 ※3130はloに対しての通信。

$ sudo nmap -sU `hostname -s` 2>&1 | grep "^PORT\|^[0-9]"
PORT     STATE         SERVICE
123/udp  open|filtered ntp
137/udp  open|filtered netbios-ns
138/udp  open|filtered netbios-dgm
3130/udp open|filtered squid-ipc

■gnomeの導入

$ sudo apt-get install -y gdm gnome-terminal
$ sudo apt-get build-dep gdm
$ sudo apt-get build-dep gnome-terminal
$ gnome-terminal &

■vmware-player/vmware-vixの導入
 ※sshでは無くコンソールからgdmにログイン、gnome-terminalで作業する

 vmwareのinitスクリプト修正for Squeeze
 http://d.hatena.ne.jp/labunix/20120114

 Debian Lenny-amd64版のシステム起動パーティションが壊れ
 http://d.hatena.ne.jp/labunix/20111020

$ sudo apt-get install -y gcc linux-headers-`uname -r`
$ su
# env DISPLAY=":0.0" ./VMware-Player-4.0.2-591240.x86_64 --console
# env DISPLAY=":0.0" ./VMware-VIX-1.11.2-591240.x86_64 --console
# exit
$ sudo /etc/init.d/vmware status
Module vmmon not loaded
Module vmnet not loaded

$ sudo /etc/init.d/vmware start
Starting VMware services:
   Virtual machine monitor                                             done
   Virtual machine communication interface                             done
   VM communication interface socket family                            done
   Blocking file system                                                done
   Virtual ethernet                                                    done
   VMware Authentication Daemon                                        done
   Shared Memory Available                                             done

■XDMCP設定

$ grep -v "^\$\|^\#" /etc/gdm/gdm.conf
[daemon]
RemoteGreeter=/usr/lib/gdm/gdmgreeter
[security]
[xdmcp]
Enable=true
[gui]
[greeter]
Include=username
[chooser]
[debug]
[servers]
$ sudo /etc/init.d/gdm restart

■vmwareのNAT/HostOnlyのネットワークを変更する。

$ sudo /usr/lib/vmware/bin/vmware-netcfg &

■tg3のnonfreeを追加する。
 GUIでシングルウインドウはさすがにツライので、
 gnome-sessionを導入。その際、tg3が無いというエラーが出た。
 そういえば、インストール時にもLennyからSqueezeにアップデートした時にも出てた。

$ sudo apt-get install -y gnome-session
$ sudo apt-get build-dep gnome-session

$ w3m -dump http://ftp.jp.debian.org/debian/dists/squeeze/non-free/binary-amd64/
Index of /debian/dists/squeeze/non-free/binary-amd64

[ICO]       Name         Last modified   Size Description
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[DIR] Parent Directory                      -
[ ]   Packages.bz2     08-Oct-2011 19:44 100K
[ ]   Packages.gz      08-Oct-2011 19:44 121K
[ ]   Release          12-May-2012 21:07  100
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Apache/2.2.22 (Unix) Server at ftp.jp.debian.org Port 80

$ sudo cp -pi /etc/apt/sources.list /etc/apt/sources.list.org
$ sudo diff /etc/apt/sources.list /etc/apt/sources.list.org
3c3
< deb http://ftp.jp.debian.org/debian/ squeeze main non-free
---
> deb http://ftp.jp.debian.org/debian/ squeeze main

$ sudo apt-cache search firmware-linux-nonfree
firmware-linux-nonfree - Binary firmware for various drivers in the Linux kernel
firmware-linux-free - Linux カーネルの各種ドライバ用バイナリファームウェア
$ env DISPLAY="0.0" vmrun -T player start vmware/vmsqueeze/vmsqueeze.vmx nogui

■上位にFWがあるので、902/TCPの「vmware-authdlauncher」は少し緩めで良い。
 パッケージも1039。平常時は600MB前後のメモリ使用率。(2GBしか無いので。。。)

$ sudo vim /etc/iptables-save
...
[0:0] -A INPUT -i eth0 -s 192.168.177.0/24 -d 192.168.177.0/24 -p tcp -m tcp --dport 902 -j ACCEPT
[0:0] -A INPUT -i eth0 -s 192.168.177.0/24 -d 192.168.177.0/24 -p icmp -m icmp --icmp-type 3 -j ACCEPT
[0:0] -A OUTPUT -o eth0 -s 192.168.177.0/24 -d 192.168.177.0/24 -p tcp -m tcp --sport 902 -j ACCEPT
[0:0] -A OUTPUT -o eth0 -s 192.168.177.0/24 -d 192.168.177.0/24 -p icmp -m icmp --icmp-type 3 -j ACCEPT
...

$ sudo nmap `hostname -s` | grep "^PORT\|^[0-9]"
PORT     STATE SERVICE
25/tcp   open  smtp
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
902/tcp  open  iss-realsecure
3128/tcp open  squid-http
8022/tcp open  unknown

$ sudo nmap -sU `hostname -s` 2>&1 | grep "^PORT\|^[0-9]"
PORT     STATE         SERVICE
123/udp  open|filtered ntp
137/udp  open|filtered netbios-ns
138/udp  open|filtered netbios-dgm
177/udp  open|filtered xdmcp
3130/udp open|filtered squid-ipc

$ sudo netstat -an --program | grep 902
tcp        0      0 0.0.0.0:902             0.0.0.0:*               LISTEN      1973/vmware-authdla
$ ps -ef | grep vmware-auth | grep -v grep
root      1973     1  0 16:55 ?        00:00:00 /usr/sbin/vmware-authdlauncher

$ dpkg -l | grep ^ii | wc -l
1039

■vmnet8内に別のPCからアクセス

 vmnet8にIPマスカレード(Squeeze編)
 http://d.hatena.ne.jp/labunix/20120408

$ sudo grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward=1

$ su root -c 'echo "1" > /proc/sys/net/ipv4/ip_forward'
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -j MASQUERADE

$ sudo route add -net 192.168.72.0 netmask 255.255.255.0 192.168.177.188
> route add 192.168.72.0 mask 255.255.255.0 192.168.177.188 -p

■同DMZ内でのぺネストレーションテスト

 第6回 己を知り、敵を知る――Nmapで見つめ直す自分の姿
 http://www.atmarkit.co.jp/fsecurity/rensai/view06/view03.html

 簡単なスクリプトをgithubに置いてみました。
 https://github.com/labunix/penetration/blob/master/penetration.sh

$ cat penetration.sh
#!/bin/bash
set -e
PDATE=`date '+%Y%m%d'`
PDIR=/var/log/nmap

test -d "$PDIR" || mkdir "$PDIR"
test -d "$PDIR" && chmod 640 "$PDIR"
test -d "$PDIR" || exit 1

PLOG="${PDIR}/result_${PDATE}.log"

if [ $# -lt 1 ];then
  echo "Usage: $0 [target_ip_address]"
  exit 1
fi

TEMP=$1
TARGETIP=`echo "$TEMP" | awk -F\. '{print $1+0"."$2+0"."$3+0"."$4+0}'`
if [ "$TARGETIP" == "0.0.0.0" ];then
  echo "Error: Check Your Target IP!"
  exit 1
fi
if [ `id -u` -ne "0" ];then
fi
if [ `id -u` -ne "0" ];then
  echo "Sorry, Not Permit User!"
  exit 1
fi

# for All
# TCP Scan
#nmap -sT "$TARGETIP"
# UDP Scan
#nmap -sU "$TARGETIP"
# Xmas Scan
#namp -sX "$TARGETIP"
#
# for Snort or IPS/IDS
#
# Stealth SYN Scan
#namp -v -sS -O "$TARGETIP"
# ACK Scan
#nmap -v -sA -p 22,53,110,143 "$TARGETIP"
# NULL Scan(fragmented IP packet)
#nmap -v -f -sN -p 1-1023 "$TARGETIP"
#
nmap -sS -P0 -T4 -p 1-65535 -oN "$PLOG" -r -v -A "$TARGETIP"
chmod 400 "$PLOG"
unset PDATE PDIR PLOG TEMP TARGETIP

■その先のぺネストレーションテスト
 今回はFW内部のDMZ内で余分なポートが開いてないかのテストだが、
 更に深くチェックするには、例えば、以下のようなテストツールがある。

$ apt-cache search nessus
harden-remoteaudit - ホストからあなたのリモートシステムを検査
$ apt-cache search ^amap
amap-align - Protein multiple alignment by sequence annealing
$ apt-cache search metasploit
w3af-console - framework to find and exploit web application vulnerabilities (CLI only)
w3af - framework to find and exploit web application vulnerabilities