iptablesの設定

2019-05-30

ネットワーク構成

①CTU → ②KVM Server → ③サーバ(eth0)=④サーバ(eth1) → ⑤内部ネットワーク

  1. CTU 192.168.24.1 フレッツのルータ
  2. KVM Server 192.168.24.150 KVM Server
  3. FW サーバ(eth0) 192.168.24.200 フレッツ側のLAN(internet)
  4. FW サーバ(eth1) 192.168.0.200 内部側のLAN(internal)
  5. 内部ネットワーク 192.168.0.0/24 内部ネットワーク

【要件】

  • 外部からの接続パケットは基本的にすべて破棄
  • ただし接続済み通信のパケットは許可
  • 内部からの接続パケットは基本的にすべて許可
  • ループバックアドレスに関してはすべて許可
  • メンテナンスホスト(192.168.24.200)へのSSHは許可(TCP 22)
  • Linuxサーバ(eth1)を経由して外部へ出ていくパケットのソースアドレスを変換(内部アドレス→外部アドレス)

NICの設定

(1)外部用のネットワークをeth0 に設定

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Xen Virtual Ethernet
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=5e:15:d3:78:5e:ac
NETMASK=255.255.255.0
IPADDR=192.168.24.200
TYPE=Ethernet

(2)内部用のネットワークをeth1 に設定

# vi /etc/sysconfig/network-scripts/ifcfg-eth1
# Xen Virtual Ethernet
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HWADDR=52:9c:72:91:33:e2
NETMASK=255.255.255.0
IPADDR=192.168.0.200
TYPE=Ethernet

(3)外部接続時のルートを設定

# route add -net 192.168.24.0 gw 192.168.24.1 metric 1 netmask 255.255.255.0 eth0

(4)内部部接続時のルートを設定

# route add -net 192.168.0.0 gw 192.168.0.200 metric 1 netmask 255.255.255.0 eth1

iptabls の設定

(1)ip_forwardを有効にする


暫定的に有効(再起動すると初期値に戻る)

#echo 1 > /proc/sys/net/ipv4/ip_forward

(2)sysctl.confを編集

暫定的に有効(再起動しても有効)

# vi /etc/sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

(3)sysctl.confの内容を反映

# sysctl -p

(4)iptables の設定をおこなう

@it のip_forwardを参考にしながらスクリプトを作成

#! /bin/sh

trusthost='192.168.24.200'
internal_ip='192.168.0.0/24'

my_internet_ip='192.168.24.200'
my_internal_ip='192.168.0.200'

##############
#Flush & Reset
##############
iptables -F
iptables -t nat -F
iptables -X

##############
#Deafult Rule
##############
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP
iptables -A FORWARD -i eth1 -o eth0 -s $internal_ip -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#########
#loopback
#########
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#######################
#ICMP
#######################
iptables -A INPUT -p icmp --icmp-type echo-request -s $my_internet_ip -d $my_internal_ip -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $my_internal_ip -d $my_internet_ip -j ACCEPT
#######################
#ssh trusthost-> myhost
#######################
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -s $trusthost -d $my_internal_ip --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s $my_internal_ip --sport 22 -d $trusthost -j ACCEPT

#################
#SNAT(masquerade)
#################
iptables -t nat -A POSTROUTING -o eth0 -s $internal_ip -j MASQUERADE

################################################
#Outgoing packet should be real internet Address
################################################
#iptables -A OUTPUT -o eth0 -d 10.0.0.0/8 -j DROP
#iptables -A OUTPUT -o eth0 -d 176.16.0.0/12 -j DROP
#iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP
#iptables -A OUTPUT -o eth0 -d 127.0.0.0/8 -j DROP

#########
#logging
#########
iptables -N LOGGING
iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING
iptables -A FORWARD -j LOGGING

iptablesの起動

(1)iptablesのルールを保存(再起動しても有効とするため)

# /etc/rc.d/init.d/iptables save
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ]

(2)iptablesを起動

# /etc/init.d/iptables start
ファイアウォールルールを適用中: [ OK ]
チェインポリシーを ACCEPT に設定中filter nat [ OK ]
iptables モジュールを取り外し中 [ OK ]
iptables ファイアウォールルールを適用中: [ OK ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns ip_c[ OK ]_ftp

(3)自動起動を設定

# chkconfig iptables on

(4)自動起動を確認

chkconfig --list iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off

スポンサーリンク