firewalldの新しいバージョンで、サービスのポート変更ができるようになって便利に

CentOS7で使われているfirewalld、これまでSSH等のポートを変更するには、xmlファイルをコピーして編集する必要がありました。
が、アップデートによりほとんど全部コマンドで済むようになりました。
確認したのはバージョン0.4.3.2です。

firewall-cmd –permanent –service=ssh –add-port=変更・追加したいポート/tcp
firewall-cmd –permanent –service=ssh –remove-port=22/tcp

これだけ。とても簡単になってよいです。–service=オプションができるようになったのが大きいですね。

ゾーンも以下のように作れるようになりましたし、IP制限も楽になったし。

firewall-cmd –permanent –new-zone=新ゾーン名
firewall-cmd –permanent –set-target=ACCEPT –zone=新ゾーン名 (ゾーンに追加するソースについて許可する)
firewall-cmd –permanent –add-source=IPアドレス –zone=新ゾーン名
firewall-cmd –permanent –add-service=許可するサービス –zone=新ゾーン名

簡単に管理できるようになったかな、という感じです。

広告

httpoxyの対応でhttpdをアップデートしたらhtaccessが効かなくなったとき

世間を騒がせているhttpoxyですが、その対応のためCentOS7でもパッチが降っていました。

https://lists.centos.org/pipermail/centos-announce/2016-July/021979.html
httpd-2.4.6-40.el7.centos.4.x86_64.rpm

さっそく適用したところ、サイトにアクセスできなくなりました。

エラーログを見ると

「/………/.htaccess: No comments are allowed here」

だそうです。

いやいや他のディレクトリはアクセスできるのになあ、と思って調べた結果、IPでアクセス制限をしているサイトだけがダメな模様。

で、原因ですが、

allow from 192.168.0.1 #ローカル

ここでした。

「#ローカル」ってコメントアウトしてメモしてる、ここ。

allow from 192.168.0.1

これだとエラー出ないですからね。

まあ変な書き方してた自分がいけないんですけど、なんでいまさらこんなところに変更が入ったのかなあ、コメントアウトを無視しないのはバグじゃないかな……と思いました。

owncloud8.2.3で、フォルダをダウンロードしたときの文字化けと、ユーザ名の検索を修正する

owncloud8.2.3になってました。もう9.0とかもでているみたいですが。

さてフォルダをダウンロードしたときzipファイルを開くとファイル名が文字化けしている件は、下記で直ります。
まあWindows8以降なら問題ないそうですけど、7だといまだにダメなので。

owncloud/3rdparty/mcnetic/zipstreamer/src/ZipStreamer.php

private static function normalizeFilePath($filePath) {
return trim(str_replace('\\', '/', $filePath), '/');
}

private static function normalizeFilePath($filePath) {
return mb_convert_encoding(trim(str_replace('\\', '/', $filePath), '/'),"SJIS","UTF-8");
}

共有先のユーザの検索は、おせっかいなことに前後方一致検索になっているので、前方一致に直すなら下記の部分で「’%’ . $search . ‘%’」になっている部分を「$search . ‘%’」にしてください。まあ、投げているクエリからして20000ユーザ表示するみたいなので、直さなくてもいいかもですが……。

owncloud/lib/private/user/database.php

