sshピンポンダッシュ対策

投稿日: Leave a comment

日々やってくる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)

これでしばらく様子を見てみる。

Postfixの設定

投稿日: Leave a comment

主に毎日送られてくるCharlie rootメールの配信用にPostfixをインストールして設定した.

  • 外向けに配信する際につけるドメインはホスト名抜きにする.
  • 対応するメールアドレスはレンタルサーバー上で送受信できるよう,あらかじめ設定しておく.
  • 外向けに配信する際のリレーサーバーはレンタルサーバーを使う.
    また、smtp認証に対応させる.
  • ローカルユーザー宛のメールはaliasesで普段使っているアドレスに転送する.

下記ページを参考にした.

http://www.postfix.org/SOHO_README.html

1. Postfixのインストール

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 でインストールする.

2. 設定

(1) 外向けに配信する際にアドレス付与する設定

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

を追加.

(2) 外部配信でsmtp認証を使う設定

この辺参照.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以外読み書きできない様にする.

(3) alises

sendmailのと同じなので,

<id>: <転送先>

の形式で書いて,/usr/local/bin/newaliases を実行しておわり.

FreeBSD-10.1RELEASE on ZFS

投稿日: Leave a comment

DN2820FYKHにFreeBSDを入れるにあたって,ここのzfs設定を見直し.

前提は基本的に同じ.インストーラで入れると,bsdinstallからzfsbootというスクリプトが呼ばれるので,これも参考にする.

  • 1TBのディスク1本のみ使う.ミラーにはしない.
  • 4kセクターなディスクなのでzfsパーティションを作るときにちょっと気を使ってあげる.
  • プール名はrpoolにする.
  • swapは ZFSのプール内に作る 別パーティションにする.

続きを読む FreeBSD-10.1RELEASE on ZFS

DN2820FYKH

投稿日: Leave a comment

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が起動出来て,インストールもできた.

/etc/protocols on FreeBSD/NetBSD

投稿日: Leave a comment

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/arm build

投稿日: Leave a comment

FreeBSD 10-STABLE / arm のビルドメモ.

1. ソースの取得

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

2. ビルドツールの取得

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

3. 設定ファイルを用意する

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

4. ビルド実行

crochet-freebsdのフォルダでスクリプトを実行し,しばし待つ.

# sh crochet.sh -c config.sh

5. 出来上がり

出来上がったイメージをSDに焼いてブート.イメージは work/FreeBSD-armv6-10.0-RPI-B-r.img  として出来上がる.

FreeBSD/arm

投稿日: Leave a comment

Raspberry pi をちょっとしたサーバー(ntpdとかリゾルバとか)にしようと思って、FreeBSD 10-STABLE を自前ビルドして、ここ数日動かしてみた。

が、どうにも安定しない。sshdが突然signal 11で落ちる。これじゃ、使いものにならない。

SDカードが壊れてるのかなぁとも思ったけど、色々試す気力もなく、再びNetBSDに戻ってみることにする。

FreeBSD/armのビルドは追々まとめようと思う。

 

レンタルサーバー リニューアル

投稿日: Leave a comment

このサイトを動かしているレンタルサーバーがリニューアルした.

容量UPとかいろいろうれしい変更があるけど,個人的に注目していたのはFreeBSD 9.1Rになるのと,IPv6対応.

早速,dmesgを見てみた.
(dmesgコマンド自体は封印されているけど,/var/run/dmesg.bootは見える)

続きを読む レンタルサーバー リニューアル

FreeBSD-10RELEASE on ZFS

投稿日: Leave a comment

年末にFreeBSD機が壊れてしまってさみしくなってしまったのでUbuntuを入れているPCにFreeBSDを入れた.

以前,9.1RC2をZFSに入れたけど,もう少し細かく設定したので手順を書き直し.

1. インストーラの起動

1GBのSDカードに10-Rの64ビット版 FreeBSD-10.0-RELEASE-amd64-memstick.img を書き込んでUSBブート.

普通にインストーラを使ってインストールを進めるが,途中のディスクの設定のところはZFSを選ばず,Shellを選ぶ.一度ZFSにしてみたが,パーティションの切り方に満足できなかったので,一度作ったZFSを参考に手動で作ることにした.

2. ZFSの設定

WD REDの1TB 1本のみ使う.ミラーにはしない.4kセクターなディスクなのでzfsパーティションを作るときにちょっと気を使ってあげる.swapはZFSのプール内に作る.

GPTパーティションを作る.

# 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

4kセクタ対応ZFSパーティション(ashift=12)を作る.

一旦,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

3. ファイルシステムの詳細設定

# 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

Swap作成

# zfs create -V 12G -o org.freebsd:swap=on -o checksum=off rpool/swap

4. インストールの続き

shellをexecで抜けてインストールの続きを実行.

5. インストール後の設定(1)

# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
# cp /tmp/zpool.cache /mnt/boot/zfs/

6. インストール後の設定(2)

これだけだとなぜか起動せず.PMBRの1番目のパーティションにアクティブフラグがついていない.
fdisk -aを実行するため,一度インストーラを抜けてもう一度USBからブートし,Live CDを選択.

# 前回のときは起動した気がするんだけどなぁ.

# fdisk -a /dev/ada0

これでおしまい.