TORIPIYO DIARY

recent event, IoT, programming, infrastructure topics

Raspberry Pi 3が自宅ネットワーク内の他デバイスと通信出来ないようにiptableを設定

外部に公開しているraspberry piを踏み台にして、自宅ネットワーク内のデバイスが攻撃を受けないように、iptablesに以下設定をいれました。

実行順序(もちろん、rootユーザで)
1. iptablesの設定を追加(もしかしたら、この前にiptables関連のパッケージインストールが必要だったかも。。。)

# 自宅のホームネットワークのIP
localnetwork='192.168.0.0/24'
router='192.168.0.1'
pi='192.168.0.12'

# raspberry pi とルーターは通信できるようにする
/sbin/iptables -A OUTPUT -s $pi -d $router -j ACCEPT

# 自宅ネットワークの機器から、raspberry piに対してsshは出来るようにしておく
/sbin/iptables -A OUTPUT -p tcp -s $pi --sport 22 -d $localnetwork -j ACCEPT

# 自宅ネットワークの機器から、raspberry pi上の80port, 81portで動いているプロセスに接続出来るようにしておく
/sbin/iptables -A OUTPUT -p tcp -s $pi --sport 80 -d $localnetwork -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -s $pi --sport 81 -d $localnetwork -j ACCEPT

# raspberry pi から自宅ネットワークの機器へ許可していない通信をしようとするとログが出力されるようにする
/sbin/iptables -N LOGGING
/sbin/iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
/sbin/iptables -A OUTPUT -s $pi -d $localnetwork -j LOGGING

# 上記のssh, http以外で、自宅ネットワークの機器に通信しようとするとパケットがドロップされるようにしておく
/sbin/iptables -A OUTPUT -s $pi -d $localnetwork -j DROP

2. 上記のiptablesの設定をサーバが再起動されても反映されるように、/etc/iptables/rules.v4 ファイルに書き出す

iptables-save >> /etc/iptables/rules.v4

3. iptablesによってドロップされたパケットのログが/var/log/messagesではなくて、/var/log/iptables.logに出力されるように修正

  • 1行目は、DROP: というプレフィックスであれば、/var/log/iptables.logに書き出す意味
  • 2行目は、/var/log/messagesへの二重の書き出しを防ぐ
vi /etc/rsyslog.d/iptables.conf
--------------------------------
:msg, contains, "DROP:" -/var/log/iptables.log
& ~
--------------------------------

rsyslogデーモンをrestart

service rsyslog restart

4. logが出力されるか確認

# 適当な自宅ネットワークのipにping
ping 192.168.0.5
# ログが出力されたか見る
cat /var/log/iptables.log


参考にしたページ
iptablesテンプレート集 改訂版(1):スタティックなパケットフィルタリング (3/4) - @IT
Change the IPTables log file « Networking How To's