vsftpdでFTPを立てたCentOS 7のサーバに、iptablesとfail2banをインストールして不正攻撃を自動でブロックするまでの手順をメモ的に残しておきたいなと思います。
尚、前述していますようにOS側のファイアウォールとしてはCentOS 7で標準となった firewalld ではなく、とりあえず慣れ親しんだ iptables を利用していますのであしからず。またvsftpdのインストール手順については省いてますが、パッシブアドレスの範囲としてはとりあえず 4000-4500 としています。
iptablesのインストールと初期設定
まずは iptables をインストールしてOSファイアウォールを有効化するまでの作業を実施。 FTPでの接続ができるように事前にファイアウォールの設定まで行っておきます。
iptablesをインストールしてfirewalldを無効化。
$ yum install iptables-services $ systemctl stop firewalld $ systemctl disable firewalld $ systemctl status firewalld
下記手順で一旦全てのポリシーを削除してFTPのみ有効する綺麗サッパリした設定としておきます。
$ iptables -F $ iptables -L 全てのポリシーが削除されていることを確認。 $ iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP $ iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $ iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP $ iptables -A INPUT -i lo -j ACCEPT $ iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT $ iptables -A INPUT -p tcp -m tcp --dport 4000:4500 -j ACCEPT $ iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $ iptables -P INPUT DROP $ iptables -P OUTPUT ACCEPT $ service iptables save $ iptables -L FTP(ポート21とパッシブ用ポート4000~4500)が許可されている事を確認 $ systemctl enable iptables.service $ systemctl start iptables
ファイアウォールの設定はここまで。
fail2banのインストールと設定
続いてfail2banをインストールします。
インストールはEPELリポジトリによるyumインストールを実施。必要に応じてepelリポジトリも追加インストールします。
$ yum install epel-release ← 必要に応じて実施 $ yum install fail2ban fail2ban-systemd
既存の設定をオーバーライドすることができる /etc/fail2ban/jail.d/jail.local ファイルを新規で作成して vsftpd の監視を有効化します。
$ vi /etc/fail2ban/jail.d/jail.local
細かなオプションについての説明は省きますが、今回は下記を記載します。
[vsftpd] enabled = true
filter = vsftpd
action = iptables-multiport[name=vsftpd, port=ftp, protocol=tcp] logpath = /var/log/vsftpd.log
maxretry = 5
findtime = 1200
bantime = 300
保存後、fail2banを起動します。
$ systemctl start fail2ban
状態を確認しvsftpdのみ対象となっていることを確認します。
$ fail2ban-client status Status |- Number of jail: 1 `- Jail list: vsftpd
vsftpdの監視状況を確認してみます。今のところはなにも無いはず。
$ fail2ban-client status vsftpd Status for the jail: vsftpd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
ためしに攻撃してみる
とりあえずここまでで準備は完了なので試しに攻撃してみます。今回の設定では、適当なユーザーとパスワードでFTP接続を連続5回以上試みてみればOK。
攻撃後に状態を確認。
$ fail2ban-client status vsftpd Status for the jail: vsftpd |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- Journal matches: `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: xxx.xxx.xxx.xxx
想定通り、攻撃元のグローバルIPをブロックしてます。
また念の為にiptablesも確認してみます。
$ iptables -nL Chain f2b-vsftpd (1 references) target prot opt source destination REJECT all -- xxx.xxx.xxx.xxx 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0
iptablesでもブロックされていました!!