ConoHa の CentOS8 nftablesで ipアドレス直指定でブラックリストを作成しアクセスをはじく

習慣化6日目

f:id:tkrou:20200609083645p:plain

SSHしてくるIPアドレスブラックリストではじきたい

下記ページでConoHa立ち上げ時に中国からのアクセス制限を実施していた。

tkrou.hatenablog.jp

しかし、しばらくしたら国内IPからのSSHを試みるアクセスが来るようになった。
これを nftables ではじくように設定する。

アクセス量に応じて遮断する方法もあると思うが、今回はIPアドレス直指定ではじくことにした。

対応方法

実施した内容がメモしていなかったのか、どこかにいってしまったのか、とにかく見つからないので、
過去の history を見ながら書き出した。
抜けている部分があるかもしれない。

コマンドのみ抜粋版

# cd /etc/nftables/
# cp -ip country_whitelist drop_iplist

# cp -ip /etc/sysconfig/nftables.conf ~/BACKUP/nftables.conf.2020040701

# vi /etc/sysconfig/nftables.conf
# diff -u BACKUP/nftables.conf.2020040701 /etc/sysconfig/nftables.conf

# nft list ruleset > ~/BACKUP/before.2020060901

# at -l
# echo "nft flush ruleset" | at now + 10min
# at -l

# systemctl status nftables.service
# systemctl restart nftables
# systemctl status nftables.service

# nft list ruleset > ~/BACKUP/after.2020060901

# at -l
# atrm 99

# tail -f /var/log/secure

実施内容

◆drop_iplistを作成 ==============================
以前作成した country_whitelist を複製して準備する
# cd /etc/nftables/
# cp -ip country_whitelist drop_iplist

◆nftables.confをバックアップ ==============================
# cp -ip /etc/sysconfig/nftables.conf ~/BACKUP/nftables.conf.2020040701

◆nftables.confを編集 ==============================
# vi /etc/sysconfig/nftables.conf
# diff -u BACKUP/nftables.conf.2020040701 /etc/sysconfig/nftables.conf
--- BACKUP/nftables.conf.2020040701     2020-03-16 07:44:34.086000000 +0900
+++ /etc/sysconfig/nftables.conf        2020-04-09 07:59:03.181000000 +0900
@@ -16,6 +16,7 @@
 flush ruleset

 include "/etc/nftables/country_whitelist"
+include "/etc/nftables/drop_iplist"


 table ip filter {
@@ -23,6 +24,10 @@
     type ipv4_addr; flags interval;
     elements = $country_whitelist
   }
+  set drop_ip {
+    type ipv4_addr; flags interval;
+    elements = $drop_iplist
+  }

   chain INPUT {
     type filter hook input priority 0; policy drop;
@@ -31,6 +36,8 @@

     ct state established,related counter accept

+    ip saddr @drop_ip drop
+
     ct state new tcp dport 80 ip saddr @country_accept counter accept
     ct state new tcp dport 443 ip saddr @country_accept counter accept
     ct state new tcp dport 22 ip saddr @country_accept counter accept

◆変更前の設定を出力 ==============================
# nft list ruleset > ~/BACKUP/before.2020060901

◆10分後にnftablesが停止するように設定 ==============================
作業にミスがありログイン出来なくなった時のため
# at -l
# echo "nft flush ruleset" | at now + 10min
# at -l

◆nftables再起動 ==============================
# systemctl status nftables.service
# systemctl restart nftables
# systemctl status nftables.service

◆変更前後で差分を確認 ==============================
# nft list ruleset > ~/BACKUP/after.2020060901


◆問題なければatコマンドを削除しておく ==============================

# at -l
# atrm 99
数値は実施時ごとに異なる

◆しばらく経過観察 ==============================
tail -f /var/log/secure

はじくIPアドレスを追加する

しばらくしたら、またSSHを試みるアドレスが増えていたので、アクセス不可対象に追加する。

コマンドのみ抜粋版

# cd /etc/nftables/
# cp -ip drop_iplist ~/BACKUP/drop_iplist.2020060901
# vi drop_iplist
# diff -u ~/BACKUP/drop_iplist.2020060901 drop_iplist

# nft list ruleset > ~/BACKUP/before.2020060901

# at -l
# echo "nft flush ruleset" | at now + 10min
# at -l

# systemctl status nftables.service
# systemctl restart nftables
# systemctl status nftables.service

# nft list ruleset > ~/BACKUP/after.2020060901
# diff -u ~/BACKUP/before.2020060901 ~/BACKUP/after.2020060901

# at -l
# atrm 99
# at -l

# tail -f /var/log/secure

実施内容

◆drop_iplistに対象のipアドレスを追加する ==============================
# cd /etc/nftables/
# cp -ip drop_iplist ~/BACKUP/drop_iplist.2020060901
# vi drop_iplist
# diff -u ~/BACKUP/drop_iplist.2020060901 drop_iplist
--- /root/BACKUP/drop_iplist.2020060901 2020-04-09 07:48:15.177000000 +0900
+++ drop_iplist 2020-06-09 08:10:57.428000000 +0900
@@ -1,3 +1,5 @@
 define drop_iplist = {
   118.27.13.183,
+  118.27.10.103,
+  118.27.6.66,
 }

◆変更前の設定を出力 ==============================
# nft list ruleset > ~/BACKUP/before.2020060901

◆10分後にnftablesが停止するように設定 ==============================
作業にミスがありログイン出来なくなった時のため
# at -l
# echo "nft flush ruleset" | at now + 10min
# at -l

◆nftables再起動 ==============================
# systemctl status nftables.service
# systemctl restart nftables
# systemctl status nftables.service

◆変更前後で差分を確認 ==============================
# nft list ruleset > ~/BACKUP/after.2020060901
# diff -u ~/BACKUP/before.2020060901 ~/BACKUP/after.2020060901
--- /root/BACKUP/before.2020060901      2020-06-09 07:55:20.186000000 +0900
+++ /root/BACKUP/after.2020060901       2020-06-09 08:13:24.567000000 +0900
@@ -1440,19 +1440,20 @@
       set drop_ip {
               type ipv4_addr
               flags interval
-               elements = { 118.27.13.183 }
+               elements = { 118.27.6.66, 118.27.10.103,
+                            118.27.13.183 }
       }


◆問題なければatコマンドを削除しておく ==============================
# at -l
# atrm 99
数値は実施時ごとに異なる
# at -l

◆しばらく経過観察 ==============================
# tail -f /var/log/secure

これでしばらく様子を見てみる。