クラウド側のファイアウォールで制御するのが標準で、Fail2banなどのIPSでBANを自動化するように設定するので、実際に手作業でipsetによるアクセス制御を実施するような要望が発生することはかなり少ないですが、知っていると知らないとでは大きな違いですし、国単位のアクセス制御する場合など使えます。
環境
記事にする為に攻撃して貰うように、
SSHにてデフォルトポート、パスワード認証、rootログイン可能にしています。
# yum install ipset Package ipset-6.29-1.el7.x86_64 already installed and latest version
# tail -f /var/log/secure Oct 1 12:44:51 150-xxx-yyy-43 sshd[16846]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=61.xxx.yyy.40 user=root Oct 1 12:44:51 150-xxx-yyy-43 sshd[16846]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
# ipset create BLACKLIST hash:ip hashsize 4096 # ipset add BLACKLIST 61.xxx.yyy.40 ※# ipset add BLACKLIST 192.168.0.0/24という指定もできる。 # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m set --match-set BLACKLIST src -j DROP success
# tail -f /var/log/secure Oct 1 12:53:36 150-xxx-yyy-43 sshd[16881]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root" Oct 1 12:53:39 150-xxx-yyy-43 sshd[16881]: Failed password for root from 58.xxx.yyy.160 port 12587 ssh2
禁止したいIPを追加します。
# ipset add BLACKLIST 58.xxx.yyy.160
# date Sun Oct 1 13:04:25 JST 2017
# tail -f /var/log/secure Oct 1 12:55:03 150-xxx-yyy-43 sshd[16907]: Failed password for root from 58.xxx.yyy.160 port 23577 ssh2 Oct 1 12:55:04 150-xxx-yyy-43 sshd[16907]: Received disconnect from 58.xxx.yyy.160 port 23577:11: [preauth] Oct 1 12:55:04 150-xxx-yyy-43 sshd[16907]: Disconnected from 58.xxx.yyy.160 port 23577 [preauth] Oct 1 12:55:04 150-xxx-yyy-43 sshd[16907]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.xxx.yyy.160 user=root
設定を反映
# firewall-cmd --reload success
状態を確認します。
# iptables -L INPUT_direct -v Chain INPUT_direct (1 references) pkts bytes target prot opt in out source destination 17 1020 DROP all -- any any anywhere anywhere match-set BLACKLIST src
禁止されているIPの確認
# ipset list Name: BLACKLIST Type: hash:ip Revision: 1 Header: family inet hashsize 4096 maxelem 65536 Size in memory: 65712 References: 1 Members: 58.xxx.yyy.160 61.xxx.yyy.40
61.xxx.yyy.40のIPを外します。
# ipset del BLACKLIST 61.xxx.yyy.40
状態を確認します。
# ipset list BLACKLIST Name: BLACKLIST Type: hash:ip Revision: 1 Header: family inet hashsize 4096 maxelem 65536 Size in memory: 65712 References: 1 Members: 58.xxx.yyy.160
状況確認します。
# date Sun Oct 1 13:14:07 JST 2017
# tail -f /var/log/secure Oct 1 13:26:03 150-xxx-yyy-43 sshd[17076]: Received disconnect from 61.xxx.yyy.40 port 38921:11: [preauth] Oct 1 13:26:03 150-xxx-yyy-43 sshd[17076]: Disconnected from 61.xxx.yyy.40 port 38921 [preauth]
攻撃が再開された。
攻撃者側の通信がサーバに可能になったことがわかります。