LoginSignup
4
1

More than 5 years have passed since last update.

Ubuntuサーバーのインストールでまずしておきたいこと

Last updated at Posted at 2016-08-19

Ubuntuのサーバーでまずしておきたいこと

Ubuntu Serverを初めてインストールしました。
そこで、まずした事をメモしておきます。
主にセキュリティ関連が多いです。
設定ファイルはほぼdiff形式で記しています。

ソフトウェア類のアップデート

sudo apt-get update
sudo apt-get upgrade

apt-get updateでリストを入手します。
そして、upgradeで実際のアップデートです。
いきなりアップデートのyumと比較して、こちらの方が現時点のバージョン関係を
各ソフトウェア間で保持できるのがいいかなと思いました。

SSH関係

秘密鍵形式にします。下記参考。
http://qiita.com/kite_999/items/aa03870eb071683a8feb

設定を変更します。
ポート、猶予時間やパスワード形式でのログインなどを禁止しています。

/etc/ssh/sshd_config
5c5
< Port 22
---
> Port 18021
27,28c27,29
< LoginGraceTime 120
< PermitRootLogin prohibit-password
---
> LoginGraceTime 60
> #PermitRootLogin prohibit-password
> PermitRootLogin no
52c53
< #PasswordAuthentication yes
---
> PasswordAuthentication no
88a90,92
>
> MaxAuthTries 3
> UseDNS no

.bashrcの変更

crontab -rの予防の為、必ず確認を入れ、
historyの行数を増やしたり時間を表示できるようにします。

既にいるユーザに対しては

各ユーザのホームディレクトリ/.bashrc
19,20c19,21
< HISTSIZE=1000
< HISTFILESIZE=2000
---
> HISTSIZE=1000000
> HISTFILESIZE=2000000
> HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S '
93a95
> alias crontab='crontab -i'

今後追加するユーザのために
/etc/skel/.bashrc
上記ファイルも同時に修正しておきます。

rootになれるユーザを制限

wheelグループに入っているユーザ以外のsuを禁止します。

/etc/pam.d/su
15c15
< # auth       required   pam_wheel.so
---
> auth       required   pam_wheel.so
wheelグループの追加とメンバーの追加
sudo addgroup --gid 11 wheel
sudo usermod -aG wheel hogeuser

logの期間を調整する

syslogはデフォルトのままでは4週間しか残らないので3年間は残すようにする。
月ごとのローテートで36カ月
ログの量によっては週ごとにしてローテート数を増やしてもよい。

/etc/logrotate.conf
3c3,4
< weekly
---
> #weekly
> monthly
10c11,12
< rotate 4
---
> #rotate 4
> rotate 36

dhcpではなく固定IPにする

固定IPにします。最下部2行のfirewall関連の所はあとで記載します。
サーバーは192.168.20.31
192.168.20.10がゲートウェイ、DNSを兼ねています。

/etc/network/interfaces
12c12,20
< iface enp0s31f6 inet dhcp
---
> #iface enp0s31f6 inet dhcp
> iface enp0s31f6 inet static
> address 192.168.20.31
> netmask 255.255.255.0
> network 192.168.20.0
> broadcast 192.168.20.255
> gateway 192.168.20.10
> pre-up iptables-restore < /etc/iptables.rules
> pre-up ip6tables-restore < /etc/ip6tables.rules
/etc/resolvconf/resolv.conf.d/base
nameserver 192.168.20.10
下記コマンドでDNS設定反映
sudo resolvconf -u

ipv6を無効にする

今の所ipv6を使用する予定はないので無効にしておきます。

/etc/sysctl.conf
> net.ipv6.conf.all.disable_ipv6=1
> net.ipv6.conf.default.disable_ipv6=1

/etc/sysctl.confの編集

・SYN FOOD攻撃対策
・Smurf攻撃対策
・ICMP Redirectパケットを拒否
・ソースルーティングオプションが付加されたパケットを許可しない

/etc/sysctl.conf
25c25
< #net.ipv4.tcp_syncookies=1
---
> net.ipv4.tcp_syncookies=1
44c44
< #net.ipv4.conf.all.accept_redirects = 0
---
> net.ipv4.conf.all.accept_redirects = 0
55c55
< #net.ipv4.conf.all.accept_source_route = 0
---
> net.ipv4.conf.all.accept_source_route = 0
60a61,64
> net.ipv6.conf.all.disable_ipv6=1
> net.ipv6.conf.default.disable_ipv6=1
>
> net.ipv4.icmp_echo_ignore_broadcasts=1

