openssh-server設定

debian で標準インストールのみを行なったシステムでの検証です。

1.とりあえず使う。

SSHサービスのインストール

# apt-get -y install openssh-server


■SSHサービスの設定(ポート変更)

# cd /etc/ssh;mv sshd_config sshd_config.bak; \
  sed s/"Port 22"/"Port 8022"/ sshd_config.bak > sshd_config


■ユーザ権限でSSH認証の鍵を作成

$ ssh-keygen -t rsa

■SSHサービスを起動する

# ps -A | grep ssh || /etc/init.d/ssh start || /etc/init.d/ssh restart; \
   test $? -eq 0 && /etc/init.d/ssh restart

■フィンガープリントをチェックする

$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

■テスト接続を行なう

$ ssh localhost -p 8022

■Windowsの場合、Puttyからも接続してみる
 (同様にフィンガープリントの警告が表示されるので確認する)

2.IPアドレスが変わらないようにする

■DHCPを無効にする

# cd /etc/network;mv interfaces interfaces.bak; \
  sed s/"iface eth0 inet dhcp"/"#&"/ interfaces.bak > interfaces

■IPアドレスを固定に設定する

# echo 'iface eth0 inet static
address 192.168.87.140
netmask 255.255.255.0
broadcast 192.168.87.255
gateway 192.168.87.2' >> interfaces
3.名前解決できるようにする

■IPアドレス、ホスト名変換の登録と確認

# LANG=C;ifconfig | grep inet | awk -F" " '{print $2}' | head -1 | \
  sed s/"addr:"// | sed s/"\$"/"\tdebian-test"/ >> /etc/hosts

# grep "debian-test" /etc/hosts
127.0.0.1		debian-test.localdomain	debian-test
192.168.87.140	debian-test

# hostname -a;hostname --fqdn
debian-test debian-test
debian-test.llocaldomain

■NETBIOS名が使えるようにSambaをインストールする

# apt-get install -y samba

■挿入する場所を変数に入れます。

# CHANGE_NETBIOS=$(cat /etc/samba/smb.conf | grep "server string =";
  echo "$CHANGE_NETBIOS";
server string = %h server

■NETBIOS名の設定を挿入します。

# cd /etc/samba;mv smb.conf smb.conf.bak; \ 
  sed s/"$CHANGE_NETBIOS"/"&\n  netbios name = debian-test"/ \
  smb.conf.bak > /etc/samba/smb.conf

■エディタで開いて、ホームディレクトリの共有設定を以下のように追加します。

# vim smb.conf
[homes]
  path = /home/%S
  write list = labunix

■smb.confの設定に構文エラーがないかチェックします。

# testparm

■samba用のパスワードの追加と確認をします。

# smbpasswd -a labunix && smbpasswd -e labunix

■NETBIOS名を確認します。

# nmblookup debian-test | grep "<00>"
192.168.87.140 debian-test<00>

# net lookup debian-test
127.0.1.1

Windowsからは、「ファイル名を指定して実行」から以下を入力、実行します。

\\debian-test

■ホームディレクトリの共有が出来て、IPアドレスでのssh接続を行なうと、
 sshクライアントからも名前解決を利用することが出来ます。

■Putty からホスト名で確認すると、再度フィンガープリントの警告が表示されます。

4.公開鍵認証を利用する

■ユーザ権限でDSA鍵を作成します。

$ ssh-keygen -t dsa

$ cd ~/ssh;ls id_dsa*;ls id_rsa*
  id_dsa id_dsa.pub
  id_rsa id_rsa.pub

■通常のftpと同じように使えるpsftp.exeを使うか、
 使い慣れたsftpクライアントからid_dsaを持ってきます。

 puttygen.exeの「Load」から「All Files」で「id_dsa」を選択してppkに変換、
 「Save Private key」で任意の場所に保存します。

■DSA鍵でのログインの確認

 ログイン時にユーザ名を入力した後、「Server refused our key」が表示されます。

 「id_dsa」でアクセス出来、
 他にアクセスするクライアントが無い場合は、サーバ側から、「id_dsa」を削除します。
 また、「id_rsa*」を削除します。

$ cd ~/.ssh;rm id_dsa;rm id_rsa*


5.IP制限を行なう

$ echo "sshd:ALL" >> /etc/hosts.deny
$ echo -e "All:127.0.0.1\nsshd:192.168.87." >> /etc/hosts.allow

■下記のようなメッセージで他のIPからは接続できなったことを確認します。
 「ssh_exchange_identification: Connection closed by remote host」

 下記参考URLのようにiptablesを設定します。
 ※「--reject-with」が2度あって、完全にコピペすると失敗するので、修正します。

 http://itpro.nikkeibp.co.jp/article/COLUMN/20070611/274357/

# iptables -N ssh_blute
# iptables -N ssh
# iptables -A INPUT -j ssh -p tcp --dport 8022
# iptables -A ssh_blute -m recent --name ssh_block --set -j \
 LOG --log-level DEBUG --log-prefix "ssh_block: "
# iptables -A ssh_blute -j REJECT
# iptables -A ssh -p tcp ! --syn -m state --state ESTABLISHED,RELATED \
 -j ACCEPT
# iptables -A ssh -p tcp --syn -m recent --name ssh_block \
 --update --seconds 86400 -j REJECT --reject-with icmp-port-unreachable
# iptables -A ssh -p tcp --syn -m recent --name ssh_conn --rcheck \
 --seconds 60 --hitcount 5 -j ssh_blute
# iptables -A ssh -p tcp --syn -m recent --name ssh_conn --set
# iptables -A ssh -p tcp --syn -j ACCEPT

 iptablesの設定を保存します。
 ※記事のままでは失敗します。manマニュアルを読んでもそのような記述方法はありませんでした。
# iptables-save

■iptablesの設定を確認します。

# iptables -L

6.しばらく監視します。

# apt-get -y install tcpdump

■監視方法

# tcpdump -i eth0 -X -vvv port 8022

■パケットの中身や詳細表示が不要な場合は下記のようにします。

# tcpdump -i eth0 port 8022

■nmapによるチェックを行ないます。

内部からのnmap。
# nmap -v -p 8022 192.168.87.140 | grep tcp
Discovered open port 8022/tcp on 192.168.87.140
8022/tcp open  unknown

■別のNAT越えIPからのnmap。

$ sudo nmap -v -p 8022 debian-test

Starting Nmap 4.62 ( http://nmap.org ) at 2011-01-23 07:52 JST
Initiating Ping Scan at 07:52
Scanning 192.168.87.140 [2 ports]
Completed Ping Scan at 07:52, 3.02s elapsed (1 total hosts)
Read data files from: /usr/share/nmap
Note: Host seems down. If it is really up, but blocking our ping probes, try -PN
Nmap done: 1 IP address (0 hosts up) scanned in 3.116 seconds
           Raw packets sent: 4 (136B) | Rcvd: 0 (0B)