Last Update 2012-10-27
さくらのVPSで、個人的なgitサーバーを立てています。Jenkinsも動かせれば プログラム開発が楽になると思い、外部非公開になるようにJenkinsを設定しました。 これはそのときのメモです。
基本的には、Apacheでベーシック認証を使用し、認証をパスしたアクセスのみを、 プロキシ経由でJenkinsに接続するようにします。 外部マシンからJenkinsへの直接アクセスは、iptablesで制限するようにします。
Apacheを経由するようにするため、Jenkinsの設定を変更して、Jenkinsへのアクセスは プレフィックス付きになるようにします。
Redhat/CentOSでrpmからインストールしている場合、Jenkinsの設定ファイルは以下にあります。
/etc/sysconfig/jenkinsこのファイルの最後に JENKINS_ARGS とい項目があるので、 そこを以下のように修正して、 /jenkins でアクセスできるようにします。
JENKINS_ARGS="--prefix=/jenkins"
設定ファイルの修正後、jenkinsを再起動します。
# /etc/rc.d/init.d/jenkins restart Restarting jenkins (via systemctl): [ OK ]
再起動後、http://サーバーIP:8080/jenkins でアクセスできることを確認します。
Apacheのベーシック認証をパスしたものだけ、ポート8080に飛ばし、Jenkinsにアクセスできるようにします。
<Location "/jenkins"> ProxyPass http://localhost:8080/jenkins ProxyPassReverse http://localhost:8080/jenkins </Location>
今回はベーシック認証を設定するので、上記にベーシック認証部分を追加して以下のようにします。
<Location "/jenkins"> ProxyPass http://localhost:8080/jenkins ProxyPassReverse http://localhost:8080/jenkins AuthUserFile /var/www/config/.htpasswd AuthName "Input ID and Password" AuthType Basic require valid-user </Location>今回のベーシック認証のユーザー、パスワード情報は、/var/www/config/.htpasswd になります。
Apacheを再起動した後に、http://サーバーIP/jenkins にアクセスしてベーシック認証後にJenkinsに接続できることを確認します。
つぎに、ローカル以外がポート8080に直接接続できないように、iptablesで制限をします。 iptablesに何も設定していない場合は、ローカルからのアクセスは全て許可で、 外部からポート8080へのTCP接続は、全てDROPにします。
現在のiptablesの設定を確認します。
iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- localhost anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destinationこれは何も設定していないので、以下を実行して自分自身しかポート8080(Jenkins)にアクセスできないようにします。 こうすると外部からポート8080へはアクセスできなくなり、Apacheのプロキシ経由でしかJenkinsにアクセス できなくなります。
# iptables -I INPUT -s 127.0.0.1 -j ACCEPT # iptables -I INPUT -p tcp --dport 8080 -j DROP設定後、外部からポート8080への直接アクセスができないことと、Apache経由でベーシック認証が働いている ことを確認します。
参考 ポート8080への制限後
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- anywhere anywhere tcp dpt:webcache ACCEPT all -- localhost anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
OSが再起動した場合に設定が有効になるように、設定を保存します。
# iptables-save -c > /etc/sysconfig/iptables保存した設定ファイルを確認します。
# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Tue Aug 21 01:27:32 2012 *filter :INPUT ACCEPT [10:655] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [3:96] [0:0] -A INPUT -p tcp -m tcp --dport 8080 -j DROP [0:0] -A INPUT -s 127.0.0.1/32 -j ACCEPT COMMIT # Completed on Tue Aug 21 01:27:32 2012
また、OSが再起動したときに、iptablesが自動で起動するように設定されているのを 確認します。
# chkconfig --list iptables iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:offもし、起動が設定されていない場合、
# chkconfig --list iptables iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off以下でOS起動時に自動起動するように設定を変更します。
# chkconfig iptables on
参考
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT