次に、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用の行を削ってもいい。