暇だったので遊んでみた。
今までは、sshguardでブラックリスト入りしたIPアドレスからのパケットはpfではじいていたが、これを kippo にリダイレクションしてどんなことしてくるか観察してみた。
暇だったので遊んでみた。
今までは、sshguardでブラックリスト入りしたIPアドレスからのパケットはpfではじいていたが、これを kippo にリダイレクションしてどんなことしてくるか観察してみた。
日々やってくるCharlie Rootからのセキュリティレポートを見ていると、コネクションを張ってすぐ切るようなログがたくさん出ていて、sshguardでブロックできていないようなので、pfで対策してみた。
Feb 10 14:13:46 xxxx sshd[91606]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:13:46 xxxx sshd[91608]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:13:47 xxxx sshd[91610]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:14:01 xxxx sshd[91612]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:14:08 xxxx sshd[91614]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:14:11 xxxx sshd[91616]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:15:00 xxxx sshd[91618]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:16:22 xxxx sshd[91622]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:16:38 xxxx sshd[91624]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:16:51 xxxx sshd[91626]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:16:52 xxxx sshd[91628]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:17:05 xxxx sshd[91630]: fatal: Read from socket failed: Connection reset by peer [preauth] Feb 10 14:17:09 xxxx sshd[91632]: fatal: Read from socket failed: Connection reset by peer [preauth]
/etc/pf.conf に以下の行を追加。外部のIPv4アドレスからは60秒に5回までしかアクセス許可しない設定。
table <bruteforce> persist block in quick on $ext_if from <bruteforce> to any label "ssh bruteforce" pass in quick on $ext_if inet proto tcp from !<white4_ext> to any port 22 flags S/SA keep state \ (max-src-conn 15, max-src-conn-rate 5/60, overload <bruteforce> flush global)
これでしばらく様子を見てみる。
主に毎日送られてくるCharlie rootメールの配信用にPostfixをインストールして設定した.
下記ページを参考にした.
http://www.postfix.org/SOHO_README.html
pkgngにあるものはsmtp認証で使うSASLが無効になっているので,Portsから入れる.
# cd /usr/ports/mail/postfix/ # make config # make all-depends-list
で依存関係を確認し,pkg コマンドで依存するパッケージをいれておく.
その際に,make configでSASL2にチェックを入れておくと,cyrus-sasl2が依存リストに現れる.
依存するパッケージが入ったら,make allでビルドし,make install でインストールする.
generic(5) を見るとこう書いてある.
DESCRIPTION The optional generic(5) table specifies an address mapping that applies when mail is delivered.
EXAMPLE The following shows a generic mapping with an indexed file. When mail is sent to a remote host via SMTP, this replaces his@localdomain.local by his ISP mail address, replaces her@localdomain.local by her ISP mail address, and replaces other local addresses by his ISP account, with an address extension of +local (this example assumes that the ISP supports "+" style address extensions). /usr/local/etc/postfix/main.cf: smtp_generic_maps = hash:$config_directory/generic /usr/local/etc/postfix/generic: his@localdomain.local hisaccount@hisisp.example her@localdomain.local heraccount@herisp.example @localdomain.local hisaccount+local@hisisp.example Execute the command "postmap /usr/local/etc/postfix/generic" whenever the table is changed. Instead of hash, some systems use dbm database files. To find out what tables your system supports use the command "postconf -m".
というわけなので,rootはrose-admin@~,それ以外はそのままドメインをつけるということで,
root@rose:/usr/local/etc/postfix # cat generic root@rose.everblooming.net rose-admin@everblooming.net @rose.everblooming.net @everblooming.net
と書く.最後に postmap コマンドでdbファイルを更新し,main.cfに
smtp_generic_maps = hash:$config_directory/generic
を追加.
この辺参照.main.cf に以下を追記し,
relayhost = [everblooming.net]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd smtp_use_tls = yes smtp_sasl_security_options = noanonymous, noplaintext smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain, login
sasl_passwd に配送用のアカウント情報(ID, パスワード)を記載する.
[<host>]:<port> <id>:<password>
の形式で記載する.
ファイルを保存したら postmap でdb化する.また,パスワードを保存するファイルなので,root以外読み書きできない様にする.
sendmailのと同じなので,
<id>: <転送先>
の形式で書いて,/usr/local/bin/newaliases を実行しておわり.
DN2820FYKHにFreeBSDを入れるにあたって,ここのzfs設定を見直し.
前提は基本的に同じ.インストーラで入れると,bsdinstallからzfsbootというスクリプトが呼ばれるので,これも参考にする.
FreeBSDを入れるマシンが欲しくなって,これを買ってみた.
HDDは日立の0S03509 (1TB),メモリはCFDのD3N1600Q-L4G (4GB).
CPUはN2820ではなくN2830が載っていて,dmesgではこんな表示.
CPU: Intel(R) Celeron(R) CPU N2830 @ 2.16GHz (2166.73-MHz K8-class CPU) Origin = "GenuineIntel" Id = 0x30678 Family = 0x6 Model = 0x37 Stepping = 8 Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE> Features2=0x41d8e3bf<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,MOVBE,POPCNT,TSCDLT,RDRAND> AMD Features=0x28100800<SYSCALL,NX,RDTSCP,LM> AMD Features2=0x101<LAHF,Prefetch> Structured Extended Features=0x2282<TSCADJ,SMEP,ERMS> VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID TSC: P-state invariant, performance statistics
ネットでいろいろ見てみるとWindows8.1以外のOSを立ち上げるのにいろいろクセがあるみたいで,BIOSを最新にして,EFI BootはOFF,Legacy Bootのみにし,OSタイプをWindows7にしたら問題なくFreeBSD-10.1Rが起動出来て,インストールもできた.
FreeBSD機 (Core2 duo),NetBSD機 (Raspberry pi)に同じpf.confを入れたが,FreeBSDでは動いて,NetBSDでは動かず.
具体的には,以下のルールがNetBSDでは弾かれる.icmp6は知らん,と.
pass inet6 proto icmp6 all
man pf.confを見るとicmp6って書いてあるが,その下に/etc/protocolsを見るとも書いてある.
proto <protocol> This rule applies only to packets of this protocol. Common protocols are icmp(4), icmp6(4), tcp(4), and udp(4). For a list of all the protocol name to number mappings used by pfctl(8), see the file /etc/protocols.
念のため,FreeBSDとNetBSDでicmp6がどう載っているか比べてみた.
FreeBSD
ipv6-icmp 58 IPV6-ICMP icmp6 # ICMP for IPv6
NetBSD
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6 [RFC2460]
NetBSDにはicmp6が入っていなかった.NetBSD,FreeBSDどちらもipv6-icmpなら載っているので,pf.confにはipv6-icmpと書くことにした.
pass inet6 proto ipv6-icmp all
FreeBSD 10-STABLE / arm のビルドメモ.
10-STABLE用のフォルダをzfsで用意して,svnで持ってくる.
# zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/usr/src_stable10 # cd /usr # svn co https://svn0.us-west.freebsd.org/base/stable/10 src_stable10
crochet-freebsdというFreeBSD/armのブートイメージを作成するためのスクリプトが用意されているので,それを持ってくる.また,展開したフォルダにu-bootのソースも置いておく必要があり,合わせて取得.
# cd /usr/local # git clone https://github.com/kientzle/crochet-freebsd.git # cd crochet-freebsd # git clone https://github.com/gonzoua/u-boot-pi.git u-boot-rpi
crochet-freebsdのconfig.sh.sampleをコピーして編集する.
# diff -uN config.sh.sample config.sh --- config.sh.sample 2014-05-14 00:09:50.436616000 +0900 +++ config.sh 2014-05-14 00:15:05.937593000 +0900 @@ -25,7 +25,7 @@ #board_setup GenericI386 #board_setup PandaBoard #board_setup Soekris -#board_setup RaspberryPi +board_setup RaspberryPi #board_setup VersatilePB #board_setup ZedBoard #board_setup Wandboard @@ -45,7 +45,7 @@ # Suggested: option ImageSize #option ImageSize 100mb # for kernel-only images #option ImageSize 1950mb # for 2 Gigabyte card -#option ImageSize 3900mb # for 4 Gigabyte card +option ImageSize 3900mb # for 4 Gigabyte card # # How to Customize Your Build @@ -85,7 +85,7 @@ # couple of extra reboots, which can make this occasionally perplexing # to use. # -#option AutoSize +option AutoSize # Enable emailed status notifications. # This can also be enabled via the -e command-line flag. @@ -147,7 +147,7 @@ # it will tell you how to get appropriate sources into this directory. # (I find FREEBSD_SRC=${TOPDIR}/src to be useful.) # -#FREEBSD_SRC=/usr/src +FREEBSD_SRC=/usr/src_stable10 # You will probably never override this, but you may need to # understand it: WORKDIR holds all of the created and temporary files
crochet-freebsdのフォルダでスクリプトを実行し,しばし待つ.
# sh crochet.sh -c config.sh
出来上がったイメージをSDに焼いてブート.イメージは work/FreeBSD-armv6-10.0-RPI-B-r.img として出来上がる.
Raspberry pi をちょっとしたサーバー(ntpdとかリゾルバとか)にしようと思って、FreeBSD 10-STABLE を自前ビルドして、ここ数日動かしてみた。
が、どうにも安定しない。sshdが突然signal 11で落ちる。これじゃ、使いものにならない。
SDカードが壊れてるのかなぁとも思ったけど、色々試す気力もなく、再びNetBSDに戻ってみることにする。
FreeBSD/armのビルドは追々まとめようと思う。
このサイトを動かしているレンタルサーバーがリニューアルした.
容量UPとかいろいろうれしい変更があるけど,個人的に注目していたのはFreeBSD 9.1Rになるのと,IPv6対応.
早速,dmesgを見てみた.
(dmesgコマンド自体は封印されているけど,/var/run/dmesg.bootは見える)
年末にFreeBSD機が壊れてしまってさみしくなってしまったのでUbuntuを入れているPCにFreeBSDを入れた.
以前,9.1RC2をZFSに入れたけど,もう少し細かく設定したので手順を書き直し.
1GBのSDカードに10-Rの64ビット版 FreeBSD-10.0-RELEASE-amd64-memstick.img を書き込んでUSBブート.
普通にインストーラを使ってインストールを進めるが,途中のディスクの設定のところはZFSを選ばず,Shellを選ぶ.一度ZFSにしてみたが,パーティションの切り方に満足できなかったので,一度作ったZFSを参考に手動で作ることにした.
WD REDの1TB 1本のみ使う.ミラーにはしない.4kセクターなディスクなのでzfsパーティションを作るときにちょっと気を使ってあげる.swapはZFSのプール内に作る.
# gpart destroy -F ada0 # gpart create -s gpt ada0 # gpart add -s 512k -a 4k -t freebsd-boot -l boot0 ada0 # gpart add -a 4k -t freebsd-zfs -l disk0 ada0
一旦,gnopで作ったラッパーデバイスでzfsを作り,export,nop削除,importする.
# gnop create -S 4096 /dev/gpt/disk0 # kldload zfs # zpool create -o altroot=/mnt -O canmount=off -m none rpool /dev/gpt/disk0.nop # zpool export rpool # gnop destroy /dev/gpt/disk0.nop # zpool import -o altroot=/mnt -o cachefile=/tmp/zpool.cache rpool
# zfs set checksum=fletcher4 rpool # zfs set atime=off rpool
# zfs create -o mountpoint=none rpool/ROOT # zfs create -o mountpoint=/ rpool/ROOT/default
/直下のフォルダにはmountpointプロパティを設定し,それ以下は単に作るだけ.必要に応じて圧縮とsetuidなどを設定する.
# zfs create -o mountpoint=/tmp -o compression=lz4 -o setuid=off rpool/tmp # chmod 1777 /mnt/tmp # zfs create -o mountpoint=/usr rpool/usr # zfs create rpool/usr/local # zfs create rpool/usr/obj # zfs create -o compression=lz4 -o setuid=off rpool/usr/ports # zfs create -o compression=off -o exec=off -o setuid=off rpool/usr/ports/distfiles # zfs create -o compression=off -o exec=off -o setuid=off rpool/usr/ports/packages # zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/usr/src # zfs create -o mountpoint=/home rpool/home # zfs create -o mountpoint=/var rpool/var # zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/crash # zfs create -o compression=lz4 -o exec=off -o setuid=off rpool/var/log # zfs create -o compression=lz4 -o atime=on rpool/var/mail # zfs create -o compression=lz4 -o exec=on -o setuid=off rpool/var/tmp # chmod 1777 /mnt/var/tmp
# zpool set bootfs=rpool/ROOT/default rpool
# zfs create -V 12G -o org.freebsd:swap=on -o checksum=off rpool/swap
shellをexecで抜けてインストールの続きを実行.
# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf # echo 'zfs_load="YES"' >> /mnt/boot/loader.conf # cp /tmp/zpool.cache /mnt/boot/zfs/
これだけだとなぜか起動せず.PMBRの1番目のパーティションにアクティブフラグがついていない.
fdisk -aを実行するため,一度インストーラを抜けてもう一度USBからブートし,Live CDを選択.
# 前回のときは起動した気がするんだけどなぁ.
# fdisk -a /dev/ada0
これでおしまい.