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