mongrelのポートをふさぐ
そういえば、レンタルサーバーでファイアーウォールなんて意識したことなかったなー。と思いたち、iptablesのお勉強。
旧サーバのときに立ってたポートはWeb/POP/MySQLくらいだったが、新サーバではmongrel_clusterにしたせいで、(他もろもろ)急にポートが増えました。いぢわるな人から、
http://takeda-soft.jp:3000/
なんていうアクセスをされないように、塞ぎたい。
ファイアーウォールは、全部塞いで必要なところだけ開けるのが鉄則と思いますが、やってみたら wget や passive ftp や yum が通らないという寂しい結果になってしまいました。
セキュリティ専門家による記事は、私みたいな初心者にはつらい。
パーソナルファイアーウォール程度に使いたいのに、プロキシの説明をされても、付いていけなかったりする。(その程度を理解できないやつは、自前でサーバなんて持つな!・・と言われても仕方がない。)
でも、いくら分かりづらいからといって、iptables自体を落としてしまうようでは、元も子もない。最悪だ。
・・というわけで、とりあえずは、
不要なサービス止める → 全部開ける → 個別にポートを塞ぐ という方針にします。
me='xxx.xxx.xxx.xxx'
office='123.123.123.123'
any='0.0.0.0/0'
iptables -F
iptables -X
# とりあえず開けて
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# mongrelのポートを塞ぐ
for port in 3000 3001 3002
do
iptables -A INPUT -p tcp -s $any -d $me --dport $port -j DROP
iptables -A OUTPUT -p tcp -s $me --sport $port -d $any -j DROP
done
# SSHとFTPを事務所にだけ許可
for port in 20 21 22
do
iptables -A INPUT -p tcp -s $office -d $me --dport $port -j ACCEPT
iptables -A OUTPUT -p tcp -s $me --sport $port -d $office -j ACCEPT
iptables -A INPUT -p tcp -s $any -d $me --dport $port -j DROP
iptables -A OUTPUT -p tcp -s $me --sport $port -d $any -j DROP
done
こんな感じで凌いでおいて、じっくり勉強しながら改善していけばいいのではなかろうか。
ちなみに全部塞いで、必要な穴だけ開ける流れは、
me='xxx.xxx.xxx.xxx'
office='123.123.123.123'
any='0.0.0.0/0'
iptables -F
iptables -X
# とりあえず塞いで
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# loopbackは開けて
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 一般公開
for port in 80
do
iptables -A INPUT -p tcp -s $any -d $me --dport $port -j ACCEPT
iptables -A OUTPUT -p tcp -s $me --sport $port -d $any -j ACCEPT
done
# 事務所だけに許可
for port in 20 21 22
do
iptables -A INPUT -p tcp -s $office -d $me --dport $port -j ACCEPT
iptables -A OUTPUT -p tcp -s $me --sport $port -d $office -j ACCEPT
done
こちらのアプローチの方が安全だけど、初心者にとっては、とりわけサーバが使いづらくなる。
どっちにしろ、勉強せねばならんっ。
最小限の理解で最大の効果を得る設定、詳しい人、教えてください。
1台ならlocal loopbackアドレスにバインドすればよくね?
#port 3000のアクセス回避が目的なら
> mongrel_rails start -e production -a 127.0.0.1 -d
をmongrel_clusterで採用する場合は、mongrel_cluster.ymlに、addressを追記する。
log_file: log/mongrel.log
address: 127.0.0.1
port: "3000"
environment: production
pid_file: tmp/pids/mongrel.pid
servers: 3

