2月 212009
 

自宅 Linux さんのセキュリティ設定メモ。

SSH 編。
公開, 秘密鍵をつくってパスワードによるログインを止める。
SSH ブルートフォースアタック対策の一環。
参考:総当たり攻撃

環境:
サーバ CentOS 5.2 ( IP 192.168.11.30 )
クライアント iMac 10.5.6

クライアント:鍵を作成。

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/Users/name/.ssh/id_dsa): /Users/name/.ssh/linux_dsa 
Enter passphrase (empty for no passphrase): ちゃんと入力する。
Enter same passphrase again: もちろんここも。

クライアント:公開鍵と秘密鍵が作られたことを確認。

$ cd ~/.ssh
$ ls
linux_dsa linux_dsa.pub

クライアント:SSH 時に認証される秘密鍵のありかを設定。

$ cd ~/.ssh
$ vi config
Host 192.168.11.30
IdentityFile ~/.ssh/linux_dsa

クライアント:公開鍵をサーバにコピー

$ scp linux_dsa.pub 192.168.11.30:

サーバー:ログインして、認証ファイルを作る

$ ssh 192.168.11.30   # サーバにログイン
$ mkdir .ssh
$ cat linux_dsa.pub >> .ssh/authorized_keys
$ rm linux_dsa.pub
$ chmod 600 .ssh/authorized_keys
$ chmod 700 .ssh

サーバー:root になって、SSH の設定を変更

$ su -
# vi /etc/ssh/sshd_config
PermitRootLogin no  # ルートでログインさせない。
PasswordAuthentication no  # パスワードでログインさせない(鍵認証のみ)
PermitEmptyPasswords no  # 空パスワードを許さない
 
# /etc/init.d/sshd reload
sshd を再読み込み中:                                       [  OK  ]

サーバー:ローカルPCからのみ SSH 接続を許可

# vi /etc/hosts.allow
sshd: 127.0.0.1  # ループバックを許可
sshd: 192.168.11.  # ローカルPCを許可
 
# vi /etc/hosts.deny 
sshd: ALL  # 基本全員を無許可

クライアント:SSH 接続を試す

$ ssh 192.168.11.30

接続できたら成功なり。

参考:SSHサーバー構築

 

TCP SYN flood 攻撃対策についてメモ。

SYN flood攻撃とは、TCP接続:3ウェイ・ハンドシェイクの仕組みを悪用し、サーバーのメモリ領域を飽和させダウンさせる仕組みらしい。

3ウェイ・ハンドシェイクの以下の部分。

・サーバーは、クライアントから SYN パケットを受け取った際、クライアントの情報を記憶するメモリを確保する。
・サーバーは、クライアントに ACK パケットを返した後、数十秒間クライアントの ACK 応答を待つ必要がある。

ここを悪用しているみたい。つまるところ。

クライアントが、サーバーからの ACK パケット を無視し、かつ短時間に大量に SYN パケット送信を行うと、
サーバーは、クライアントの情報をメモリに確保し続け、最終的に使用できるメモリがなくなる。

その結果、正常に繋ごうとする人が繋げなくなり、ダウンしたように見える。(システムによってはクラッシュまで)

対策として、SYN cookies といった手法がある。

簡単に把握した感じでは、クライアントからの SYN パケット時にメモリを確保せずにシーケンス番号を送り、
クライアントから帰ってきた ACK パケットを元にシーケンス番号の照合を行い、メモリを確保する。

ただしこの対策は、通常時に行われると弊害が多いので、SYN flood 状態時のみ行われる。

なるほどー。

設定的には、

# sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1

とすれば良いみたい。

 

Postfix インストール& OP25B 設定メモ。

今回は簡単に yum で。

# yum -y install postfix
...
Installed: postfix.i386 2:2.3.3-2.1.el5_2
Complete!

インストール完了。

デフォルト MTA を変更。

# alternatives --config mta
 
2 プログラムがあり 'mta' を提供します。
 
  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix
 
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

これでデフォルトPostfix になった。

続いて OP25B 回避する為の設定。

so-net SMTP サーバをリレーホストに設定。

# vi /etc/postfix/main.cf
relayhost = [mail.so-net.ne.jp]:587   # 309行目に追加

so-net SMTP サーバの認証方式を確認する。

# telnet mail.so-net.ne.jp 587
Trying 202.238.82.20...
Connected to mail.so-net.ne.jp (202.238.82.20).
Escape character is '^]'.
220 mx62.ms.so-net.ne.jp ESMTP
ehlo localhost   # ←入力。
250-mx62.ms.so-net.ne.jp Hello *****.so-net.ne.jp [*****], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 10240000
250-DSN
250-AUTH LOGIN PLAIN     # ←これ。PLAINらしい。
250-STARTTLS
250-DELIVERBY
250 HELP

確認した内容を元に Postfix 設定。以下、最後の行に追加。

# vi /etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN

認証ファイルを作成する。

# echo [mail.so-net.ne.jp]:587 ***@***.so-net.ne.jp:password > /etc/postfix/authinfo
# chmod 640 /etc/postfix/authinfo
# postmap /etc/postfix/authinfo

Postfix を起動する。

# /etc/init.d/postfix start
postfix を起動中:                                          [  OK  ]

試しに送信。

# echo test | mail ***@gmail.com

受信できた!

参考:OP25B(Outbound Port 25 Blocking)対策