前置き
こんにちは、キタです。
普段インフラエンジニアとしてサーバーの運用保守をしていて、
いきなり海外IPからの大量アクセスが来る現象にキレたことはないでしょうか?
私はあります。
ちょっとムキっとなります。
最近はCloudflareや、攻撃遮断くんなどのWAFを前段に配置していて、そこでブロックされる場合もありますが
構成によってはサーバー側でIPを指定してブロックしなければならない場面もあるかと思います。
既知の人もいるかと思いますが、Linuxにはセキュリティ制御機構が割とあり、
初心者の方は「どの方法を使えばいいの?」と迷うことも多いです。(自分がそうだった)
本記事は、そんな「結局どれ使ったらええねん」と思っている同志の方向けの記事です。
結論
結論:手軽にIPブロックするなら firewalld や iptables または nftables でいいと思います。
まずはブロック手法をそれぞれあげていきましょう。
1. firewalled(RHEL系の搭載のファイアウォール)
RHEL、CentOS、Fedora などで使われるファイアウォール管理ツールです。
最近のAlmaではデフォルトで入っていないことが多くて悲しくなります…(どのみち止めますが)
特徴としてiptables や nftables を内部で利用し、ゾーンごとの管理が可能となっています。
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
firewall-cmd --reload
適用範囲: ネットワークパケット
2. iptables(古くから使われるパケットフィルタリングツール)
古き良きパケットのフィルタリングを行うツールで、Linuxカーネルの netfilter が利用されています。
特徴として、細かいルール設定が可能です。ただし、次に紹介するnftables へ移行が推奨されています。
iptables -A INPUT -s 192.168.1.100 -j DROP
service iptables save
適用範囲: ネットワークパケット
3. nftables(iptablesの後継、より高性能)
先ほど紹介した iptables の後継として開発され、パフォーマンスや柔軟性が向上しています。
特徴として 1つのルールセットでIPv4/IPv6を扱えて、柔軟な管理が可能です。
nft add rule ip filter input ip saddr 192.168.1.100 drop
適用範囲: ネットワークパケット
4. route(ルーティングテーブルによる制御)
OS内のルーティングテーブルを操作して、特定のIPの通信を無効化してくれます。
こちらは一時的な対策向けで、細かい制御にはあまり向かない印象です。
route add -host 192.168.1.100 reject
適用範囲: OSルーティング
5. ipset(大量のIPアドレスを効率的にブロック)
こちらは iptables や nftables と組み合わせて、大量のIPを高速にブロックしてくれます。
動的にIPリストを管理できるため、DDoS対策などに有効です。
ipset create blacklist hash:ip timeout 3600
ipset add blacklist 192.168.1.100
iptables -I INPUT -m set --match-set blacklist src -j DROP
適用範囲: iptables や nftables と連携して利用
6. TCP Wrappers(hosts.allow / hosts.deny)
libwrap を利用し、特定のIPからの接続を許可・拒否する仕組みです。
正直OSのブロック機構かと言われると微妙ですが一応リストにあげておきました。
特徴としてはSSHやFTPなどの特定サービスに適用可能です。ただし、近年ではあまり見かけません。
## /etc/hosts.deny に設定
ALL: 192.168.1.100
適用範囲: TCPベースの特定のサービス
まとめ
最後に表でまとめてみました。
方法 | メリット | デメリット | 適用範囲 |
---|---|---|---|
firewalld | RHEL系の搭載、ゾーン管理が簡単 | 仕組みが少し難しい | パケットフィルタリング |
iptables | 細かいルール設定が可能 | nftables に置き換え推奨 | パケットフィルタリング |
nftables | 高パフォーマンス、柔軟なルール管理 | 設定が難しい | パケットフィルタリング |
route | シンプルで分かりやすい | 一時的な対策向け | ルーティング |
ipset | 大量のIPを高速に処理可能 | iptables や nftables との併用が必要 | パケットフィルタリング |
TCP Wrappers | シンプルなサービス単位の制御 | 既に非推奨 | TCPベースの特定サービス |
「基本は firewalld / iptables / nftables」
「大量のIPをブロックするなら ipset」
「一時的なブロックなら route」
といった感じでしょうか。
これ以外にも、OSの制御機構であれば SELinux とかも有名ですよね。
正直OSベースで管理するより、それより前段で制御できる構成の方が望ましいと思うので、
今後使う機会は減りそうですが、少しでも参考になれば幸いです。
※ここに無いものや、内容が間違っていればご指摘いただけますと幸いです。
ではでは~