「透過型ファイアウォール」というか「ブリッジルーター」「L2ファイアウォール」とか

windows10マシンがある。このwindows10マシンが勝手にwindows updateさせないようにするために
windows10マシンから外部へのアクセスを禁止させる。

っが、ローカルネットワークにはアクセスさせたい。ファイル共有サーバにもアクセスさせたい。
ってなリクエストがある。単純に Fiwarewall を構築して、別セグメントにさせてhttpサービスの停止でできるのだが、
対象のwindows10マシンはローカルネットワークのIPアドレス体系を維持したい。

絵にするとこんな感じ
2019y05m24d_230708827.png

方針

eth0とeth1が混在するBridgeを作って、iptableでデバイスベースでプロトコル制御を行う。
2019y05m25d_000607890.png

CentOS6で作ってます
デーモンの「NetworkManager」は停止で、「network」デーモンのみ使ってます

Bridge作成

「/etc/sysconfig/network-scripts/ifcfg-br0」でBridgeデバイスを作って、そこにeh0、eth1を加えます。
ここでは、192.168.0.86/24をBridgeデバイス(br0)に割り当ててます。
設定ファイルを用意したら再起動します。

[root@bridge-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.3
NETMASK=255.255.255.0
ONBOOT=yes
 
[root@bridge-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:0C:29:B5:EE:8C
ONBOOT=yes
BRIDGE=br0
 
[root@bridge-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
HWADDR=00:0C:29:B5:EE:96
ONBOOT=yes
BRIDGE=br0
 
[root@bridge-router ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=bridge-router.sybyl.local
GATEWAY=192.168.0.1
 
[root@bridge-router ~]# reboot

っで再起動後にbrctlで確認してみると

[root@bridge-router ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29b5ee8c       no              eth0
                                                        eth1
[root@bridge-router ~]#

となる。

この段階で、win10からルーターまでpingは通るようになる。
DNSも引けるし、ルーター経由して外部にも行ける。また逆にwin10へのpingも通る。
2019y05m30d_135453549.png

カーネルパラメータの変更

Bridgeを作った直後のカーネルパラメータは下記となっている

[root@bridge-router ~]# cat /proc/sys/net/ipv4/ip_forward
0

なのでBridgeデバイスを経由して双方が通信している。ここでip_forwardを有効にする

[root@bridge-router ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

そして、iptablesコマンドでBridgeデバイスを扱えるようにする。

(確認)
[root@bridge-router ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
0
[root@bridge-router ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
0
[root@bridge-router ~]# cat /proc/sys/net/bridge/bridge-nf-call-arptables
0
 
(設定)
[root@bridge-router ~]# echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
[root@bridge-router ~]# echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
[root@bridge-router ~]# echo 1 > /proc/sys/net/bridge/bridge-nf-call-arptables

この段階でwin10はBridgeルータ(192.168.0.3)にはアクセスできるが、ルーター(192.168.0.1)には行けなくなる
Bridgeルータ(192.168.0.3)からwin10にはアクセス可能
(bridge-nf-call-iptablesを有効にしたため)

iptablesの設定

既定の設定状況は下記のようになっている。

[root@bridge-router ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@bridge-router ~]#

win10がルーター(192.168.0.1)に行けなくなったのは、FORWARDでREJECTされているから?

これを一旦白紙にする。

[root@bridge-router ~]# iptables -F
 
[root@bridge-router ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@bridge-router ~]#

この段階でFORWARDに穴が開き、win10がルーター(192.168.0.1)にアクセス可能となった。

っで、iptables設定

iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

と実行して、FORWARDを既定でDROPさせる。
これでwin10はルーター(192.168.0.1)にアクセス不可となる。
それをベースに目的の仕様に仕立て上げる

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A FORWARD -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
iptables -A FORWARD -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
 
iptables -A FORWARD -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

設定して、確認を終えたら設定ファイルを上書きさせます

[root@bridge-router ~]# /etc/init.d/iptables save

これで「/etc/sysconfig/iptables」が更新され、再起動しても同じルールが適用される。

恒久的なカーネルパラメータの変更

echoコマンドで暫定的な変更をしてますが、運用では「/etc/sysctl.conf」ファイルで下記となるように修正・追記して、
再起動、もしくは「sysctl -p」を実施する

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

参照先

http://blog.shinkaku.co.jp/archives/49028356.html


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-05-30 (木) 14:44:45 (548d)