public function getDisplayNames($search = '', $limit = null, $offset = null) {
$parameters = [];
$searchLike = '';
if ($search !== '') {
$parameters[] = '%' . $search . '%';
$parameters[] = '%' . $search . '%';
$searchLike = ' WHERE LOWER(`displayname`) LIKE LOWER(?) OR '
. 'LOWER(`uid`) LIKE LOWER(?)';
}

public function getUsers($search = '', $limit = null, $offset = null) {
$parameters = [];
$searchLike = '';
if ($search !== '') {
$parameters[] = '%' . $search . '%';
$searchLike = ' WHERE LOWER(`uid`) LIKE LOWER(?)';

vi owncloud/lib/private/groups/database.php

public function getGroups($search = '', $limit = null, $offset = null) {
$parameters = [];
$searchLike = '';
if ($search !== '') {
$parameters[] = '%' . $search . '%';
$searchLike = ' WHERE LOWER(`gid`) LIKE LOWER(?)';
}

Redmine3.2.0を使ってPostfixでメールを送信できないとき

昨年末にRedmine3.2.0がきてましたね。ようやく入れました。

入れたらメール通知の送信ができませんでした。
「454 4.7.1」のリレーエラーだそうです。

3.1・・・かまあ3.0までと同じ設定をしたのになあ、と思ってpostfixの設定を見直しても、特にmynetworksにおかしなこと書いてない。
ローカルの勝手メールサーバだけど、現にsendmailコマンドからは普通に送ることができる。

やっぱりRedmineが何かおかしいんじゃ……と思ってメールログを見ていたところ、Redmineから送ったときだけ下記のログ。

postfix/smtpd[3858]: connect from localhost[::1]

localhost[::1] ←これだ。

何でかしらないけどIPv6を使ってたので、mynetworksの設定に [::1]/128 を追記してpostfixを再起動したら、直りました。
まあアップデートで入れたわけじゃないので、Redmine3.2.0からこうなのか、それとも他の部分が駄目だったのか(でもRubyではないよなあRubyは同じバージョンで入れたし)わかんないですが、そんなこともあったよ、というハマり情報です。

CentOS7でSCM-Mannagerを導入する。

SCM-ManagerはGitやSubversionをWebのGUIで管理できるようになるツールです。

今回はSVNを使うため、CentOS7に導入します。


//あらかじめ必要になるパッケージをインストール。
# yum install java wget unzip

//適当なフォルダにscm-managerをダウンロード、解凍。
# wget https://maven.scm-manager.org/nexus/content/repositories/releases/sonia/scm/scm-server/1.43/scm-server-1.43-app.zip
# unzip scm-server-1.43-app.zip

//デフォルトのポートが8080とHTTPSでは8181なので、HTTPSのサービスをコピーして8181ポートに変更。
# cp /usr/lib/firewalld/services/https.xml /etc/firewalld/services/scm.xml
# vi /etc/firewalld/services/scm.xml

//firewallを開ける。
# firewall-cmd --permanent --add-service=scm
# firewall-cmd --reload

//デフォルトではコマンドを実行したユーザのhomeディレクトリにリポジトリが作られてしまうので、実行用のユーザ作成。
# useradd -s /sbin/nologin scm

//起動用スクリプトのUSER部分に作成したユーザを記入。
# vi scm-server/bin/scm-server
USER="scm"

//HTTPSにするためキーを作成する。
# cd scm-server/conf
# keytool -genkey -alias scm -keyalg RSA -keystore keystore.jks

//139行目あたりのSSL-Connecterについて、<Call name="addConnector">にかかっているコメントアウトを削除して、キーストアのパスワードを入れる。
# vi scm-server/conf/server-config.xml
<Set name="password">ここにキーストア作成時のパスワード</Set>
<Set name="keyPassword">ここにキーストア作成時のパスワード</Set>
<Set name="trustPassword">ここにキーストア作成時のパスワード</Set>

//これでSSL接続での起動ができるようになるけど、自動起動したいのでsystemdに対応させる。試行錯誤した結果なのでたぶんもっとスマートな設定があるはず・・・
# vi /etc/systemd/system/scm.service
[Unit]
Description=scm
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/(解凍先ディレクトリ)/scm-server/var/scm-server.pid
ExecStart=/(解凍先ディレクトリ)/scm-server/bin/scm-server start
ExecStop=/(解凍先ディレクトリ)/scm-server/bin/scm-server stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

//自動起動に設定。
# systemctl enable scm.service

//起動。
# systemctl start scm.service

これで https://IPアドレス:8181 にアクセスすれば、SCM-Managerの管理画面になります。
(デフォルトの管理者パスいれてください)
SVNは改めてインストールしなくてよいです。

あとはまあGUIそこまで難しくないので・・・
グループに対する権限設定は、グループからじゃなくてリポジトリの設定から入って「Is Group」にチェック入れてグループ名を入力、ぐらいでしょうか、詰まったのは。

あとTortoiseSVNを使用してコミットするとき、HTTPSだとすごく重い、というところで詰まったのですが、これはTortoiseSVNをインストール後に再起動していなかったせいでした。

サーバ管理者がずっとSVNの管理もしているのは効率よくないので、SCM-Managerでどんどん開発者へ権限渡していきたいですね。

firewalldでIP制限をする

CentOS7からデフォルトで使用されているfirewalld。
ようやくニブい自分にも概要が分かったのでメモ。

結論から言うとIP制限をする場合はZoneファイルをいじる必要がありました。
外から来たアクセスは「どのZoneに一致するか」から分岐が始まるようでしたので。


//たくさんゾーニングしたい場合は、ゾーンファイルをたくさん作る必要があります(IPごとに通すポートをそれぞれ変えたい時とか)
//ということでpublicのZoneファイルをコピーします。
# cp /usr/lib/firewalld/zones/public.xml /etc/firewalld/zones/custom.xml

//不必要なサービスは削除、Shortタグ内の名前は替えておいたほうがいいかも。
# vi /etc/firewalld/zones/custom.xml

//リロードしないと置いたゾーンファイルはコマンドで扱えません。
# firewall-cmd --reload

//とりあえず今回は特定のIPにだけhttpを見せる設定で。
# firewall-cmd --permanent --add-source=192.168.0.0/24 --zone=custom
# firewall-cmd --permanent --add-service=http --zone=custom
# firewall-cmd --reload

同じくhttpだけ見せたいときはadd-sourceでどんどんIPを追加していく。
別のIPではhttpに加えてhttpsも見せたい、とかいう場合は、ゾーンファイルをもうひとつ作る必要あり。
同じIPを別々のゾーンに適用することはできないので注意する。

firewall-cmd –list-all-zones してもactiveとか表示されないので、これでいいのか不安でしたがこれでよかったようです。

iptablesと比べて管理しやすくなったような、分かりづらくなったような。

CentOS7のfirewalldで使用するポートを変更

iptablesとはいろいろ違うfirewalld。

登録されているサービスの一覧
# firewall-cmd –get-service

で出てくるサービスは以下のフォルダ内のxmlファイルです。
/usr/lib/firewalld/services

中身に使用するポートが書いてあるので、たとえばhttp.xmlのportを80から8080に切り替えて

# firewall-cmd –permanent –add-service=http
# firewall-cmd –reload