1
3

More than 3 years have passed since last update.

パケットフィルタリングとセキュリティ

Last updated at Posted at 2020-12-16

iptables

コマンド

コマンド 説明
-A 指定したチェインの最後にルールを追加
-S 指定したチェインから削除
-P 指定したチェインのポリシーを変更
-L[チェイン] リスト表示
-N チェイン ユーザー定義チェインを作成
-X チェイン ユーザー定義チェインを削除
-l ルール番号を指定してルールを挿入
-F チェイン 指定したチェイン内のルールを全て削除

チェイン

チェイン 説明
INPUT 入ってくるパケット
OUTPUT 生成されたパケット
FORWARD 経由するパケット
PREROUTING 入ってきたパケットを変換
POSTROUTING 出て行くパケットを変換

ターゲット

ターゲット 説明
ACCEPT 許可
DROP 破棄
REJECT 拒否(送信元に通知)
MASQUERADE 送信元IPアドレスとポート番号の変換
SNAT 送信元IPアドレスの変換
DNAT 送信先IPアドレスの変換
LOG ログに出力

ルール

ルール 説明
-s 送信元IP
-d 送信先IP
--sport 送信元ポート
--dport 送信先ポート
--to 宛先を指定
-j 適用されるターゲット
-p プロトコル
-i 入力インタフェース
-o 出力インタフェース

オプション

オプション 説明
-v 詳細表示
-n 数値で表示
--line-numbers ルール番号表示

FORWARDチェインポリシーをDROPに変更。

# iptables -P FORWARD DROP

192.168.0.0/24から送られきたICMPパケットを拒否。

# iptables -A INPUT -p icmp -s 192.168.0.0/24 -j REJECT

ログを記録する場合は、LOGターゲットを使います。

# iptables -A INPUT -p tcp -dport 80 -j LOG --log-prefix "HTTP access..."

saveとrestore

# service iptables save

※centos7では、iptables-servicesパッケージのインストールが必要です。

もしくは

# iptables-save > /etc/sysconfig/iptables
# iptables-restore > /etc/sysconfig/iptables

ポート転送

eth1に届いた8080番ポートを、192.168.1.2:80に届くようにする。

# iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth1 -j DNAT --to 192.168.1.2:80

iptables6

使い方は、iptablesと同じです。

ルーターとしての利用

パケット転送

Linuxをルーターとして利用する場合は、異なるネットワーク間でのパケット転送を許可する必要があります。

そのためには、次の値が 1 である必要があります。

#echo 1 > /proc/sys/net/ipv4/ip_forward
#echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

恒久的に設定するには、/etc/sysctl.conf に適切なエントリを記述したり、
/etc/sysconfig/network に次の通り記述します。

FORWARD_IPv4=yes
IPV6FORWARDING=yes

napt

192.168.0.0/24 からeth0 へ出ていくパケットは、MASQUERADE を利用する。

# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

snat

192.168.0.1 から ens33 へでていくパケットは SNAT される。

# iptables -t nat -A POSTROUTING -o ens33 -j SNAT --to-source 192.168.0.1

dnat

ens38 から入ってくるパケットは 192.168.0.2 へ変換される。

# iptables -t nat -A PREROUTING  -i ens34 -j DNAT --to-destination 192.168.0.2

firewall

とりあえず、CENTOS7 からは、firewall に変わっているので、ここを主に抑えておく。

ゾーン

ゾーン 説明
public インターネット上の公開サーバー用(デフォルト)
dmz DMZ
work 社内LANにあるクライアントPC用
home 家庭内LANにあるクライアントPC用
internal
external 外部ネットワークのインターフェース設定用
block 受信パケットを全て拒否
drop 受信パケットを全て破棄
trusted 通信を許可

firewall-cmdのオプション

オプション 説明
--state 状態表示
--reload 再読み込みして反映
--permanent 永続設定する
--get-zones 定義されているゾーンを一覧表示
--get-services 定義されているサービスを一覧表示
--list-all 指定したゾーンで有効な項目を全て表示
--list-services 指定したゾーンで有効なサービスを全て表示
--add-services=サービス名 指定したサービスを有効にする(許可する)
--add-port=ポート番号/tcp・udp 指定したポート番号を許可する
--remove-service=サービス名 指定したサービスを無効にする(拒否する)
--remove-portポート番号/tcp・udp 指定したポート番号を拒否する。
--zone=ゾーン ゾーンを指定する(デフォルトはPublic)

ufw

Ubuntu では、より簡単にファイヤウォールの設定ができる、ufwを使うのが一般的です。

  • ファイヤウォールのルールは番号が若い順から評価される。
  • 評価したルールは、/etc/ufw/user.rules(IPv4)、/etc/ufw/user6.rules(IPv6)に保存される。

ufwのオプション

サブコマンド 説明
enable 有効
disable 無効
status 状態表示
status numberef 状態をルール番号とともに表示
status verbose 状態を詳細に表示
allow 許可
delete 削除
insert ルール番号を指定して追加
default デフォルトのポリシーを設定

セキュリティ対策

Smurf対策

ブロードキャストを無視する場合は、次のように指定します。
ICMP echo request がブロードキャストの場合は無視して、ICMP echo reply を返しません。
これは、Smurf対策(特定のコンピュータに繋がるかどうか確認する「ping」コマンドで使われるパケットの送信元を偽装し、標的に向けて大量のパケットを送りつける攻撃手法。)の一つです。

#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

SYS flood対策

SYS flood対策 (TCPの3ウェイハンドシェイクにおいて、第1段階のSYNパケットを連続して送信する攻撃) には、tcp_syncookies を 1 にするとよい。

#echo 1 > /proc/sys/net/ipv4/tcp_syncookies

リンク

ハマる前に理解する「Firewalld」の設定方法、「iptables」との違い

iptables -t nat -A POSTROUTING -s 192.168.1.32 -j SNAT --to-source 192.168.1.254
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3