カテゴリー
【VPS・Linuxサーバー入門】ip6tablesからのWebARENA IndigoのVPSへIPv6仕様のファイアウォールを設定する
※ 当ページには【広告/PR】を含む場合があります。
2022/12/15
iptables
iptables
☆業界屈指の低価格から始めるVPSのLinuxサーバー☆
WebARENA IndigoのDebianインスタンスにユーザーを追加する
debain
debian
tmp
debian
root
$ whoami
debian
#👇rootユーザーに切り替え
$ sudo su -
~# whoami
root
tmp
#👇作業ユーザーの追加
~# useradd -m tmp
#👇作業ユーザーにsudoを行う権限グループに追加
~# gpasswd -a tmp sudo
#👇作業ユーザーのパスワードを追加
~# passwd tmp
#👇SSH公開鍵をdebianのものから借用
~# mkdir /home/tmp/.ssh
~# cp /home/debian/.ssh/authorized_keys /home/tmp/.ssh/
~# chown -R tmp:tmp /home/tmp/.ssh
~/.ssh/config
tmp
Host tmp
HostName 2001:********
User tmp
Port 22
IdentityFile "~/.ssh/private-key"
tmp
root
debian
$ ssh tmp
Linux i-1*********6 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64
#...
$ whoami
tmp
$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for tmp:
#👇rootにログイン
~# whoami
root
debian
hoge
~# usermod -l hoge debian
~# usermod -d /home/hoge -m hoge
~# groupmod -n hoge debian
debian
~# passwd hoge
New password:
Retype new password:
passwd: password updated successfully
tmp
hoge
debain
hoge
$ ssh hoge
Linux i-1*********6 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64
#...
$ whoami
hoge
hoge
tmp
$ sudo userdel tmp
$ sudo rm -rf /home/tmp
☆業界屈指の低価格から始めるVPSのLinuxサーバー☆
ip6tablesでファイアウォールの構築する
iptables-persistentでファイアウォールを管理
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install iptables-persistent -y
標準的なファイアウォールを構築する
$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
altname enp0s10
inet6 2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
ens10
2001:...
fe80::...
$ sudo ip6tables -vnL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
$ sudo netfilter-persistent flush
$ sudo ip6tables -A INPUT -i lo -j ACCEPT
$ sudo ip6tables -A INPUT -i ens10 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-i
$ sudo ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
ICMPv6周りの設定
タイプ | メッセージ内容 | 分類 |
---|---|---|
1 | Destination Unreachable (宛先到達不能) | エラー |
2 | Packet too Big (パケット過大) | エラー |
3 | Time Exceeded (時間切れ) | エラー |
4 | Parameter Problem (パラメータ異常) | エラー |
128 | Echo Request (エコー要求) | 情報 |
129 | Echo Reply (エコー応答) | 情報 |
130 | Multicast Listener Query | 情報 |
131 | Multicast Listener Report | 情報 |
132 | Multicast Listener Done | 情報 |
133 | Router Solicitation (ルーター要請) | 近隣探索 |
134 | Router Advertisement (ルーター広告) | 近隣探索 |
135 | Neighbor Solicitation (近隣要請) | 近隣探索 |
136 | Neighbor Advertisement (近隣広告) | 近隣探索 |
137 | Redirect | 近隣探索 |
$ sudo ip6tables -A INPUT -p ipv6-icmp \
-m icmp6 --icmpv6-type 128 \
-m conntrack --ctstate NEW \
-j ACCEPT
NS(Neighbor Solicitation)
NA(Neighbor Advertisement)
NS(ICMPv6の135)
NA(ICMPv6の136)
$ sudo ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
$ sudo ip6tables -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
$ sudo ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp \
-m icmp6 --icmpv6-type 135 -j ACCEPT
$ sudo ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp \
-m icmp6 --icmpv6-type 136 -j ACCEPT
-s
-d
::/0
#👇リンクローカルアドレスを許可
$ sudo ip6tables -A INPUT -s fe80::/64 -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
$ sudo ip6tables -A INPUT -s fe80::/64 -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
#👇ユニークローカルアドレスを許可
$ sudo ip6tables -A INPUT -s fd00::/64 -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
$ sudo ip6tables -A INPUT -s fd00::/64 -d fe80::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
#👇グローバルユニキャストを許可
$ sudo ip6tables -A INPUT -s 2001:xxxx:xxxx:xxxx::/64 -d 2001:xxxx:xxxx:xxxx::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT
$ sudo ip6tables -A INPUT -s 2001:xxxx:xxxx:xxxx::/64 -d 2001:xxxx:xxxx:xxxx::/64 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
プロトコルごとにユーザー定義チェーンでまとめる
TCP
UDP
$ sudo ip6tables -N TCP
$ sudo ip6tables -N UDP
$ sudo ip6tables -A INPUT -p tcp --syn \
-m conntrack --ctstate NEW -j TCP
$ sudo ip6tables -A INPUT -p udp \
-m conntrack --ctstate NEW -j UDP
TCP
$ sudo ip6tables -A TCP -p tcp -m state --syn \
--state NEW --dport <許可したいポート番号> -j ACCEPT
UDP
DHCPサーバー
UDP
$ sudo ip6tables -A UDP -s fe80::/64 -p udp --dport 546 \
-m conntrack --ctstate NEW -j ACCEPT
$ sudo ip6tables -A UDP -p udp --dport 3478 \
-m conntrack --ctstate NEW -j ACCEPT
不明なパケットをREJECTさせる
REJECT
DROP
#👇TCPターゲット、UDPターゲット以外の場合にエラーパケットを送信&パケット破棄
$ sudo ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
$ sudo ip6tables -A INPUT -p udp -j REJECT --reject-with icmp6-adm-prohibited
#👇それ以外の不定なプロトコルでエラーパケットを送信&パケット破棄
$ sudo ip6tables -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
デフォルトポリシーの書き換え
$ sudo ip6tables -P FORWARD DROP
$ sudo ip6tables -P OUTPUT ACCEPT
$ sudo ip6tables -P INPUT DROP
-P INPUT DROP
$ sudo netfilter-persistent save
ファイアウォール設定中にSSH繋がらなくなったときの対処法
netfilter-persistent save
[インスタンス管理] > [インスタンス] > 問題のあるインスタンスを選択 > [コンソールを起動]
sudo netfilter-persistent flush
☆業界屈指の低価格から始めるVPSのLinuxサーバー☆
まとめ
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー