CentOS8の構築記録 1

サーバーエンジニア

こんにちは

今日からはCentOS8の構築記録をブログに書いていきます。

OSのインストール方法につきましては他サイト様で紹介されていますので、

そちらを見ていただくようお願いします。

やることは

1,CentOS8の初期設定

2,iptablesの構築

この2点のみやっていきたいと思います。

1,CentOS8の初期設定

a epelとCentOS-PowerTools.repoの有効化

# sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS-PowerTools.repo

# dnf -y install epel-release

b 開発ツールパッケージ関連のインストール

# dnf -y groupinstall base "Development tools"

c selinuxの無効化

# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

b ipv6の無効化

# echo "net.ipv6.conf.all.disable_ipv6 = 1" > /etc/sysctl.d/dis-ipv6.conf;echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/dis-ipv6.conf;sysctl -p /etc/sysctl.d/dis-ipv6.conf;ifconfig

c firewalldの自動起動解除

# systemctl disabled firewalld

d サーバーの再起動

# reboot

2 iptablesの構築

a iptablesのインストール

# dnf -y install iptables-services

b initに登録

# cp /usr/libexec/iptables/iptables.init /etc/rc.d/init.d/iptables

c iptablesの中身を編集

# vi iptables.sh こちらはCentOSで自宅サーバーさんを参考にしました。

#!/bin/bash

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

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

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

# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop
unlink /etc/sysconfig/iptables

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT DROP # 受信はすべて破棄
iptables -P OUTPUT ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP # 通過はすべて破棄

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

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

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

# SYN Cookiesを有効にする
# TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

# ブロードキャストアドレス宛pingには応答しない
# Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

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

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

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

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

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

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

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

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

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
# Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 443 -j ACCEPT

# 外部からのTCP21番ポート(FTP)へのアクセスを許可
# FTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# 外部からのPASV用ポート(FTP-DATA)へのアクセスを許可
# FTPサーバーを公開する場合のみ
# PASV用ポート60000:60030は当サイトの設定例
iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT

# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# SMTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# 外部からのTCP465番ポート(SMTPS)へのアクセスを許可
# SMTPSサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 465 -j ACCEPT

# 外部からのTCP587番ポート(サブミッションポート)へのアクセスを許可
# SMTP AUTHサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 587 -j ACCEPT

# 外部からのTCP110番ポート(POP3)へのアクセスを許可
# POP3サーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

# 外部からのTCP995番ポート(POP3S)へのアクセスを許可
# POP3Sサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

# 外部からのTCP143番ポート(IMAP)へのアクセスを許可
# IMAPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

# 外部からのTCP993番ポート(IMAPS)へのアクセスを許可
# IMAPSサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

# 外部からのTCP10000番ポート(WEBMIN)へのアクセスを許可
# WEBMINーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT

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

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

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

# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

# bash iptables.sh

一回目に

[root@test ~]# sh iptables.sh
Stopping iptables (via systemctl): [ OK ]
unlink: cannot unlink '/etc/sysconfig/iptables': No such file or directory

iptablesのファイルがないとでます。
このスクリプトでは正常な反応なので気にしないでください。
iptables stopでfirewallのルールがきえるとおもったんですが
ルールがきえないための
unlinkでiptablesを削除して補正しています。

コメント