iptables アクセス遮断
前提
/icons/hr.icon
iptables関連ツールがインストールされ、有効になっている
Debian / Ubuntu など
$ sudo apt update
$ sudo apt install iptables
iptables-persistentをインストール
$ sudo apt install iptables-persistent
Redhat / CentOS / Amazon Linux / Almalinux など
$ sudo yum install iptables-services
$ sudo systemctl enable iptables
$ sudo systemctl enable ip6tables
$ sudo systemctl start iptables
$ sudo systemctl start ip6tables
注意
/icons/hr.icon
これらのコマンドは実行後に即時反映されるが、再起動で消えるため注意
反映のために設定の永続化欄を参照
SSHポート(22)を遮断すると接続できなくなる(すぐに切断される)ので注意
rootユーザ、またはiptablesに関してroot権限を有する設定のあるsudoで実行する必要がある
以下コマンド例はrootユーザ想定
コマンド例
/icons/hr.icon
特定IPのインバウンドを遮断(IPv4)
$ iptables -A INPUT -s 203.0.113.10 -j DROP
特定IPのインバウンドを遮断(IPv6)
$ ip6tables -A INPUT -s 2001:db8::/32 -j DROP
特定IPのアウトバウンドを遮断(IPv4)
$ iptables -A OUTPUT -d 203.0.113.10 -j DROP
特定IPのアウトバウンドを遮断(IPv6)
$ ip6tables -A OUTPUT -d 2001:db8::/32 -j DROP
特定IPの転送を遮断(IPv4)
$ iptables -A FORWARD -s 203.0.113.10 -j DROP
特定IPの転送を遮断(IPv6)
$ ip6tables -A FORWARD -s 2001:db8::/32 -j DROP
ポート単位で遮断
$ iptables -A INPUT -p tcp --dport 22 -s 203.0.113.0/24 -j DROP
設定の永続化
/icons/hr.icon
最初にバックアップの取得を推奨
$ iptables-save > </path/to/dir>.$(date +%Y%m%d).rules
$ ip6tables-save > </path/to/dir>.$(date +%Y%m%d).rules
もとに戻す時の方法は下記 復元 を参照
Debian / Ubuntu など
設定ファイルの場所
IPv4
/etc/iptables/rules.v4
IPv6
/etc/iptables/rules.v6
コマンド(netfilter-persistent saveを使う方法)
$ netfilter-persistent save
ファイルに更新が反映されたことを確認
コマンド((ip|ip6)tables-saveを使う方法)
保存コマンド
$ iptables-save > /etc/iptables/rules.v4
$ ip6tables-save > /etc/iptables/rules.v6
復元コマンド
$ iptables-restore < /etc/iptables/rules.v4
$ ip6tables-restore < /etc/iptables/rules.v6
Redhat / CentOS / Amazon Linux / Almalinux など
設定ファイルの場所
IPv4
/etc/sysconfig/iptables
IPv6
/etc/sysconfig/ip6tables
コマンド(service (ip|ip6)tables save を使う方法)
$ service iptables save
$ service ip6tables save
ファイルに更新が反映されたことを確認
コマンド((ip|ip6)tables-saveを使う方法)
保存コマンド
$ iptables-save > /etc/sysconfig/iptables
$ ip6tables-save > /etc/sysconfig/ip6tables
復元コマンド
$ iptables-restore < /etc/sysconfig/iptables
$ ip6tables-restore < /etc/sysconfig/ip6tables
直接反映もできるが、一度backupを取ることを推奨
$ iptables-save > /etc/iptables/rules.v4.bak
$ iptables-restore < /etc/iptables/rules.v4.bak
復元
/icons/hr.icon
$ iptables-restore < </path/to/backup-file>
基本コマンド解説
/icons/hr.icon
詳細は man iptablesで確認
-A <チェイン>: (Append) 指定したチェインの末尾にルールを追加
INPUT: サーバー自身(ローカルホスト)宛のパケット
OUTPUT: サーバー自身から発信されるパケット
FORWARD: サーバーを通過(転送)していくパケット
-s <IPアドレス/CIDR>: (source) 送信元のIPアドレスを指定
-d <IPアドレス/CIDR>: (destination) 宛先のIPアドレスを指定
-p <プロトコル>: (protocol) プロトコル(tcp, udpなど)を指定
--dport <ポート番号>: (destination-port) 宛先ポート番号を指定(-p tcp や -p udp と共に使用)
-j <ターゲット>: (jump) パケットがルールに一致した場合の動作を指定
DROP: パケットを破棄送信元には何も応答を返さない(タイムアウトするまで待たせる効果がある)
REJECT: パケットを拒否送信元に「接続拒否」の応答を返す
ACCEPT: パケットを許可
関連
/icons/hr.icon