ネットワークに繋げる前に

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

ということで、ルータを介して接続制限などをしていればよいですが、いきなりネットワークへ繋ぐと大変なので、ここでセキュリティの設定をしておきます。
大まかにはルータ・tcp_wrapper・iptablesの3つで3重にします。
といってもtcp_wrapperは制限できるアプリケーションが結構限定されているので、
以下のコマンドで何が制限することが出来るか確認しておくといいです。

# rpm -q --whatrequires libwrap.so.0

まずはルータでサーバマシンにアクセスされないようにしておきます。
これはセキュリティの設定をした後に、開放すると良いかも。

次にtcp_wrapperの設定をしておきます。
/etc/hosts.deny

all: all

/etc/hosts.allow

all: 127.0.0.1
sshd: 192.168.xx.0/255.255.255.0

そして次にiptablesの設定を行っておきます。
設定変更が容易に行えるようにシェルスクリプトに記述してそれを実行する形式をとります。
うちで使ってるのは次のようなかんじです。
IPアドレスとかは適宜変更して使うといいです。
うちでは基本的に以下のポリシーで運用しています。

  1. Outputパケットは基本的に許可
  2. それ以外のパケットについては一部を除いて破棄
  3. Inputパケットは主要ポート以外は破棄
  4. Forwardパケットはルータとして利用しないので破棄
  5. Icmpパケットは1分間に10回応答したら以降は破棄
  6. 基本的にDropしたパケットはログをとる
  7. 確立されたコネクションに対してのInputは許可
  8. Synから始まらないコネクションは許可してるポートでも破棄

チョンとか中国からの接続は拒否したいので
http://akionweb.com/myobjects/adl/apache/
からCN.txt KR.txt等を毎日ダウンロードするスクリプトを
作成し海外からの拒否を簡略化

akionwebさんが落ちてるっぽいので、
自作してみました。
arin.netなど5箇所から最新のファイルを持ってくるんですが、
それをIPアドレス/サブネットにするのが一部困難で、
若干その辺がおかしいですがとりあえず展開することが出来るようになったので、それを使って落としてきます。

もしこのスクリプトがほしい方が居たらコメントなりに残しておいてもらえると、公開するかもしれません。
PS: PHP5.3.0以上で大部分がハードコーティングされてるので
ある程度知識がない方じゃないと動かせないかもしれません。

シェルスクリプト

#!/bin/bash
 
ipt="/sbin/iptables"
eth=eth0
mynets="192.168.0.0/24"
 
#ポリシーの定義
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
 
#ポリシーの初期化
$ipt -F
$ipt -t nat -F
$ipt -X LOG_FRAGMENT
$ipt -X LOG_PINGDEATH
$ipt -X LOG_DENYHOST
 
/bin/sh /etc/openvpn/openvpn-startup
 
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A INPUT -s $mynets -j ACCEPT
$ipt -A INPUT -i eth1 -j ACCEPT
$ipt -A INPUT -i tun0 -j ACCEPT
$ipt -A INPUT -p udp -m udp --dport 514 -s 192.168.0.1 -j ACCEPT
$ipt -A INPUT -p tcp -m tcp --dport 15091 -j ACCEPT
 
$ipt -N LOG_FRAGMENT
$ipt -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : '
$ipt -A LOG_FRAGMENT -j DROP
$ipt -A INPUT -f -j LOG_FRAGMENT
 
$ipt -N LOG_PINGDEATH
$ipt -A LOG_PINGDEATH -p icmp --icmp-type echo-request -m limit --limit 1/m --limit-burst 10 -j ACCEPT
$ipt -A LOG_PINGDEATH -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES PINGDEATH] : '
$ipt -A LOG_PINGDEATH -j DROP
$ipt -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
$ipt -A INPUT -p icmp -s $mynets -j ACCEPT
$ipt -A INPUT -d 255.255.255.255 -j DROP
$ipt -A INPUT -d 224.0.0.1 -j DROP
 
#拒否
$ipt -N LOG_DENYHOST
$ipt -A LOG_DENYHOST -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES DENY_HOST] : '
$ipt -A LOG_DENYHOST -j DROP
 
for i in `cat /etc/LOCAL/ip.txt`
do
        $ipt -A INPUT -s $i -j LOG_DENYHOST
done
 
#いろいろな許可設定(全体)
# ftp-data
$ipt -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
# FTP
$ipt -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
# SMTP
$ipt -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# DNS
$ipt -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
$ipt -A INPUT -p udp -m udp --dport 53 -j ACCEPT
# HTTP
$ipt -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# POP
$ipt -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# IMAP
$ipt -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# SSL
$ipt -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# SMTPS
$ipt -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# SMTP submission
$ipt -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
# IMAPS
$ipt -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
# POP3S
$ipt -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
# GIT
$ipt -A INPUT -p tcp -m tcp --dport 9418 -j ACCEPT
 
$ipt -A INPUT -j LOG --log-level debug --log-prefix "[IPTABLES INPUT] : " --log-tcp-options --log-ip-options
 
#基本的に全部シャットダウン
$ipt -P INPUT DROP
 
#Fedora16移行
/usr/libexec/iptables.init save
/bin/systemctl restart iptables.service
#Fedora15まで
/etc/init.d/iptables save
/etc/init.d/iptables restart

/etc/iptables/ip.txtを作成するシェルスクリプトの作成です。
上記で案内したURLのtxtファイルはApache用なので、iptablesで認識できるように修正します

#!/bin/bash
 
#拒否したい国をリストする
list="CN KR TW"
 
cd /etc/iptables/tmp/
rm -f *.txt<br>rm -f *.txt.1
 
for i in $list; do
wget http://akionweb.com/myobjects/adl/apache/$i.txt
done
 
cat /etc/iptables/tmp/*.txt | grep -v '#' | grep -v '^$' |sed 's/deny from //g' &gt; /tmp/ip.txt
 
cp /tmp/ip.txt /etc/iptalbes/ip.txt

これでとりあえずのセキュリティは保たれるとおもいます。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.