シンプルなファイアウォール iptables の設定と IPv6 の無効化

とりあえず、公式のとおりにやっただけです
※ SSH 接続で遠隔操作をしない場合は、SSH で使用するポートを許可の箇所は無視して下さい
※ IPv6 は使わないので無効化しました

※ iptables ArchLinux 公式サイト 
https://wiki.archlinux.jp/index.php/Iptables

※ シンプルなステートフルファイアウォール ArchLinux 公式サイト
https://wiki.archlinux.jp/index.php/シンプルなステートフルファイアウォール

※ 全ての作業は root で行います。
<br>

◆ iptables.rules の作成
```
# touch /etc/iptables/iptables.rules
```
◆ iptables のサービスを起動・有効化
```
# systemctl start iptables 
# systemctl enable iptables
```

◆ 現在のルールを表示
```
# iptables -nvL

※ Arch Linux 入れたてであれば、下記のとおり全て許可 = ACCEPT になっていると思います

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
```

◆ TCP と UDP のユーザー定義チェインを作成
```
# iptables -N TCP
# iptables -N UDP
```

◆ FORWARD チェインを DROP = 拒否 に設定
```
# iptables -P FORWARD DROP
```

◆ OUTPUT チェインを ACCEPT = 許可 に設定
```
# iptables -P OUTPUT ACCEPT
```

◆ INPUT チェインを DROP = 拒否 に設定
```
# iptables -P INPUT DROP
```

◆ INPUT チェインに正当なトラフィックを許可するルールを追加
```
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
```

◆ "loopback" (lo) インターフェイスからのトラフィックを全て許可
```
# iptables -A INPUT -i lo -j ACCEPT
```

◆ "INVALID" ステートに一致する全てのトラフィックを破棄
```
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
```

◆ ICMP エコー要求 (ping) を全て許可
```
# iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
```

◆ INPUT チェインに TCP チェインと UDP チェインを適用
```
# iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
# iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
```

◆ ポートを開いていない場合、TCP 接続は TCP RESET パケットで、
UDP ストリームは ICMP port unreachable メッセージで拒否
```
# iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
# iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
```

◆ 他のプロトコルのために、icmp protocol unreachable メッセージで
残りの受信トラフィックを拒否する最終ルールを INPUT チェインに追加
```
# iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
```

◆ iptables.rules ファイルの生成
```
# iptables-save > /etc/iptables/iptables.rules
```

◆ 公式のサンプルと相違ないか確認してみる

以下のコマンドを実行
```
# cat /etc/iptables/iptables.rules

表示されたものと、下記の公式サイトのサンプルを比較する

------この下から------

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP　　※
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

------この上まで------

※ コマンドにミスがあるとエラーが起きますが、十分に注意しながら記述しましょう
※ 公式サイトのサンプルは古く、若干表記が変わっている場合があります
```

◆ ファイアウォール iptables.rules に SSH で使用するポートを許可
※ SSH による遠隔操作をしない場合は設定不要
```
● 方法１
$ sudo nano /etc/iptables/iptables.rules

-A TCP -p tcp --dport 22 -j ACCEPT
※ COMMIT の真上に追記します

● 方法２ 
※ 『 >> 』で追記となります（『 > 』は上書きになり設定した項目が全て消えるため要注意、よく確認して下さい）

設定を間違った時のために、念のためバックアップを取ります
# cp /etc/iptables/iptables.rules /etc/iptables/iptables.rules.bak

設定
# iptables -A TCP -p tcp --dport 22 -j ACCEPT
# iptables-save >> /etc/iptables/iptables.rules
```

◆ IPv6 の無効化
※私は使用しないので無効化します
※使用する場合は公式サイトを参照してファイアウォールの設定をして下さい
```
● 現在の状態を確認します
$ ip a

※デフォのままでは IPv6 の情報が出て来ていると思います

● 無効化します
$ sudo nano /etc/default/grub

※『 GRUB_CMDLINE_LINUX 』の欄に 『 ipv6.disable=1 』を追記します
GRUB_CMDLINE_LINUX="ipv6.disable=1"

Ctrl+x で保存終了します

● GRUB の設定を更新
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

● 再起動します

● ターミナルを開いて、現在の状態を確認します
$ ip a

IPv6 の情報が出て来なくなると思います
これで設定終了です
```

以上で、基本的なファイアウォールの設定は終了です
ド素人なので、もっと楽に簡単に設定する方法ないですかね
また調べて、良いのがあればお知らせします
(/・ω・)/ ｺﾛｺﾛｺﾛ ＝〇