カテゴリー
FreeBSD Software

FreeBSD (PARANOID: hosts.allow)

今日になって自サーバーからメールを受信することができなくなりました。

ログ(/var/log/messages)を見てみると、

Sep 19 14:35:32 ns inetd[9493]: warning: /etc/hosts.allow, line 38: can't verify
hostname: getaddrinfo(aaa-bbb-ccc-ddd-nsw-static.tpgi.com.au, AF_INET) failed
Sep 19 14:35:52 ns inetd[9493]: refused connection from aaa.bbb.ccc.ddd, service i
pop3d (tcp)

とpopが拒否されてます。

/etc/hosts.allowのline38は”PARANOID”です。

# Protect against simple DNS spoofing attacks by checking that the
# forward and reverse records for the remote host match. If a mismatch
# occurs, access is denied, and any positive ident response within
# 20 seconds is logged. No protection is afforded against DNS poisoning,
# IP spoofing or more complicated attacks. Hosts with no reverse DNS
# pass this rule.
ALL : PARANOID : RFC931 20 : deny

どうやら、自宅のADSLのIPアドレスが逆引きできなくなっているのが原因のようです。

“ALL : PARANOID : RFC931 20 : deny”の設定をコメントアウトしてとりあえず解決。

カテゴリー
FreeBSD MySQL Software

MySQLに外部から延々とアクセス

Sep  1 18:58:30 ns mysqld[3641]: twist 220.162.59.165 to /bin/echo "You are not welcome to use mysqld from 220.162.59.165."

先月末にmysql-server-5.1.20から5.1.21に上げてからだと思うんですが、こんなログがauth.logに残るようになりま した。 そして、この中国方面からのアクセスが来るとブログが止まります。このエラーメッセージってどこが出しているのかな~っと思って調べてみると、 /etc/hosts.allowにありました。

# The rest of the daemons are protected.
ALL : ALL
: severity auth.info
: twist /bin/echo "You are not welcome to use %d from %h."

inetd.confにmysqldは設定していないけどsshd同様にhosts.allowを参照しているみたいです。 つーことは、ここでアクセス制限をすればいいってことだと気付き早速以下の設定をhosts.allowに追記。

mysqld : localhost : allow
mysqld : ALL : deny

これで中国方面からのアクセスは来なくなりました。でも、何故このアクセスでmysqldが変になったのかは不明。誰か知っている人いたら教えて下さい。

カテゴリー
FreeBSD Software

FreeBSD (sshd & hosts.allow)

サーバーをインタネットに公開するとsshの扉を叩く人がかなりいます。それも手持ちの鍵(idとパスワード)を順番に片っ端から試していく奴が結構沢山。

そこで、Maxloginsを使ってみる。このツールはsyslogでsshアクセス失敗回数を監視し、一定の基準を超えたアクセス禁止のIPアドレスリストを吐き出す。そのリストをhosts.allowに取り込んでsshのアクセスを禁止する仕組み。
ツールの実体はここにある。 テキストファイルだけど、”maxlogins.pl”とかの名前で/usr/local/bin に保存すし、次のようにしてsyslogから実行できるようにしておく。

# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl

/etc/syslog.conf に以下を挿入する。

auth.info;authpriv.info /var/log/auth.log # ←この行の次に
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl # ←この行を追加

このmaxlogins.pl にはオプションを追加指定できる。

-e: アクセス禁止の解除時間の指定。デフォルトは12時間。

-e=1d, -e=24h, -e=1440m, -e=86400s という感じで指定する。この場合いづれも1日の意味。

-a: IPアドレスがブロックされるまでの最大試行回数。 デフォルトは3回。

-a=5 という風に指定する。

-l: ログレベルの指定。 ログはデフォルトで /var/log/auth.logに記録される。

-l=1: informational (e.g., new blocks)
-l=2: above, plus IP expirations
-l=9: verbose logging

/etc/hosts.allow をいじって「アクセス禁止のIPアドレスリスト」を読み込むようにする。

#ALL : ALL : allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny
sshd : ALL : allow

ちなみに、これをやったらpopとかimapとかの設定も忘れずに。

ftpd : localhost : allow
ftpd : ALL : allow
ipop3d : ALL : allow
imapd : localhost : allow
imapd : ALL : deny

最後に、 syslog を再起動。

# kill -HUP (syslogのpid)

ブロックされたIPアドレスは /var/log/maxlogins に記録される。

参考リンク: 1