CentOSによるサーバー構築忘備録
RedHatLinuxは有償版しか無くなってしまったのでCentOSで構築する事にします。
Server World
UnixPower on Networking
さんを参考する事にしました。
Server Worldさん、UnixPower on Networkingさん 先人の方々に感謝します。
とても親切に分かり易く解説されていますのでそのまままねしてもOKなくらいです。
■ Red Hat Enterprise Linux release 8.1 Beta
■ RHEL8.1 Betaを試してみた
■ RHEL8でHAIKは動くのかな?
■ RHEL8 TLSのバージョンはどうなの
■ オープンソースの顧客管理システムL03
■ CentOS 7 をインストール
■ DNSサーバー(bind) をインストール
■ Sophos Anti-Virus for Linux をインストール
■ OpenLDAP のインストール
■ 独自CAの認証書
■ Postfix スパム対策の設定
■ Postfix + Dovecot バーチャルメールボックスの設定
■ CentOS 7 Apache http/2 対応
■ 顧客管理システムのカスタマイズ備忘録
■ CentOS 7 FTPサーバー
■ CentOS 7 メールサーバーのまとめ
■ DB冗長化 MySQL
■ DB冗長化 PostgreSQL
■ postfixのバーチャルメールボックス環境でコマンド実行させる方法
■ DKIM (Domainkeys Identified Mail)
■ SpamAssassinで迷惑メールを拒否する
■ ファームウェアアップデートなどに使う TFTPサーバー
CentOSによるサーバー運用忘備録
DataBaseのバックアップ、リストアについて
バックアップは比較的に取ると思いますが、リストアの機会があまりないので備忘録です。
バックアップ
PostgreSQL
# su - postgres フルバックアップ $ pg_dumpall -f backup.sql 特定のデータベースのみの場合 $ pg_dump testdb > testdb.sql or $ pg_dump testdb -f testdb.sql
Mysql
特定のデータベースのみの場合 # mysqldump -u root -p -B testdb >testdb.sql # mysqldump -u root -p -x --allow-keywords mysql >user.sql フルバックアップ # mysqldump -u root -p -A >backup.sql
リストア
PostgreSQL
# su - postgres $ psql -f bakup.sql or $ psql < bakup.sql $ dropdb testdb $ createdb -E [文字コード] -U [user] testdb $ psql -e testdb -f testdb.sql or $ psql -e testdb < testdb.sql
Mysql
特定のデータベース # mysql -u root -p < testdb.sql # mysql -u root -p mysql < user.sql フルリストア # mysql -u root -p < backup.sql
CentOS 7 でiptables
CentOS7からファイアウォールサービスがiptablesからFirewalldに変更されました。
Firewalldは内部的に従来の iptablesを使用しているようなのですが、ファイアウォールルール数が増えて7000ぐらいになってからCPU使用率が異常に上がり、さらにはReloadに時間がかかってしまうようになりました。
そこで、旧来のiptablesに戻すことにしました。iptablesもルール数が4000を超えるとスループットが下がるそうですが、20000ルールエントリしてもCPU使用率が上がっていないので結果的ですがシステム全体のスループットが改善されました。
これは主に中国からの攻撃が日増しに増えて該当のIPを自動登録するように対応していた背景があり、これに対する処置です。
まずはiptablesを利用できるようにします。
# yum -y install iptables-services
基本的なルールを追加します。
$LOCALNET=xxx.xxx.xxx.xxx/32 # 自ホストのIPアドレス $IPTABLES_CONFIG=/tmp/iptables echo "*filter" >> $IPTABLES_CONFIG # iptablesを作成するテンポラリ # 基本ポリシー # 受信、通過はすべて破棄、送信はすべて許可 echo ":INPUT DROP [0:0]" >> $IPTABLES_CONFIG echo ":FORWARD DROP [0:0]" >> $IPTABLES_CONFIG echo ":OUTPUT ACCEPT [0:0]" >> $IPTABLES_CONFIG # 指定した国からのアクセスを破棄 echo ":DROP_COUNTRY - [0:0]" >> $IPTABLES_CONFIG # Ping of Death攻撃はログを記録して破棄 echo ":LOG_PINGDEATH - [0:0]" >> $IPTABLES_CONFIG # 自ホストからのアクセスをすべて許可 echo "-A INPUT -i lo -j ACCEPT" >> $IPTABLES_CONFIG # 内部からのアクセスをすべて許可 echo "-A INPUT -s $LOCALNET -j ACCEPT" >> $IPTABLES_CONFIG # フラグメント化されたパケットはログを記録して破棄 echo "-A INPUT -f -j LOG --log-prefix \"[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 \"[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
特定の国ごと拒否するルールを作成
# IPアドレスリスト取得 IP_LIST=/tmp/cidr.txt CHK_IP_LIST=/tmp/IPLIST if [ ! -f $IP_LIST ]; then wget -q http://nami.jp/ipv4bycc/cidr.txt.gz gunzip -c cidr.txt.gz > $IP_LIST rm -f cidr.txt.gz fi rm -f $CHK_IP_LIST # DROP_COUNTRY_MAKE関数定義 # 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成 IP_LIST=/tmp/cidr.txt CHK_IP_LIST=/tmp/IPLIST DROP_COUNTRY_MAKE(){ for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'` do echo "-A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix \"[DENY_COUNTRY] : \"" >> $IPTABLES_CONFIG echo "-A DROP_COUNTRY -s $addr -j DROP" >> $IPTABLES_CONFIG done grep ^$1 $IP_LIST >> $CHK_IP_LIST } # 拒否したい国コードを指定して作成する DROP_COUNTRY_MAKE CN DROP_COUNTRY_MAKE RU DROP_COUNTRY_MAKE MX DROP_COUNTRY_MAKE IN DROP_COUNTRY_MAKE NL echo "-A INPUT -j DROP_COUNTRY" >> $IPTABLES_CONFIG
各種サービスを公開するルール
# DNSサーバー(DOMAIN) echo "-A INPUT -p tcp --dport 53 -j ACCEPT" >> $IPTABLES_CONFIG echo "-A INPUT -p udp --dport 53 -j ACCEPT" >> $IPTABLES_CONFIG # Webサーバー(HTTP) echo "-A INPUT -p tcp --dport 80 -j ACCEPT" >> $IPTABLES_CONFIG # Webサーバー(HTTPS) echo "-A INPUT -p tcp --dport 443 -j ACCEPT" >> $IPTABLES_CONFIG # FTPサーバー(ACTIVE) echo "-A INPUT -p tcp --dport 20 -j ACCEPT" >> $IPTABLES_CONFIG echo "-A INPUT -p tcp --dport 21 -j ACCEPT" >> $IPTABLES_CONFIG # FTPサーバー(PASSIVE) echo "-A INPUT -p tcp --dport 12000:14000 -j ACCEPT" >> $IPTABLES_CONFIG # SMTPサーバー(SMTP) echo "-A INPUT -p tcp --dport 25 -j ACCEPT" >> $IPTABLES_CONFIG # SMTPサーバー(SUBMISSION) echo "-A INPUT -p tcp --dport 587 -j ACCEPT" >> $IPTABLES_CONFIG # SMTPSサーバー(SMTPS) echo "-A INPUT -p tcp --dport 465 -j ACCEPT" >> $IPTABLES_CONFIG # POP3サーバー(POP3) echo "-A INPUT -p tcp --dport 110 -j ACCEPT" >> $IPTABLES_CONFIG # POP3Sサーバー(POP3S) echo "-A INPUT -p tcp --dport 995 -j ACCEPT" >> $IPTABLES_CONFIG # IMAPサーバー(IMAP) echo "-A INPUT -p tcp --dport 143 -j ACCEPT" >> $IPTABLES_CONFIG # IMAPSサーバー(IMAPS) echo "-A INPUT -p tcp --dport 993 -j ACCEPT" >> $IPTABLES_CONFIG # NTPサーバー(TIME) echo "-A INPUT -p udp -m udp --dport 123 -j ACCEPT" >> $IPTABLES_CONFIG
特定のホストのみ許可するルール
# SSH echo "-A INPUT -p tcp -s xxx.xxx.xxx.xxx/32 --dport 22 -j ACCEPT" >> $IPTABLES_CONFIG
ルールにマッチしない場合はログを記録して破棄
echo "-A INPUT -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES INPUT DROP] : \"" >> $IPTABLES_CONFIG echo "-A INPUT -j DROP" >> $IPTABLES_CONFIG echo "-A FORWARD -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES FORWARD DROP] : \"" >> $IPTABLES_CONFIG echo "-A FORWARD -j DROP" >> $IPTABLES_CONFIG # ルール確定 echo "COMMIT" >> $IPTABLES_CONFIG
ファイアウォール設定反映
cat $IPTABLES_CONFIG > /etc/sysconfig/iptables rm -f $IPTABLES_CONFIG # systemctl stop firewalld # systemctl start iptables # systemctl enable iptables # systemctl disable firewalld
謝辞
特定の国からの通信をDROPするルール等は下記サイトを参考にさせて頂きました。(先人に感謝です)
参考にさせて頂きましたサイト
Office Nami 世界の国別 IPv4 アドレス割り当てリスト
MAKIZOU.COM サーバー設定 iptables(中韓越遮断)編 – さくらのVPS
植草家のホームページ 国別: IPリスト, でもって, 念のため, 掲載 - 巻き戻し中。(2012-09-09)
参考になるサイト
@police 警視庁セキュリティーポータル
インターネット定点観測 直近1週間の状況
インターネット定点観測 前月の状況
Microsoft Developer Network
国名と国コードの対応表