firewall

iptablesを使用しますが、毎回同じように設定できるよう設定ファイルを吐き出す
スクリプトを用意しておきます。このスクリプトを流すと定義ファイルを作成し、iptablesを起動してくれます。
また、OS起動時は定義ファイルからiptablesを自動起動します。
https://centossrv.com/iptables.shtmlを参考にしました。

#!/bin/bash

#---------------------------------------#
# 設定開始                              #
#---------------------------------------#

# 内部ネットワークアドレス定義
LOCALNET=192.168.20.0/24

#---------------------------------------#
# 設定終了                              #
#---------------------------------------#

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
IPTABLES_CONFIG=`mktemp`
echo "*filter" >> $IPTABLES_CONFIG
echo ":INPUT DROP [0:0]" >> $IPTABLES_CONFIG       # 受信はすべて破棄
echo ":FORWARD DROP [0:0]" >> $IPTABLES_CONFIG     # 通過はすべて破棄
echo ":OUTPUT ACCEPT [0:0]" >> $IPTABLES_CONFIG    # 送信はすべて許可
echo ":LOG_PINGDEATH - [0:0]" >> $IPTABLES_CONFIG  # Ping of Death攻撃はログを記録して破棄

# 自ホストからのアクセスをすべて許可
echo "-A INPUT -i lo -j ACCEPT" >> $IPTABLES_CONFIG

# 内部からのアクセスをすべて許可
echo "-A INPUT -s $LOCALNET -j ACCEPT" >> $IPTABLES_CONFIG

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
echo "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT" >> $IPTABLES_CONFIG

# フラグメント化されたパケットはログを記録して破棄
echo "-A INPUT -f -j LOG --log-prefix \"[IPTABLES FRAGMENT] : \"" >> $IPTABLES_CONFIG
echo "-A INPUT -f -j DROP" >> $IPTABLES_CONFIG

# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
echo "-A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG
echo "-A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG
echo "-A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG
echo "-A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
echo "-A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT" >> $IPTABLES_CONFIG
echo "-A LOG_PINGDEATH -j LOG --log-prefix \"[IPTABLES PINGDEATH] : \"" >> $IPTABLES_CONFIG
echo "-A LOG_PINGDEATH -j DROP" >> $IPTABLES_CONFIG
echo "-A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH" >> $IPTABLES_CONFIG

# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
echo "-A INPUT -d 255.255.255.255 -j DROP" >> $IPTABLES_CONFIG
echo "-A INPUT -d 224.0.0.1 -j DROP" >> $IPTABLES_CONFIG

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
echo "-A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset" >> $IPTABLES_CONFIG

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
# ※SSHサーバーを公開する場合のみ
echo "-A INPUT -p tcp --dport 22 -j ACCEPT" >> $IPTABLES_CONFIG

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
#echo "-A INPUT -p tcp --dport 53 -j ACCEPT" >> $IPTABLES_CONFIG
#echo "-A INPUT -p udp --dport 53 -j ACCEPT" >> $IPTABLES_CONFIG

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで)               #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
if [ -s /root/deny_ip ]; then
    for ip in `cat /root/deny_ip`
    do
        echo "-I INPUT -s $ip -j DROP" >> $IPTABLES_CONFIG
    done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
echo "-A INPUT -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES INPUT] : \"" >> $IPTABLES_CONFIG
echo "-A INPUT -j DROP" >> $IPTABLES_CONFIG
echo "-A FORWARD -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES FORWARD] : \"" >> $IPTABLES_CONFIG
echo "-A FORWARD -j DROP" >> $IPTABLES_CONFIG

# ファイアウォール設定反映
echo "COMMIT" >> $IPTABLES_CONFIG
cat $IPTABLES_CONFIG > /etc/iptables.rules

/sbin/iptables-restore < /etc/iptables.rules

rm -f $IPTABLES_CONFIG

sudo chmod 700 /opt/sh/iptables.sh

ipv6は全止めしておきます。

sudo ip6tables -P INPUT  DROP
sudo ip6tables -P OUTPUT  DROP
sudo ip6tables -P FORWARD  DROP
sudo ip6tables-save | sudo tee /etc/ip6tables.rules

起動時は下記設定で自動起動されます。

/etc/network/interfaces
pre-up iptables-restore < /etc/iptables.rules
pre-up ip6tables-restore < /etc/ip6tables.rules

以上

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1