Raspberry Piをサーバーにする
Raspberry Piにいくつかのサーバー機能を持たせた時の記録です。 家にVPNを張りたくて始めた作業です。
- 1. sshできるようにする
- 2. ルーターのログを記録する
- 3. DNS severにする
- 4. firewall-cmd
- 5. RasberryPiのusername変更
- 6. OpenVPN構築
- ✖️. VPN(過去の情報のログ)
1. sshできるようにする
menu
-> 設定
-> Raspberry Piの設定
-> インターフェイス
と進んで、ssh
を有効化する。
再起動すればsshできるようになっている。
superuserを作成しておく
sudo passwd root
2. ルーターのログを記録する
ラズパイのSDカードではストレージが少なすぎるので外部HDDに保存する。 後日書きます。
3. DNS severにする
3.1 必要なツールを入れる
recolvconfを入れる。
これがないと/ectc/resolv.conf
を編集しても再起動で元に戻されてしまう。
$ sudo apt-get install resolvconf
nslookup等を使えるようにする為に'dnsutils'を入れる。
$ sudo apt-get install dnsutils
dnsmasqをインストールする。
$ sudo apt-get install dnsmasq
3.2 dnsmasqの設定ファイルを書く
元の設定ファイルを変えたくないので、/etc/dnsmasq.d/local-dnsmasq.conf
を作成する。
port=53 domain-needed bogus-priv local=/local-domain.com/ no-hosts addn-hosts=/etc/local-hosts expand-hosts domain=local-domain.com
それぞれの説明について(内容はもともと設定ファイルに書いてあるものです)
- port : Listen on this specific port instead of the standard DNS port(53). Setting this to zero completely disables DNS function, leaving only DHCP and/or TFTP.
- domain-needed : Never forward plain names (without a dot or domain part)
- bogus-priv : Never forward addresses in the non-routed address spaces.
- local : Add local-only domains here, queries in these domains are answered from /etc/hosts or DHCP only.
- no-hosts : If you don't want dnsmasq to read /etc/hosts, uncomment the following line.
- addn-hosts : or if you want it to read another file, as well as /etc/hosts, use this.
- expand-hosts : Set this (and domain: see below) if you want to have a domain automatically added to simple names in a hosts-file.
- domain : Provides the domain part for "expand-hosts"
3.3 名前の登録
上でaddn-hostsに設定した/etc/local-hosts
ファイルを作ります。
この中に登録したいサーバーの名前を登録します。
192.168.0.1 server01.local-domain.com server01 192.168.0.2 server02.local-domain.com server02 192.168.0.3 dns-server.local-domain.com dns-server
/etc/network/interfaces.d
以下にinterfaces
ファイルを作る。
dns-server 127.0.0.1 8.8.8.8
を記入。
hostnameの変更を行っておく。
/etc/hosts
と/etc/hostname
の両方で変更する必要がある。
raspberrypi
からdns-server
に変更します。 reboot
すれば変わっていることが確認できます。
3.4 dnsmasqの起動
$ service dnsmasq start or $ systemctl enable dnsmasq
起動していることの確認
$ sudo netstat -anp | grep dnsmasq tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 457/dnsmasq tcp6 0 0 :::53 :::* LISTEN 457/dnsmasq udp 0 0 0.0.0.0:53 0.0.0.0:* 457/dnsmasq udp6 0 0 :::53 :::* 457/dnsmasq unix 2 [ ] DGRAM 12641 457/dnsmasq
4. firewall-cmd
firewall-cmdで接続の管理をします。 サービスごとに、defaultのポートを変更している時は注意
5. RasberryPiのusername変更
Raspbianでpiユーザ名とパスワードをうまいこと変更する - Qiita
6. OpenVPN構築
PiVPNによるOpenVPNのインストール - とある社畜の頭脳整理
6.1 firewall関連について
サブネット10.8.0.0/24にクライアントが割り振られているとします。 インターフェイスはwlan0で接続しているとします。
マスカレードの設定
$ sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -m comment --comment openvpn-nat-rule -j MASQUERADE
openvnのポートを開けます。1194/udpがデフォルトです。
$ sudo firewalld-cmd --permanent --add-service=openvpn
VPN接続先のネットワークのマシンへの接続を許可します。これしないとVPN繋いだ状態で外のネットワークに接続できなかったです。
$ sudo firewall-cmd --permanent --zone=trusted --add-interface=tun
✖️. VPN(過去の情報のログ)
内容が間違っています。後で修正します。
OpenVPNを使用します。
を参考にしました。よくまとまっていて見やすいです。
4.1 パッケージのインストール
$ sudo apt-get install openvpn openssl
$ cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa
4.2 設定ファイルの編集
/etc/openvpn/easy-rsa/vars
を編集する。
証明書作成のコマンドを実行した時の初期値となるらしい。
編集したらsource ./vars
export EASY_RSA="/etc/openvpn/easy-rsa/" export KEY_COUNTRY="JP" export KEY_PROVINCE="Tokyo" export KEY_CITY="Setagaya" export KEY_ORG="Home" export KEY_EMAIL="admin@example.com" export KEY_OU="VPNServer" export KEY_SIZE = 2048
4.3 証明書と鍵の初期化、作成
まず、初期化を行う。
# /etc/openvpn/easy-rsaで作業
$ ./clean-all
$ ./build-ca
defaultの設定のもので良いなら、Enterで進んでいく。
VPNサーバ証明書と秘密鍵の作成。yesをおして進めば良い。
$ ./build-key-server server
最後に、DHパラメータを作成する。
$ ./build-dh
(option)TLS鍵認証を作成する。
$ openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
次はクライアント用の作業。クライアント証明書、秘密鍵の作成を行う。VPNクライアントの追加の際には毎回作る必要がある。
$ ./build-key client1
4.4 OpenVPNの設定ファイルの編集
OpenVPNの設定ファイルを編集する。サンプルファイルは/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
で解凍して、/etc/openvpn/server.conf
におく。
中身は以下のようにする。
mode server tls-server dev tun dh dh2048.pem server 10.8.0.0 2555.255.255.0 ; VPNが割り当てる仮想IP push "route 192.168.1.0 255.255.255.0" ; ルーターへのルートをVPNserver(raspi)経由にする push "dhcp-option DNS 192.168.xxx.xxx" push "redirect-gateway def1 bypass-dhcp" tls-auth ta.key 0 ; TLS認証を有効化 cipher AES-256-CBC comp-lzo user nobody group nobody log-append /var/log/openvpn.log ; logの格納場所 client-to-client management localhost 7505 ; 管理インターフェイスの有効化 ; crl-verify crl.pem 証明書廃止リストの有効化。これはいらないのでは
4.5 VPNインタフェース用ファイアウォール自動設定
自動設定
/etc/openvpn/openvpn-startup
を編集する。
#!/bin/bash /etc/openvpn/openvpn-shutdown # VPN interface iptablesルール削除スクリプトの実行 iptables -l OUTPUT -o tun+ -j ACCEPT # VPN severからの送信を許可 iptables -l FORWARD -o tun+ -j ACCEPT iptables -l INPUT -i tun+ -j ACCEPT # VPN clientからVPN serverへのアクセスを許可する場合 iptables -l FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT
自動設定解除
/etc/openvpn/openvpn-shutdown
を編集。実行権限も付与しておく。chmod +x /etc/openvpn/openvpn-shutdown
#!/bin/bash # VPNインタフェース(tun+)用iptablesルール削除関数 delete() { rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r` for num in $rule_number do iptables -D $target $num done } # VPNインタフェース(tun+)用iptables受信ルール削除 target='INPUT' delete # VPNインタフェース(tun+)用iptables転送ルール削除 target='FORWARD' delete # VPNインタフェース(tun+)用iptables送信ルール削除 target='OUTPUT' delete
4.6 OpenVPNログローテーション設定
/etc/logrotate.d/openvpn
を編集。logを入れる場所に注意。
/var/log/openvpn.log { missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript }
4.7 OpenVPNの起動
起動
起動するときは
$ sudo systemctl enable openvpn
再起動は
$ sudo /etc/init.d/openvpn restart
自動起動設定
$ chkconfig openvpn on
ポート解放
iptableを使って制御します。
iptablesでファイアウォールを構築する方法!を参考にしました。
iptable install
$ apt-get install iptables iptables-persistent
アクセスルールの変更、適応
$ vi /etc/iptables/rules.v4 # content # Generated by iptables-save *filter :FORWARD DROP [0:0] :INPUT DROP [0:0] :OUTPUT ACCEPT [0:0] # loopback -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow IP -A INPUT -s 192.168.0.0/24 # Multicast DNS -A INPUT -p udp -m udp -d 224.0.0.251 --dport 5353 -j ACCEPT # Ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # SSH -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # HTTP -A INPUT -p tcp -m tcp --dport 80 # HTTPS -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT # Webmin -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT # FTP-Data -A INPUT -p tcp -m tcp --dport 20 # FTP -A INPUT -p tcp -m tcp --dport 21 # FTP-Passive -A INPUT -p tcp -m tcp --dport 49152:65534 # SMTP -A INPUT -p tcp -m tcp --dport 25 # Submission -A INPUT -p tcp -m tcp --dport 587 # IDENT -A INPUT -p tcp -m tcp --dport 113 -j REJECT # POP3 -A INPUT -p tcp -m tcp --dport 110 # IMAP -A INPUT -p tcp -m tcp --dport 143 # DNS TCP -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT # DNS UDP -A INPUT -p udp -m udp --dport 53 -j ACCEPT # VPN -A INPUT -p udp -m udp -m state --state NEW -m udp--dport 1194 -j ACCEPT # Masquerade outgoing traffic -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE -t nat -A POSTROUTING -s 10.8.0.0/24 -o tun0 -j MASQUERADE -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT # Squid -A INPUT -p tcp -m tcp --dport 3128 COMMIT
-j ACCEPT
がついて入れば許可します。
変更を適応させます。
$ service netfilter-persistent restart or $ /etc/init.d/netfilter-persistent restart
iptables-persistent
はnetfilter-persistent
に変わったらしい。
適応されているか確認
iptables -L
4.8 Client側の作業
openvpn client側の設定(ios) - 情報学関連の備忘録
iPhoneやiPad (iOS) でOpenVPNを使ってみよう! | OpenVPN.JP