手順 |
内容 |
備考 |
1 |
iptables に設定するルールを保存する /etc/iptables_rules_org ディレクトリを作成します。
# makdir /etc/iptables_rules_org
|
|
オリジナルルールを保存するフォルダです。
|
2 |
以下の内容の IPv4 のルール /etc/iptables_rules_org/rules.v4 を作成します。
# (1) ポリシーの設定 OUTPUTのみACCEPTにする
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# (2) ループバック(自分自身からの通信)を許可する
-A INPUT -i lo -j ACCEPT
# (3) データを持たないパケットの接続を破棄する
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# (4) SYNflood攻撃と思われる接続を破棄する
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# (5) ステルススキャンと思われる接続を破棄する
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# (6) icmp(ping)の設定
# hashlimitを使う
# -m hashlimit hashlimit モジュールを使用する
# -hashlimit-name t_icmp 記録するファイル名
# -hashlimit 1/m リミット時には1分間に1パケットを上限とする
# -hashlimit-burst 10 規定時間内に10パケット受信すればリミットを有効にする
# -hashlimit-mode srcip ソース IP を元にアクセスを制限する
# -hashlimit-htable-expire 120000 リミットの有効期間。単位は ms
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_icmp --hashlimit 1/m
--hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT
# (7) 確立済みの通信は、ポート番号に関係なく許可する
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
# (8) 任意への DNS アクセスの戻りパケットを受け付ける
-A INPUT -p udp --sport 53 -j ACCEPT
# (9) SSHを許可する設定
# hashlimitを使う
# -m hashlimit hashlimit モジュールを使用する
# -hashlimit-name t_sshd 記録するファイル名
# -hashlimit 1/m リミット時には1分間に1パケットを上限とする
# -hashlimit-burst 10 規定時間内に10パケット受信すればリミットを有効にする
# -hashlimit-mode srcip ソース IP を元にアクセスを制限する
# -hashlimit-htable-expire 120000 リミットの有効期間。単位は ms
-A INPUT -p tcp -m state --syn --state NEW --dport xxxx -m hashlimit
--hashlimit-name t_sshd --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip
--hashlimit-htable-expire 120000 -j ACCEPT
# (10) 個別に許可するプロトコルとポートをここに書き込む。
-A INPUT -p tcp --dport 25 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 465 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT
-A INPUT -p tcp --dport 2222 -j ACCEPT
-A INPUT -p tcp --dport yyyy -j ACCEPT
COMMIT
|
|
(6) ping の応答を許可しますが、同一 IP アドレスから繰り返しやってくる ping リクエストについては、外部からの攻撃とみなし拒否します。
hashlimit オプションを使うことで、120秒の間に10回パケットを受信すれば、それ以降のリクエストには応答しません。
設定は長いので2行になっていますが、正しくは改行せずに1行にします。
(7) 確立済みの接続については通信を許可します。
この設定は必須で、しないと abuna.net (nice.kaze.com) 側からネットアクセスできなくなります。
udp もこの設定をしておかないと ntpdate コマンドなどが動作しません。
(8) abuna.net (nice.kaze.com) 側からの DNS 問い合わせに対しての戻りパケット (UDP ポート53) を許可します。
こうしておくと、SSH 接続などで無駄に待たされることが無くなります。
(9) SSH を許可しますが、接続回数による制限をかけています。
hashlimit オプションを使うことで、2分間の間に同一 IP アドレスから10回接続要求があると不正な接続とみなし、それ以降の新しい接続要求を2分間拒否します。
xxxx には SSH のポート番号を入れます。
設定は長いので3行になっていますが、正しくは改行せずに1行にします。
(10) 関係するポートは以下の通りです。
25 : SMTP
80 : HTTP
110 : POP3
443 : HTTPs
465 : SMTPs
587 : Submission
995 : POP3s
2222 : SFTP
yyyy : Webmin
|
[POP3] [Submission] のポートは開けません。
メールシステムとしてはこのポートもサポートしていますが、ここで止めます。
[SMTP] は外部からのメール受口でもあるため、ポート開放するしかないです。
yyyy には Webmin のポート番号を入れます。
|
3 |
以下の内容の IPv6 のルール /etc/iptables_rules_org/rules.v6 を作成します。
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
|
|
IPv6 での接続は全て拒否します。
|
4 |
作成したルールを iptables に「現在のルール」として記憶させます。
# iptables-restore < /etc/iptables_rules_org/rules.v4
# ip6tables-restore < /etc/iptables_rules_org/rules.v6
|
|
ちょっと回りくどい設定方法ですが、我慢してください。
こうしないと、正しい Master iptables ができないのです。
でき上がった Master iptables に ACCEPT [3:164] のような記述がありますが、数字はルールに合致した [パケット数:バイト数] で、統計情報です。
設定とは関係ありません。
また、*nat や *mangle の項目もあります。
今回は NAT や QoS などの設定は行わないので、これらの項目は全て ACCEPT でよいです。
触る必要ありません。
|
5 |
念のため、以下のコマンドでルールが正しく適用されていることを確認します。
# iptables -L
# ip6tables -L
|
|
6 |
iptables の「現在のルール」を Master iptables に保存します。
# iptables-save > /etc/iptables.up.rules
# ip6tables-save > /etc/ip6tables.up.rules
|
|
7 |
Webmin で、[ネットワーク]-[Linux ファイヤウォール] と辿り、[設定を適用する] ボタンを押し、[起動時に有効] 項目にある [はい] を選んで、[起動時に有効] ボタンを押すと、IPv4 適用完了です。
|
これ以降、Webmin でも管理できます。
|
8 |
Webmin で、[ネットワーク]-[Linux IPv6 Firewall] と辿り、[設定を適用する] ボタンを押し、[起動時に有効] 項目にある [はい] を選んで、[起動時に有効] ボタンを押すと、IPv6 適用完了です。
|