こんばんわVPS初めて契約したけど別にFreeBSDは初めてじゃないです。
とりあえずzfsでjail環境作って1IPで動かすところまでやろうと思いたち、手を付けた次第。
まずはネットワークの設定から。
jail作成と同時に進めていたけど、natdのCPU使用率が上がったり、それが収まったらjailから外にアクセスできなくなったりと試行錯誤の上、ipfwのみでやることに。
なのでnatdの設定は結構雑です
natdの設定
/etc/rc.confに
log no
verbose no
deny_incoming no
log_denied yes
log_facility security
use_sockets yes
same_ports yes
unregistered_only yes
を書いて再起動。
ps -ax | grep natd
でnatdが起動していることを確認。
このままフルオープンだと誰が入ってくるかわからなくて安心して寝られませんね。
ipfw(パケットフィルタ)します。
ipfwの設定
/usr/local/etc/rc.d/を作成して、その中にipfw.shを作成。
ipfw.shの中身
#!/bin/sh
# IPFW
/sbin/ipfw -q -f flush
# my IP address
myip="me"
# Allow Network & Host
localnetwork="192.168.0.0/16"
homeip="#接続を許可するIP"
# define
fwcmd="/sbin/ipfw -q"
fwpass="/sbin/ipfw -q add allow tcp from"
fwdeny="/sbin/ipfw -q add deny tcp from"
fwpassudp="/sbin/ipfw -q add allow udp from"
fwdenyudp="/sbin/ipfw -q add deny udp from"
############################## roures ##############################
# NATD
natd_interface="vtnet0"#ここはifconfigの結果により適宜変更
private_interface="vtnet0"#ここはifconfigの結果により適宜変更
natd_address="133.130.54.129"# ここはifconfigの結果により適宜変更
${fwcmd} add divert natd ip4 from any to ${natd_address}
${fwcmd} add divert natd ip4 from ${localnetwork} to any via ${natd_interface}
${fwcmd} add pass ip from ${localnetwork} to any via ${private_interface}
${fwcmd} add pass ip from any to ${localnetwork} via ${private_interface}
# Allow setup of localnetwork
${fwcmd} add pass all from ${localnetwork} to ${myip}
${fwcmd} add pass all from ${homeip} to ${myip}# ここで接続許可してる
# Allow setup of incoming email
${fwpass} any to ${myip} 25 setup
${fwpass} any to ${myip} 587 setup
# Allow access to our IMAP
${fwpass} any to ${myip} 143 setup
${fwpass} any to ${myip} 993 setup
# Allow access to our WWW
${fwpass} any to ${myip} 80 setup
${fwpass} any to ${myip} 443 setup
#my outband HTTP
${fwpass} ${myip} to any 80 keep-state
# my outband FTP
${fwpass} ${myip} 1024-65535 to any 21 keep-state
${fwpass} any 20 to ${myip} 1024-65535 keep-state
${fwpass} ${myip} 1024-65535 to any 1024-65535 keep-state
# Allow DNS queries out in the world
${fwcmd} add pass udp from ${myip} to any 53 keep-state
# Allow NTP queries out in the world
${fwcmd} add pass udp from ${myip} to any 123 keep-state
# RFC2979
${fwcmd} add pass icmp from any to ${myip} icmptypes 0,3,8,11
${fwcmd} add pass icmp from ${myip} to any
# Reset IDENT
${fwcmd} add reset tcp from any to ${myip} 113 setup
# Allow outband access From me to the world
${fwpass} ${myip} to any setup
# Allow TCP through if setup succeeded
${fwpass} any to any established
# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag
# Stop RFC1918 nets on the outside interface
${fwcmd} add deny log all from 10.0.0.0/8 to any
${fwcmd} add deny log all from 0.0.0.0/8 to any
${fwcmd} add deny log all from 169.254.0.0/16 to any
${fwcmd} add deny log all from 192.0.2.0/24 to any
${fwcmd} add deny log all from 224.0.0.0/4 to any
${fwcmd} add deny log all from 240.0.0.0/4 to any
# LoopBack Roules
${fwcmd} add pass all from any to any via lo0
${fwcmd} add deny log all from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
# Reject&Log all setup of incoming connections
${fwcmd} add deny log tcp from any to any setup
# Everything else is denied
${fwcmd} add deny log all from any to any
#end ipfw settings
viとかで保存して、/usr/local/etc/rc.d/ipfw.shを実行してipfw listして確認。
これで変なIPからの接続は遮断しつつ、必要なサービスで使われている標準ポートが空くように。
ポート変えたい人は勝手にしやがれ