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