- キット各種完売。
- msBerryDAC改造情報
2018/06/30(土)Certbotによるワイルドカード証明書と自動更新の設定
どこよりも簡単なワイルドカード証明書設定メモ。
2018年からLet's Encryptがワイルドカード証明書に対応しました。
これを利用するためにはdns-01という、DNSのTXTレコードを使った認証が必要で、このDNS認証手順を自動化する必要があります。
DNSレジストラサービスを使用している場合を想定して、dns-01認証の方法をまとめました。
構成
- Debian Stretch
- Apache
- BIND
- 設定対象DNS : example.jp
DNSは外部サービスを使用しているものとします。外部サービスでも、CloudfireやAWS、Google Cloud DNSといった有名サービスを使っている場合、DNSサーバは不要です。検索すれば、それらの設定方法が出てきます。
2017/10/30(月)LAN内に外部公開サーバを置いて、内部からアクセスさせる
ルーティングテーブル書き換え(route)によるアクセス制御から、unboundによるDNSの一部書き換えに移行したメモ。
状況
LAN内のLinuxマシンを、家庭用ルータのポートマッピングを使って外部公開している状況を想定しています。小規模の会社とかでも、こういう設定をされていることがありますね。
この場合、内側のPCから外部公開時のホスト名である「global.my.ip」にアクセスするとグローバルIPを引いてしまいます。そして、PCからルーターの外側IPにアクセスすることになるのですが、NEC等のルータではこの際ポートマッピングが有効にならずアクセス不能となります。*1
ルータのルーティングテーブルを書き換えることができれば色々と解決策はあるのですが、そんな機能を持った機種はまずありません……。*2
力技で解決していた
どうにもならないので、PCを起動するたびに、外部IPを確認して、外部IPにアクセスするときはLinuxサーバ(192.168.1.8)にルーティングするような設定をしていました。
@echo off ' route-add.bat for /f "usebackq tokens=2 skip=1" %%i in (`nslookup global.my.ip 192.168.1.1 ^| findstr "[0-9]\.[0-9]"`) do set IP=%%i route add %IP% 192.168.1.8
これで、PCから外部IP向けのパケットがLinuxサーバに向かうので、Linuxサーバ側でNAT処理をします。
MY_LOCAL="192.168.1.2" MY_GLOBAL=`dig +short global.my.ip` #--------------------------------------------------------------------------- # Special forward for myself #--------------------------------------------------------------------------- iptables -t nat -A OUTPUT -d $MY_GLOBAL -s $MY_LOCAL \ -j DNAT --to-destination $MY_LOCAL #--------------------------------------------------------------------------- # Special forward for local network #--------------------------------------------------------------------------- iptables -t nat -A PREROUTING -d $MY_GLOBAL -s $MY_LOCAL/24 \ -j DNAT --to-destination $MY_LOCAL
これで無事アクセスはできるのですが、スマホ等からのアクセスは断絶されたままでした。
unboundによるDNSの書き換え
unboundというDNSキャッシュサーバには、特定のホスト名やドメインだけ、DNSの結果を書き換える機能が付いています。
本当は外部IPでのアクセスがすべてLinuxサーバに転送されるのが理想なのですが、そうも言ってらもないので、この方法で解決を試みました。以下、Debianサーバでの設定例です。
sudo su apt-get install unbound
/etc/unbound/unbound.conf を編集して以下を追加します。
server: interface: 0.0.0.0 access-control: 127.0.0.1 allow access-control: 192.168.0.0/16 allow
続いて /etc/unbound/unbound.conf.d/global.my.ip.conf というファイルを新規作成します。
local-data: "global.my.ip A 192.168.1.8"
作成したら unbound にリロードさせます。
service unbound reload
確認
$ dig @localhost global.my.ip ;; ANSWER SECTION: global.my.ip. 3600 IN A 192.168.1.8
ルータの設定書き換え
ルータのDHCPの設定を書き換えて、DNSのプライマリサーバに 192.168.1.8 を指定します。セカンダリは 192.168.1.1 を指定しておくと良いでしょう。
まとめ
NECのルータは性能は悪くないけど、細かい設定ができないのでちょっと面倒ですね。
UPnPタイムアウトを設定できないし(高級機のみ可)。Buffaloのほうがいいのかもしれない。ポート転送が内側に対しても効いた気がするし。
その後
IPv6化して解決したため、unboundを削除しました。
2015/08/11(火)SSL証明書の生成
2015/04/07(火)Linux の iptables で IPポート 転送の設定
メモ代わり。
HOST="192.168.0.1" PORT="80" sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport "100$PORT" -j DNAT --to $HOST:$PORT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -p tcp --dport $PORT -d $HOST -j ACCEPT iptables -A FORWARD -p tcp --sport $PORT -s $HOST -j ACCEPT
2015/01/30(金)Debian - jessie インストールメモ
記述が散らばってきたのと、さすがに古くなった部分があるのでまとめメモ。
キーボード環境の設定
apt-get install console-setup dpkg-reconfigure locales
コンソールとGRUB画面の設定
高解像度すぎて使いにくいのでほどほどに。
# vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="video=800x600-16" GRUB_GFXMODE=800x600 GRUB_GFXPAYLOAD_LINUX=keep # update-grub
ついでに「mitigations=off」してMeltdown対策などをオフにすると、古いIntel CPUでは(セキュリティを犠牲にして)パフォーマンスが向上するらしい。
# vi /etc/default/grub GRUB_CMDLINE_LINUX="video=800x600-16 mitigations=off"
fbterm
# apt-get install fbterm unifont # usermod -aG video <user id> # vi ~/.fbtermrc font-names=unifont font-size=16
このままだとアンチエイリアスが掛からないので設定する。(設定済の場合は不要)
# vi ~/.font.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> </match> </fontconfig>
固定IP
# vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.20 netmask 255.255.255.0 gateway 192.168.1.1 # mtu 9000
rpcbindとeximを止める
# apt-get remove --purge rpcbind nfs-common # apt-get remove --purge exim4 exim4-base exim4-config exim4-daemon-light
rootとwheel
# vi /etc/pam.d/su auth required pam_wheel.so group=adm # gpasswd -a USER adm
firewallの導入
# touch /etc/network/if-pre-up.d/iptables # ln -s /etc/network/if-pre-up.d/iptables /etc/ # chmod +x /etc/network/if-pre-up.d/iptables # vi /etc/iptables
設定詳細はこちらの記事。
hosts.allow/deny
ALL : my_hostname ALL : localhost sshd : .jp
sshdのパスワード認証とrootログインを禁止
# vi /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin no # /etc/rc.d/ssh restart
鍵認証設定後に。
localeの変更
# dpkg-reconfigure locales
tmpfsの設定変更
デフォルトだと実メモリの半分以上をtmpfsに割り当てられてしまいます。実使用分しかメモリを消費しないとはいえ気持ち悪いです。
/etc/default/tmpfsを書き換えればいろいろ設定できるはずと思ったら、Debian jessieは「sysvinit」ではなくなってるらしく/etc/default/tmpfsに設定しても意味がない。
/etc/systemd 以下に書くのが正解なようですが、どう書けばいいかの情報がないのでしばらく保留……。
ntp設定
server ntp.example.jp iburst # IPv6 server -6 ntp.example.jp iburst
状態確認
ntpq -p
PostgreSQLのリポジトリ追加
PostgreSQLの最新版が使えなかったり、アップグレードごとにメジャーバージョンが入れ替わって(古いバージョンのメンテが終わって)毎度DB移行が面倒なので。
# vi /etc/apt/sources.list deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main # apt-get install gnupg # wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
PostgreSQLの設定
いつも /var/lib/postgresql ではなく /home/postgres にDBファイルを置くのだけども、ファイル移動したりシンボリックリンクしたりスマートじゃない方法で解決してました。
postgresql-commonだけ先に入れて、データディレクトリを変更。
# apt-get install postgresql-common # vi /etc/postgresql-common/createcluster.conf data_directory = '/home/postgres/%v/%c'
その後、任意のpostgresqlを導入。
後から変更
デフォルトDBの削除。
# pg_dropcluster --stop 9.4 main # rm -rf /var/lib/postgresql
データディレクトリを変更してDB作成。
# vi /etc/postgresql-common/createcluster.conf
data_directory = '/home/postgres/%v/%c'
# pg_createcluster 9.4 main --options
pg_cluster系コマンドで複数のDBの起動などもできるらしい。
autovacuumの設定
デフォルトではオートvacuumが3worker×1分ごとに動作しようとし(必ず動作するわけではない)、そのたびにHDDにfsyncしてしまいます。ほとんど使用しないDBには無駄なディスク負荷なので、postgresql.conf の設定を変更しました。
autovacuum_max_workers = 1 autovacuum_naptime = 1d
GNU parted
# parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) unit gb (parted) print free (parted) mkpart primary ext4 0 100% (parted) print
コンソール日本語入力
# apt-get install uim-fep uim-anthy # vi /usr/share/uim/generic-key-custom.scm (define-custom 'generic-on-key '("zenkaku-hankaku" "<Control> ") (define-custom 'generic-off-key '("zenkaku-hankaku" "<Control> ")
あとは「uim-fep」コマンドで起動。「CTRL+SPACE」でon/off。
その他
- postfixとdovecotの導入
- 細かなセキュリティ設定
- mailコマンド : apt-get install bsd-mailx
- SpeedyCGIのインストール(外部)
雑多メモ
特定のポートを使用中のプロセスを調べる。
# lsof -i:111 # netstat -ap
特定のファイルを含むパッケージを調べる。
$ dpkg -S [filename]
UUIDの確認。
# blkid /dev/sda1 # ls -l /dev/disk/by-uuid/
ia32-libsの代替。
# apt-get install lib32z1
開発環境一式。
# apt-get install build-essential
sshログイン時のメッセージ表示はpam.d/sshdで制御できる。
session optional pam_motd.so motd=/run/motd.dynamic noupdate session optional pam_motd.so
バージョンの確認。
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.1 (jessie) Release: 8.1 Codename: jessie