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
設定を変更します。
ポート、猶予時間やパスワード形式でのログインなどを禁止しています。
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の行数を増やしたり時間を表示できるようにします。
既にいるユーザに対しては
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を禁止します。
15c15
< # auth required pam_wheel.so
---
> auth required pam_wheel.so
sudo addgroup --gid 11 wheel
sudo usermod -aG wheel hogeuser
logの期間を調整する
syslogはデフォルトのままでは4週間しか残らないので3年間は残すようにする。
月ごとのローテートで36カ月
ログの量によっては週ごとにしてローテート数を増やしてもよい。
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を兼ねています。
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
nameserver 192.168.20.10
sudo resolvconf -u
ipv6を無効にする
今の所ipv6を使用する予定はないので無効にしておきます。
> net.ipv6.conf.all.disable_ipv6=1
> net.ipv6.conf.default.disable_ipv6=1
/etc/sysctl.confの編集
・SYN FOOD攻撃対策
・Smurf攻撃対策
・ICMP Redirectパケットを拒否
・ソースルーティングオプションが付加されたパケットを許可しない
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
起動時は下記設定で自動起動されます。
pre-up iptables-restore < /etc/iptables.rules
pre-up ip6tables-restore < /etc/ip6tables.rules
以上