パケットフィルタ

2015-03-27 (金) 10:31:19 (992d)

UFWを利用すると簡単

http://yukeikai.net/orca/index.php?%C6%FC%B5%AD%2F2014-01-28

iptablesを直接設定する場合

スカイ・エス・エイッチさんパケットフィルタの例(ipchains)を見て security対策に挑戦してみた。
kernel2.4からipchainsの代わりにiptablesが標準でインストールされている。基本インストールするとiptablesが既に使用可能になっている。
こちらiptablesの設定を参考にした。

ORCAサーバ(スタンドアロン)    192.168.0.20
クライアント1   WinXP        192.168.0.3
クライアント2   WinXP        192.168.0.4

としておきます。サーバにはFTPサーバ(proftpd)、Webサーバ(apache)、sambaサーバ、ntpサーバもインストールしてあります。
rootでloginしてコンソールから、

# 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

とでればインストールされています。

  1. ポリシーを決める
    INPUT については、一旦すべて ACCEPT(許可)。FORWARD は使わないので DROP(破棄)。OUTPUT は、すべて ACCEPT(許可)。
    # iptables -P INPUT ACCEPT
    # iptables -P FORWARD DROP
    # iptables -P OUTPUT ACCEPT
  2. ルールをクリア
    # iptables -F
  3. ルールをキー入力
    icmp(ping)と自端末からの入力を許可
    # iptables -A INPUT -p icmp -j ACCEPT
    # iptables -A INPUT -i lo -j ACCEPT
    Webによる接続を許可
    # iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    FTPによる接続を許可
    # iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    ssh による接続を許可
    # iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    samba による接続を許可
    # iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    # iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    ntp-serverへの接続を許可
    # iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 123 -j ACCEPT
    ORCAへの接続を許可
    # iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 5432 -j ACCEPT
    # iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 8000 -j ACCEPT
    # iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 5432 -j ACCEPT
    # iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 8000 -j ACCEPT
    TCPの接続開始と応答、FTPデータなどを許可
    # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    他の接続はすべて破棄(ポリシーの再設定)
    # iptables -P INPUT DROP
  4. /etc/network/interfaces
    起動時に以上の設定をするには/etc/network/interfacesに下記の通り記述する。
    auto lo eth0
    iface lo inet loopback
    iface eth0 inet static
    address 192.168.0.20
    netmask 255.255.255.0
    broadcast 192.168.0.255
    network 192.168.0.0
    gateway 192.168.0.1
    pre-up iptables -P INPUT ACCEPT
    pre-up iptables -P FORWARD DROP
    pre-up iptables -P OUTPUT ACCEPT
    pre-up iptables -F
    pre-up iptables -A INPUT -p icmp -j ACCEPT
    pre-up iptables -A INPUT -i lo -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 5432 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 8000 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 5432 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 8000 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 123 -j ACCEPT
    pre-up iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    pre-up iptables -P INPUT DROP

NFS とファイアウォール

相性が悪いらしい。mountdポートの固定が必要。
http://infobsession.net/wiki/index.php?cmd=read&page=Linux%2FDebian%2FTips

  1. mountdポートの固定
    /etc/default/nfs-common に
    STATDOPTS="--port 2050 --outgoing-port 2051"
    /etc/default/nfs-kernel-server に
    RPCMOUNTDOPTS="-p 2052"
  2. /etc/network/interfacesに追記
    portmapper nfs mountdへの接続を許可する。
    auto lo eth0
    iface lo inet loopback
    iface eth0 inet static
    address 192.168.0.20
    netmask 255.255.255.0
    broadcast 192.168.0.255
    network 192.168.0.0
    gateway 192.168.0.1
    pre-up iptables -P INPUT ACCEPT
    pre-up iptables -P FORWARD DROP
    pre-up iptables -P OUTPUT ACCEPT
    pre-up iptables -F
    pre-up iptables -A INPUT -p icmp -j ACCEPT
    pre-up iptables -A INPUT -i lo -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    pre-up iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.0/24 --dport 137:139 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 5432 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.3 -d 192.168.0.20 --dport 8000 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 5432 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.4 -d 192.168.0.20 --dport 8000 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 123 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.20 --dport 2049 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 2049 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.20 --dport 111 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 111 -j ACCEPT
    pre-up iptables -A INPUT -p tcp -s 192.168.0.0/24 -d 192.168.0.20 --dport 2050:2052 -j ACCEPT
    pre-up iptables -A INPUT -p udp -s 192.168.0.0/24 -d 192.168.0.20 --dport 2050:2052 -j ACCEPT
    pre-up iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    pre-up iptables -P INPUT DROP

CUPS リモート管理を可能にする

pre-up iptables -A INPUT -p tcp --dport 631 -j ACCEPT

Cygwin(xdmcp)とファイアウォール

pre-up iptables -A INPUT -p udp --dport 177 -j ACCEPT

もう少し簡単にiptables

dhcpではうまく行かないのでstaticにすること。

/etc/network/interfaces (ORCAサーバ)

auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.0.20
netmask 255.255.255.0
broadcast 192.168.0.255
network 192.168.0.0
gateway 192.168.0.1

pre-up iptables -P INPUT ACCEPT
pre-up iptables -P FORWARD DROP
pre-up iptables -P OUTPUT ACCEPT
pre-up iptables -F

pre-up iptables -A INPUT -p icmp -j ACCEPT
pre-up iptables -A INPUT -i lo  -j ACCEPT

# pre-up iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

pre-up iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
pre-up iptables -P INPUT DROP

設定を変更したら、

# /etc/init.d/networking restart

以上の設定でlocal以外からはORCAサーバにアクセスできなくなる。

pre-up iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

としてポート8000を解放するとクライアント(glclient)からORCAサーバ(glserver)に接続可能になる。
ルータのアドレス変換でポート8000を解放するとLAN外部からも容易にアクセスできでしまう。

pre-up iptables -A INPUT -p tcp  -s 192.168.0.0/24 -d 192.168.0.20 --dport 8000 -j ACCEPT

とするとLAN内のすべてのクライアントからORCAサーバに接続可能になる。外部からの接続は遮断。

pre-up iptables -A INPUT -p tcp  -s 192.168.0.3 -d 192.168.0.20 --dport 8000 -j ACCEPT

とするとクライアント1だけがORCAサーバに接続可能になる。