Debian 攻撃からの守りを固める

次に、iptablesによる余計なアクセスの遮断とsshguardによるsshへのブルートフォースアタックの遮断を設定しておく。

Wheezyではiptablesの設定はiptables-persistentパッケージによって起動時に再設定されるが、この時点ではまだ設定しない。

以下のファイルを作成。とりあえず、ウェブサーバーとSSHサーバーとSMTPサーバーだけファイヤーウォールを開けておく。

iptables.rule

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn’t use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp –dport 80 -j ACCEPT
-A INPUT -p tcp –dport 443 -j ACCEPT

# Allows SSH connections
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state –state NEW –dport 22 -j ACCEPT

# Allows SMTP connections
-A INPUT -p tcp –dport 25 -j ACCEPT

# Allow ping
-A INPUT -p icmp –icmp-type 8 -j ACCEPT

# Reject all other inbound – default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

せっかくなのでIPv6でもファイヤーウォールを設定しておきたいのでIPv6用には別ファイルを用意する。

ip6tables.rule

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn’t use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d ::1/128 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp –dport 80 -j ACCEPT
-A INPUT -p tcp –dport 443 -j ACCEPT

# Allows SSH connections
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state –state NEW –dport 22 -j ACCEPT

# Allows SMTP connections
-A INPUT -p tcp –dport 25 -j ACCEPT

# Allow ping
-A INPUT -p ipv6-icmp –icmpv6-type 128 -j ACCEPT

# Reject all other inbound – default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

そしたら、これらのルールをiptablesに食わせる。

iptables-restore < iptables.rule

ip6tables-restore < ip6tables.rule

ルールを食わせてからおもむろにiptables-persistentパッケージをインストールする。

apt-get install iptables-persistent

するとインストール時にその時点でのiptablesの設定内容をファイルに書き出すか?と尋ねられるのでyesと答えるとIPv4用のルールとIPv6用のルールがそれぞれ/etc/iptables/rules.v4,rules.v6に書き出される。これで、再起動したらルールが復活する。

次にapt-get install sshguardでsshguardをインストールする。これは起動すると自動的にsshguard用のiptablesルールをiptablesに追加してくれるので特になにかする必要はない。

これで再起動すれば余計なポートの遮断とブルートフォース攻撃の遮断が始まる。

もしiptablesの設定に失敗した時は、sysv-rc-confでiptables-persistentとsshguardを無効にした上で再起動し、再びiptablesに新しいルールを食わせた後、dpkg-reconfigure iptables-persistentで再びルールを書き出し、その後、sysv-rc-confでiptables-persistentとsshguardを再度有効化して再起動すればよい。

注意すべきは、sshguradが立ち上がった状態でdpkg-reconfigure iptables-persistentをするとsshguard用のiptablesルールが含まれた状態でルールを書き出してしまい、結果、次に起動したときにiptables-persistentとsshguardがどちらもsshguard用のルールを登録して二重に登録されてしまうこと。その場合は、/etc/iptables/rules.v4,v6を直接書き換えてsshguard用の行を削ってもいい。

 

「Debian 攻撃からの守りを固める」への2件のフィードバック

  1. ついでに/etc/sshguard/whitelistに自ネットワークを許可するように記述しておこう。でないと、間違ってログイン失敗した後などに一定期間ログインできなくなってしまう。とりあえず自ネットワークさえ許可しておけば、最悪L2TP VPNでルーターに接続すればsshguardを回避できる。

  2. この設定ではIPv6のステートレス自動設定がされないことに気が付いた。実際、IPv6はリンクローカルなアドレスしか設定されていない。というわけで、ip6tables.ruleにルーター広告を受け入れる様に設定を追加。

    # Allow RS,RA,NS,NA
    -A INPUT -p ipv6-icmp –icmpv6-type router-solicitation -j ACCEPT
    -A INPUT -p ipv6-icmp –icmpv6-type router-advertisement -j ACCEPT
    -A INPUT -p ipv6-icmp –icmpv6-type neighbor-solicitation -j ACCEPT
    -A INPUT -p ipv6-icmp –icmpv6-type neighbor-advertisement -j ACCEPT

    これでインターフェースがルーター広告を受け入れる様になるので、ステートレス自動設定で正しいアドレスが設定された。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください