YahooBB環境で、linuxルータ

はじめに

市販されているブロードバンドルータを使うのもいいが、せっかく常時起動しているサーバがあるので、それにルータの役割も担ってもらおう。

想定環境

eth0=wan、eth1=192.168.1.0/24

linuxサーバのNIC増設

サーバをオフラインにしてNICを増設しオンライン後NICが認識されていること。DHCPにてIPアドレスが取得出来たこと。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
TYPE=Ethernet

# /etc/rc.d/init.d/network restart

# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:218.XXX.XX.XX  Bcast:218.118.19.255  Mask:255.255.254.0
          inet6 addr: fe80::206:5bff:fe9f:5d09/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19318209 errors:0 dropped:0 overruns:1 frame:0
          TX packets:18858487 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:891417328 (850.1 MiB)  TX bytes:1686846629 (1.5 GiB)
          Interrupt:177 Base address:0x2400
yahooからIPアドレス取得できない場合以下コマンド投入により解決するかも。

# dhclient -r eth0

Internet Systems Consortium DHCP Client V3.0.3-RedHat
Copyright 2004-2005 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Listening on LPF/eth0/XX:XX:XX:XX:XX:XX
Sending on   LPF/eth0/XX:XX:XX:XX:XX:XX
Sending on   Socket/fallback
DHCPRELEASE on eth0 to 218.118.19.251 port 67
# dhclient eth0

Internet Systems Consortium DHCP Client V3.0.3-RedHat
Copyright 2004-2005 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP

Listening on LPF/eth0/XX:XX:XX:XX:XX:XX
Sending on   LPF/eth0/XX:XX:XX:XX:XX:XX
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6
DHCPOFFER from 218.118.19.251
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 218.118.19.251
bound to 218.118.XX.XX -- renewal in 34494 seconds.

ファイヤーウォールの設定

nameserverのIPは東/西日本で違うので注意です。

# vi router.sh

#!/bin/bash
# インターフェイスを定義する
WAN='eth0' # 外部インタフェース
LAN1='eth1' # 内部1インタフェース
PC01='192.168.10.10' #リモートデスクトップサーバ

# ローカル・ネットワーク・アドレスの設定
LOCALNET1='192.168.10.0/24' # ローカル・ネットワーク・アドレス

# すべてのルールをクリア
/etc/init.d/iptables stop

# デフォルトルール設定(最初に全て拒否ってだんだんと穴を開けていく)
iptables -P INPUT DROP    # 受信はすべて破棄
iptables -P FORWARD DROP  # 通過はすべて破棄
iptables -P OUTPUT ACCEPT # 送信はすべて許可

# ループバックアドレスからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# ローカルネットワーク内からのアクセスをすべて許可
iptables -A INPUT   -i $LAN1 -j ACCEPT
iptables -A FORWARD -i $LAN1 -j ACCEPT

# SYN Cookiesを有効にする
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

# ブロードキャストアドレス宛pingには応答しない
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

# フラグメント化されたパケットはログを記録して破棄
iptables -N LOG_FRAGMENT
iptables -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A LOG_FRAGMENT -j DROP
iptables -A INPUT -f -j LOG_FRAGMENT

# 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
iptables -A INPUT -s ! $LOCALNET1 -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT -s ! $LOCALNET1 -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET1 -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -d ! $LOCALNET1 -p udp -m multiport --sports 135,137,138,139,445 -j DROP

#Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

# ローカルネットワーク内からのインターネット接続を許可
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

# 内部から行ったアクセスに対する外部からの応答アクセスを許可
iptables -A INPUT   -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ブロードキャストアドレス、マルチキャストアドレス宛パケットはログを記録しない
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

# 113番ポート(IDENT)へのアクセスには拒否応答
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

#######################################################
# WAN側ポート開放設定                                 #
#######################################################

# HTTP(80番ポート)をすべて許可
iptables -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT

# HTTPS(443番ポート)をすべて許可
# ※HTTPSを使う場合
iptables -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT

# ssh(22番ポート)を許可
iptables -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

#######################################################
# LAN1配下に別のサーバがある場合                      #
#######################################################

# リモートデスクトップ(3389番ポート)をすべて許可(PC01へ転送させる)
iptables -A FORWARD -i $WAN -p tcp -d $PC01 --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 3389 -j DNAT --to $PC01

 
# 設定ルール外のアクセスはログを記録して破棄
iptables -A INPUT   -j LOG --log-prefix '[iptables INPUT DROP] '
iptables -A INPUT   -j DROP
iptables -A FORWARD -j LOG --log-prefix '[iptables FORWARD DROP] '
iptables -A FORWARD -j DROP

# 再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

# パケット転送開始
sysctl -w net.ipv4.ip_forward=1 > /dev/null
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# chmod 700 router.sh
# ./router.sh
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter nat               [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中nat filter               [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_ftp ip_nat_ftp [  OK  ]
# chkconfig iptables on
# chkconfig --list iptables
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
# vi /etc/resolv.conf
東日本の場合
nameserver 218.176.253.65

西日本の場合
nameserver 218.176.253.97 

評価

linuxサーバがルータになり市販ルータが1つ減ったため回線スピードも8M ADSL契約で下り1.9M→2.2MへUP。


index.html
©2016 p-runner.netspec