ファイアウォール
iptablesによるファイアウォールを設定する。
iptablesについてはたくさん資料があるのでそのあたりも参考にしつつ、以下のように設定した。
LOCALNET=192.168.11.0/255.255.255.0 MY_SSHD_CONFIG=/etc/ssh/sshd_config iptables -F iptables -X iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -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関連、Dropbox関連のアクセスはログを記録せずに破棄 # ※不要ログ記録防止 iptables -A INPUT -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445,17500 -j DROP iptables -A INPUT -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445,17500 -j DROP iptables -A OUTPUT -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445,17500 -j DROP iptables -A OUTPUT -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445,17500 -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 -N LOG_PORTSCAN iptables -A LOG_PORTSCAN -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A LOG_PORTSCAN -j LOG --log-level info --log-prefix '[IPTABLES PORTSCAN] ' iptables -A LOG_PORTSCAN -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_PORTSCAN # 不正パケット対策 iptables -N LOG_NEWSYNCHECK iptables -A LOG_NEWSYNCHECK -j LOG --log-prefix '[IPTABLES NEWSYNCHECK] ' iptables -A LOG_NEWSYNCHECK -j DROP iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG_NEWSYNCHECK # 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄 # ※不要ログ記録防止 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 # 確立に成功した tcp 接続は許可 iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # Ping 送受信 iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT # DNS 送信 iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DHCP 許可 iptables -A INPUT -p udp --sport 68 -j ACCEPT # HTTP, HTTPS, POP3(SSL), IMAP, SMTP(TLS/STARTTLS, SSL), git, hkp, whois 送受信 iptables -A OUTPUT -p tcp -m state --state NEW -m multiport --dports 80,443,995,993,587,465,9418,11371,43 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 80,443,995,993,587,465,9418,11371,43 -j ACCEPT # HTTP 受信 #iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT # SSH 受信 / ブルートフォース攻撃対策 # sshd_config ファイルの中からポート番号を指定している箇所を探す SSHD_LISTEN_PORT=`sed -e 's/^Port\s\+\([0-9]\+\)/\1/p' -e d $MY_SSHD_CONFIG` iptables -N LOG_SSHBRUTEFORCE iptables -A LOG_SSHBRUTEFORCE -m limit --limit 3/min --limit-burst 4 -j ACCEPT iptables -A LOG_SSHBRUTEFORCE -j LOG --log-level info --log-prefix '[IPTABLES SSHBRUTEFORCE] ' iptables -A LOG_SSHBRUTEFORCE -j DROP if [ $SSHD_LISTEN_PORT = ""];then echo "SSHD_LISTEN_PORT is null" else iptables -A INPUT -p tcp -m state --state NEW --dport $SSHD_LISTEN_PORT -j LOG_SSHBRUTEFORCE fi # 拒否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 -s $LOCALNET -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES NOMATCHINPUT] '
実際はこの設定とは少し違います。
各自の環境に合わせて適宜修正すれば十分利用できると思います。
最近はNftablesがあるみたいなので、そっちも調べてみようと思っています。
特定のユーザーだけに許可を与える
PAM の pam_wheel.so は wheel グループに入っているユーザーだけに su を使用したログインを許可する。
/etc/pam.d/su
/etc/pam.d/su-l
の両方を編集して次の行をアンコメントする。
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid
3回ログインを失敗したユーザーをロックアウトする
指定した回数ログインに失敗したらロックアウトすることでセキュリティを高める。
/etc/pam.d/system-loginを編集することで設定できる。
3回ログインを失敗したユーザーを10分間ログインできないようにする。
auth required pam_tally.so onerr=succeed file=/var/log/faillog
をコメントアウトし、
auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
を追加する。
書き換えでも問題ないと思うが、設定を戻したくなったときに元が何かわからないと困るため、コメントアウトしておく。
対策
kworkerの中でも何がCPUの使用率を上げているのか調べる。
grep . -r /sys/firmware/acpi/interrupts/
私の場合は以下のように出力された。
/sys/firmware/acpi/interrupts/ff_gbl_lock: 0 enabled /sys/firmware/acpi/interrupts/gpe15: 0 invalid /sys/firmware/acpi/interrupts/gpe4F: 0 invalid /sys/firmware/acpi/interrupts/gpe43: 0 invalid /sys/firmware/acpi/interrupts/gpe7D: 0 invalid /sys/firmware/acpi/interrupts/gpe71: 0 invalid /sys/firmware/acpi/interrupts/gpe05: 0 invalid /sys/firmware/acpi/interrupts/gpe3F: 0 invalid /sys/firmware/acpi/interrupts/gpe33: 0 invalid /sys/firmware/acpi/interrupts/gpe6D: 0 disabled /sys/firmware/acpi/interrupts/gpe61: 0 enabled /sys/firmware/acpi/interrupts/gpe2F: 0 invalid /sys/firmware/acpi/interrupts/gpe23: 0 invalid /sys/firmware/acpi/interrupts/gpe5D: 0 invalid /sys/firmware/acpi/interrupts/gpe51: 0 invalid /sys/firmware/acpi/interrupts/gpe1F: 0 invalid /sys/firmware/acpi/interrupts/gpe13: 0 invalid /sys/firmware/acpi/interrupts/gpe4D: 0 invalid /sys/firmware/acpi/interrupts/gpe41: 0 invalid /sys/firmware/acpi/interrupts/gpe7B: 0 invalid /sys/firmware/acpi/interrupts/gpe0F: 0 invalid /sys/firmware/acpi/interrupts/gpe03: 0 invalid /sys/firmware/acpi/interrupts/gpe3D: 0 invalid /sys/firmware/acpi/interrupts/gpe31: 0 invalid /sys/firmware/acpi/interrupts/gpe6B: 0 invalid /sys/firmware/acpi/interrupts/gpe2D: 0 invalid /sys/firmware/acpi/interrupts/gpe21: 0 invalid /sys/firmware/acpi/interrupts/gpe5B: 0 invalid /sys/firmware/acpi/interrupts/gpe1D: 0 invalid /sys/firmware/acpi/interrupts/gpe78: 0 invalid /sys/firmware/acpi/interrupts/gpe11: 0 invalid /sys/firmware/acpi/interrupts/gpe4B: 0 invalid /sys/firmware/acpi/interrupts/ff_pwr_btn: 0 enabled /sys/firmware/acpi/interrupts/ff_slp_btn: 0 invalid /sys/firmware/acpi/interrupts/gpe0D: 0 invalid /sys/firmware/acpi/interrupts/gpe68: 0 invalid /sys/firmware/acpi/interrupts/gpe01: 0 invalid /sys/firmware/acpi/interrupts/ff_pmtimer: 0 invalid /sys/firmware/acpi/interrupts/gpe3B: 0 invalid /sys/firmware/acpi/interrupts/gpe58: 0 invalid /sys/firmware/acpi/interrupts/gpe2B: 0 invalid /sys/firmware/acpi/interrupts/gpe48: 0 invalid /sys/firmware/acpi/interrupts/gpe1B: 0 invalid /sys/firmware/acpi/interrupts/gpe76: 0 invalid /sys/firmware/acpi/interrupts/gpe38: 0 invalid /sys/firmware/acpi/interrupts/gpe0B: 0 invalid /sys/firmware/acpi/interrupts/gpe66: 0 enabled /sys/firmware/acpi/interrupts/gpe28: 0 invalid /sys/firmware/acpi/interrupts/gpe56: 0 invalid /sys/firmware/acpi/interrupts/gpe18: 0 invalid /sys/firmware/acpi/interrupts/gpe46: 0 invalid /sys/firmware/acpi/interrupts/gpe74: 0 invalid /sys/firmware/acpi/interrupts/gpe08: 0 invalid /sys/firmware/acpi/interrupts/sci: 2513869 /sys/firmware/acpi/interrupts/gpe36: 0 invalid /sys/firmware/acpi/interrupts/gpe64: 0 invalid /sys/firmware/acpi/interrupts/gpe26: 0 invalid /sys/firmware/acpi/interrupts/error: 0 /sys/firmware/acpi/interrupts/gpe54: 0 invalid /sys/firmware/acpi/interrupts/gpe16: 0 invalid /sys/firmware/acpi/interrupts/gpe44: 0 invalid /sys/firmware/acpi/interrupts/gpe7E: 0 invalid /sys/firmware/acpi/interrupts/gpe72: 0 invalid /sys/firmware/acpi/interrupts/gpe06: 0 invalid /sys/firmware/acpi/interrupts/ff_rt_clk: 0 disabled /sys/firmware/acpi/interrupts/gpe34: 0 invalid /sys/firmware/acpi/interrupts/gpe6E: 0 invalid /sys/firmware/acpi/interrupts/gpe62: 0 enabled /sys/firmware/acpi/interrupts/gpe24: 0 invalid /sys/firmware/acpi/interrupts/gpe5E: 0 invalid /sys/firmware/acpi/interrupts/gpe52: 0 invalid /sys/firmware/acpi/interrupts/gpe14: 0 invalid /sys/firmware/acpi/interrupts/gpe4E: 0 invalid /sys/firmware/acpi/interrupts/gpe42: 0 invalid /sys/firmware/acpi/interrupts/gpe7C: 0 invalid /sys/firmware/acpi/interrupts/gpe70: 0 invalid /sys/firmware/acpi/interrupts/gpe04: 0 invalid /sys/firmware/acpi/interrupts/gpe3E: 0 invalid /sys/firmware/acpi/interrupts/gpe32: 0 invalid /sys/firmware/acpi/interrupts/gpe6C: 0 invalid /sys/firmware/acpi/interrupts/gpe60: 0 invalid /sys/firmware/acpi/interrupts/gpe2E: 0 invalid /sys/firmware/acpi/interrupts/gpe22: 0 invalid /sys/firmware/acpi/interrupts/gpe5C: 0 invalid /sys/firmware/acpi/interrupts/gpe50: 0 invalid /sys/firmware/acpi/interrupts/gpe1E: 0 invalid /sys/firmware/acpi/interrupts/gpe79: 0 invalid /sys/firmware/acpi/interrupts/gpe12: 0 invalid /sys/firmware/acpi/interrupts/gpe4C: 0 invalid /sys/firmware/acpi/interrupts/gpe40: 0 invalid /sys/firmware/acpi/interrupts/gpe7A: 0 invalid /sys/firmware/acpi/interrupts/gpe0E: 0 invalid /sys/firmware/acpi/interrupts/gpe69: 0 disabled /sys/firmware/acpi/interrupts/gpe02: 0 invalid /sys/firmware/acpi/interrupts/gpe3C: 0 invalid /sys/firmware/acpi/interrupts/gpe30: 0 invalid /sys/firmware/acpi/interrupts/gpe6A: 0 invalid /sys/firmware/acpi/interrupts/gpe59: 0 invalid /sys/firmware/acpi/interrupts/gpe2C: 0 invalid /sys/firmware/acpi/interrupts/gpe20: 0 invalid /sys/firmware/acpi/interrupts/gpe5A: 0 invalid /sys/firmware/acpi/interrupts/gpe49: 0 invalid /sys/firmware/acpi/interrupts/gpe1C: 0 invalid /sys/firmware/acpi/interrupts/gpe77: 0 invalid /sys/firmware/acpi/interrupts/gpe10: 0 invalid /sys/firmware/acpi/interrupts/gpe4A: 0 invalid /sys/firmware/acpi/interrupts/gpe39: 0 invalid /sys/firmware/acpi/interrupts/gpe0C: 0 invalid /sys/firmware/acpi/interrupts/gpe67: 0 enabled /sys/firmware/acpi/interrupts/gpe00: 0 invalid /sys/firmware/acpi/interrupts/gpe3A: 0 invalid /sys/firmware/acpi/interrupts/gpe29: 0 invalid /sys/firmware/acpi/interrupts/gpe57: 0 invalid /sys/firmware/acpi/interrupts/gpe2A: 0 invalid /sys/firmware/acpi/interrupts/gpe19: 0 invalid /sys/firmware/acpi/interrupts/gpe47: 0 invalid /sys/firmware/acpi/interrupts/gpe1A: 0 invalid /sys/firmware/acpi/interrupts/gpe75: 0 invalid /sys/firmware/acpi/interrupts/gpe09: 0 invalid /sys/firmware/acpi/interrupts/gpe37: 0 invalid /sys/firmware/acpi/interrupts/gpe0A: 0 invalid /sys/firmware/acpi/interrupts/gpe65: 0 invalid /sys/firmware/acpi/interrupts/gpe27: 0 invalid /sys/firmware/acpi/interrupts/gpe55: 0 invalid /sys/firmware/acpi/interrupts/gpe17: 0 disabled /sys/firmware/acpi/interrupts/gpe45: 0 invalid /sys/firmware/acpi/interrupts/gpe7F: 0 invalid /sys/firmware/acpi/interrupts/sci_not: 0 /sys/firmware/acpi/interrupts/gpe73: 0 invalid /sys/firmware/acpi/interrupts/gpe07: 0 invalid /sys/firmware/acpi/interrupts/gpe35: 0 invalid /sys/firmware/acpi/interrupts/gpe6F: 2513871 enabled /sys/firmware/acpi/interrupts/gpe63: 0 invalid /sys/firmware/acpi/interrupts/gpe25: 0 invalid /sys/firmware/acpi/interrupts/gpe5F: 0 invalid /sys/firmware/acpi/interrupts/gpe_all: 2513871 /sys/firmware/acpi/interrupts/gpe53: 0 invalid
gpe6Fが数字が大きく、enabledになっており、これがCPU使用率を上げている。
以下のコマンドを実行することで、CPU使用率は下がる。
su echo "disable" > /sys/firmware/acpi/interrupts/gpe6F
しかしこれでは起動するたびに同じコマンドを実行してやらなければ改善されないので、crontabで起動時に自動実行されるようにする。
su
crontab -e
crontabのエディタはviらしいので、操作はviと同じ。
空のファイルが開かれるので、
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe6F
を追加する。
grubでsyntax errorが出た
windows10をgrubで表示させようとして、いじっていたら何かやらかしたらしく、syntax errorが出るようになってしまった。
ちょっと調べてみると、/etc/default/grubにGRUB_DISABLE_SUBMENU=yを追加すればいいらしい。
# vim /etc/default/grub
GRUB_DISABLEなんちゃらと書かれている下に、
GRUB_DISABLE_SUBMENU=y
を追加して保存。
これでも駄目だった。
もう少し調べてみると、
/boot/grub/grub.cfg.new
/boot/grub/grub.cfg
/etc/grub.d/*
をいじらないといけないらしい。
まずは/boot/grub/grub.cfg.newを編集する。
if [ "${grub_platform}" == "pc" ]; then fi
のようになっているところを、
if [ "${grub_platform}" == "pc" ]; then : fi
のようにする。「:」が抜けているのがいけないっぽい。
/boot/grub/grub.cfgと/etc/grub.d/*も同じように編集する。
/etc/grub.d/*は全てのファイルを確認すること。
これでsyntax errorが出なくなった。