とりあえず、公式のとおりにやっただけです
※ SSH 接続で遠隔操作をしない場合は、SSH で使用するポートを許可の箇所は無視して下さい
※ IPv6 は使わないので無効化しました
※ iptables ArchLinux 公式サイト
https://wiki.archlinux.jp/index.php/Iptables
※ シンプルなステートフルファイアウォール ArchLinux 公式サイト
https://wiki.archlinux.jp/index.php/シンプルなステートフルファイアウォール
※ 全ての作業は root で行います。
◆ 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 による遠隔操作をしない場合は設定不要
● 方法1
$ sudo nano /etc/iptables/iptables.rules
-A TCP -p tcp --dport 22 -j ACCEPT
※ COMMIT の真上に追記します
● 方法2
※ 『 >> 』で追記となります(『 > 』は上書きになり設定した項目が全て消えるため要注意、よく確認して下さい)
設定を間違った時のために、念のためバックアップを取ります
# 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 の情報が出て来なくなると思います
これで設定終了です
以上で、基本的なファイアウォールの設定は終了です
ド素人なので、もっと楽に簡単に設定する方法ないですかね
また調べて、良いのがあればお知らせします
(/・ω・)/ コロコロコロ =〇