綺麗に死ぬITエンジニア

アクセス制限に使われる英語の話

2015-01-08

英語って難しい。

Allow? Accept? Permit?

ITインフラ、つまりサーバーやネットワーク機器といった情報システムを稼働させるための基盤は、利用者に正しくサービスを供給するために、しばしばアクセス制限をかけます。送信元IPアドレスや宛先ポート番号を制限したり、ユーザー認証をかけてみたり…。

サーバーやネットワーク機器のアクセス制限の設定は、コマンドや設定ファイルの編集により行いますが、ネットワーク機器やサーバー(サービス)毎に設定に使う英単語が違うのでいつも苦労します。

アクセス制限は基本的には「許可」「拒否」「制限」の3種類ですが、それは日本語だけの話みたいで、英語だと主に以下の英単語を使います。

許可

  • allow
  • accept
  • permit
  • grant
  • pass
  • valid

拒否

  • deny
  • drop
  • reject
  • invalid

制限

  • restrict

今回は、英語の勉強も兼ねて、まとめてみようと思います。コマンドや設定ファイルに関する詳しい説明はここでは省いて、使われている英単語に着目していきます。

なお、下記に記載する英単語の意味は、全てWeblio辞書 英和辞典・和英辞典から引用したものになります。

Linuxサーバー

Linuxでは、以下の2つのファイルにより、アクセス制限をかけることができます。

  • /etc/hosts.allow
  • /etc/hosts.deny

/etc/hosts.allowはアクセス許可条件を設定するファイルで、/etc/hosts.denyはアクセス拒否条件を設定するファイルです。

allowとdenyが出てきましたね。それぞれの単語は下記の意味を持っているそうです。

  • allow

【動詞】

  1. 〈…を〉許す; 〈…の〉入るのを許可する《★【類語】 ⇒let》.
  2. 〔+目的語+副詞()〕〈を〉(…の方向へ)許す.
  3. 〔+目的語+to do〕〈・ものが〉〈…するのを〉許す,〈・ものに〉〈…〉させておく 《★〔let++原形のほうが一般的》.
  4. 〔+目的語+to do〕〈が〉〈…するのを〉可能にする.
  • deny

【動詞】

  1. 否定する 《★【類語】 deny は相手の言ったことなどを否定否認する; contradict公然とまたははっきりと否定するだけでなくむしろ反対のことが正しい主張する》.
  2. 〔+間接目的語+直接目的語/+目的語+to+()名詞〕〈などに〉〈要求などを〉拒む,〈などに〉〈与えるきものを〉与えない; 〔などに〕〈要求などを〉拒む,〔などに〕〈与えるきものを〉与えない.

allowが単に許す、denyが単に拒む、といった意味のようですね。これが一般的だと思います。個人的には全てこれで統一してほしかった…。

Apache HTTP Server

言わずと知れたWebサーバーソフトウェアの代表格。以下のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/httpd/conf/httpd.conf
# apache 2.2以前
Allow from all
Deny from 192.168.1.0/24

# apache 2.4系
Require all granted
Require all denied

# 共通
AllowOverride None
SetEnvIf Accept-Language "^$" non_japanese
Require valid-user

allow・denyの他にgrant(5行目)・accept(9行目)・valid(10行目)が出てきました。早速、それぞれの意味を確認してみましょう。

  • grant

【動詞】

  1. 嘆願懇願などを〉承諾するかなえてやる.
  2. 〔(+目的語)+目的語/+目的語+to+()名詞〕〈に〉〈…を〉許す; 〔に〕〈…を〉許す.
  3. 人の言うこと認める.
  4. 〈…を〉(願い聞き入れ正式に)与える 《★【類語】 ⇒give》.
  • accept

【動詞】

  1. 贈り物などを〉(進んで)受け入れる受納する 《★【類語】 ⇒receive》.
  2. 招待申し込み任命などを〉引き受ける受諾する.
  3. 説明学説などを〉認める信ずる容認する.
  4. クレジットカードなどを〉受け付ける; 【商業】〈手形小切手を〉引き受ける (⇔dishonor).
  • valid

【形容詞】

  1. 議論理由など〉根拠確実な確かな正当な妥当な.
  2. 有効な効力のある効果的な (⇔invalid).
  3. 【法律, 法学】法的に有効な正当な手続きんだ (⇔invalid).

上記の3つの単語は、全て肯定的な意味で、許可するための設定に使われます。

grantは、頼まれたことをしてあげる。acceptは、積極的に受け入れる。validは、主にユーザー認証の許可ユーザー指定に使われることから、ちゃんとした・正当な、といった意味でしょうか。

いやはや、難しいですね。違いがさっぱりわかりません。acceptは積極的に受け入れるニュアンスを含んでいるようですが、システムのインプットアウトプットに積極的もクソもねえだろ、と。ソースコードをよく読めば、本当に積極的なのかも知れませんがね…。

SSH(Secure Shell)

次は、SSH設定ファイルです。以下のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/ssh/sshd_config
AllowUsers myuser
DenyUsers myuser

これは簡単ですね。わかりやすい。最初に出てきたオーソドックスなallowとdenyです。安心します。

しかしながら、apacheの設定では、ユーザー指定でvalidを使っていましたが、これを見る限りallowでもいいんじゃ?と思ってしまいますね。英語に疎い私だからでしょうか。

こういうのは開発者の気分で決めてるんでしょうかね。

FTP(File Transfer Protocol)

FTPは、次のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/vsftpd/vsftpd.conf
userlist_deny=YES

こちらも簡単。denyのみ。値をNOに変更すると、allow的な動きをします。

Samba

Sambaは、次のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/samba/conf/smb.conf
hosts allow = 127. 192.168.
hosts deny = 192.168.2.
valid users = root, @validgroup
invalid users = @invalidgroup

単純といえば単純ですね。ホストの指定にはallowとdeny、ユーザー指定にはvalidとinvalid。invalidはvalidの対義語で、以下の意味を持ちます。

  • invalid

【形容詞】

  1. 根拠の薄い, 説得力のない;〔論理〕〈議論の結論が〉前提から生ずるものではない[とはかけ離れた];〔法律法的効力のない, 無効の(⇔ valid).
  2. コンピュータ〕〈コンピュータ指示データが〉正しい形式でない, 仕様と一致しない.

まあ、ユーザー関連はvalidとinvalidで行こうという考えなのでしょう。英語に疎い私としては、SSHのように全部allowとdenyでいいじゃんってどうしても思ってしまいますが…。

Postfix

次は、メール転送エージェント(MTA)のPostfixです。次のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/postfix/main.cf
smtpd_client_restrictions = permit_mynetworks, reject
smtpd_helo_restrictions = reject_unknown_hostname
smtpd_sender_restrictions = reject_unknown_sender_domain

はい、新単語の連発です。がっかりします。ここで登場したのは以下の単語です。

  • permit

【動詞】

  1. (同意許可を与える意味で)許す 《★【類語】 ⇒letA》.
  2. 〈…の〉機会を与える余地がある. 【自動詞】

  3. 物事が〉許す可能にする.

  4. 〔+of+()名詞〕〈物事が〉〔…の〕余裕がある.
  • reject

【動詞】

  1. 要求申し出などを〉拒絶する却下する拒否[否認]する 《★【類語】 ⇒refuse》.
  2. 志願者などを〉不合格にする; 〈求婚者の〉申し出断わる; 〈を〉のけ者にする.
  3. 不良品などを〉除く捨てる.
  4. 胃・体が〉〈食物などを〉受けつけない,戻す.
  • restrict

【動詞】

  1. 自由活動などを〉制限する.
  2. 行動などを〉〔…に〕限る限定する.

permitは肯定的な意味で、rejectは否定的な意味、restrictはその中間の制限といった意味です。

日本語の意味を見る限り、私にはpermitとallow、rejectとdenyの意味の区別がつきません。やっぱり単語のチョイスは開発者の好み?

Sendmail

次は古くからのメールサーバーソフトウェアである、Sendmail。設定が複雑なだけに、イヤな予感。次のファイル・構文でアクセス制御に関連する設定ができます。

  • /etc/mail/sendmail.cf
CHECK_HOST_ALLOW='foobar.co.jp'
CHECK_RELAY_DEFAULT=allow
ALLOW_RECIPIENT_DOMAIN='foobar.co.jp'
ALLOW_RELAY_FROM='foobar.co.jp'
ALLOW_RELAY_TO='foobar.co.jp'
ACCEPT_ADDRS='$m'
CHECK_HOST_ALLOW=/etc/mail/sendmail.host.allow
CHECK_HOST_DENY=/etc/mail/sendmail.host.deny
CLIENT_DENY_TO=/etc/sendmail.deny.to
REJECT_SOURCE_ROUTE_RELAY=yes
REJECT_EXTERN_SRR=yes
HDR_REJECT_BADMID=no
HDR_REJECT_RCPTADDRS=/etc/sendmail.hdrrejaddr
HDR_REJECT_ACTION=error
MAIL_RELAY_RESTRICTION=yes

上に挙げた設定構文は、ごく一例です。登場した単語は、allow・deny・accept・reject・restrictionです。入り乱れています。

やはり様々な単語が使われるのは、古くからあるソフトウェアだからなのでしょうか。それとも高機能が故に微妙なニュアンス毎に単語を使い分けているのでしょうか。私には、さっぱりわかりません。

ただ今回、denyとrejectの微妙な違いが分かった気がします。ここでは、denyは主にホストの拒否、rejectは主に転送の拒否を示しています。つまり、denyは他人に原因がある拒否、rejectは自分に原因がある拒否のような気がします。…気がするだけです。違うかもしれません。

…Sendmail設定むずすぎ。

SQL

ここで、ちょっと変わってSQL文。SQLでは、ユーザー権限を付与する命令が用意されています。

grant create on *.* to 'user'@'localhost';

grantですね。頼まれたことを承諾する、といった意味でしたから、権限として頼まれたらやってやるよ、という設定と考えれば自然ですかね。

そろそろ頭の中ぐちゃぐちゃになってきた。

iptables(firewalls)

Linuxのパケットフィルタリングを行うiptables(firewalld)は、次のコマンドを実行することでアクセス制御に関連する設定ができます。iptablesの例を示しますが、firewalldも使う英単語は同一です。

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j DROP
iptables -A FORWARD -i eth1 -o eth0 -j REJECT

ここで、新たにdropという単語が出てきました。意味は以下のとおりです。

  • drop

【動詞】

  1. 動詞(+down)(+from+()名詞)〕〔…から〕ポタポタ落ちるしずくがたれる.
  2. 動詞(+down)〕〈ものが〉落ちる; 〈などが〉下りる.
  3. 動詞(+副詞())〕〈が〉(ばったり)倒れる疲れて倒れる.
  4. 強さ程度価値音調などが〉下がる.
  5. 〔+into+()名詞自然に〔…の状態に〕なる,陥る.
  6. が〉やめになる.
  7. 動詞(+前置詞+()名詞)〕〔…から〕〔…へ〕〈が〉ひょいと下りる飛び降りる 〔from〕 〔to,into〕《★【比較】 fall誤ったりして「落ちる」の》.
  8. 〔+from+()名詞〕〈言葉が〉〔…から〕ふと漏れ出る.
  9. 動詞(+前置詞+()名詞)〕〔…から〕落伍()する,やめる脱落するout of,from〕.

dropは6か9の意味でしょうか。中断するといったニュアンスのようですね。

iptablesは、rejectで拒否した場合、パケットを破棄したことを送信者に返答しますが、dropで拒否した場合には、返答も何も行わないという差があるそうです。dropは中断してそれっきりってことですね。

そして、許可はallowでもpermitでもなく、acceptと…。区別のしようがないね。しょうがないね。

Cisco機器

ここから打って変わって、ネットワーク機器の設定コマンドです。

言わずと知れた世界最大のコンピュータネットワーク機器開発会社のCisco社のネットワーク機器設定コマンドです。

Cisco(config)# access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Cisco(config)# access-list 102 deny ip 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255

許可がpermitで、拒否がdenyです。

私は初めて触ったネットワーク機器がCisco社製だったため、このコマンドはあまり忘れないですが、こうやって考えてみるとごちゃごちゃになりますね…。

Allied Telesis機器

Allied Telesis社製のネットワーク機器のアクセス制御設定コマンドは以下のとおりです。

awplus(config)# access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
awplus(config)# access-list 102 deny ip 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255

Cisco社と同じく、許可がpermitで、拒否がdenyです。

ネットワーク機器に入ってるOSって、割とみんなCisco社のネットワーク機器OSの”Cisco IOS”を参考にしているみたいで、permitとdenyが多い印象です。

Allied Telesis社に関してはコマンド丸パクリですがね…。

YAMAHA機器

とうとう最後です。私が個人的に大好きなYAMAHA社製のネットワーク機器のアクセス制御設定コマンドです。

pp auth accept pap chap
ip filter 101 pass 192.168.1.0/24 192.168.2.0/24 * * *
ip filter 102 reject 192.168.1.0/24 192.168.3.0/24 * * *
ip filter 103 restrict 192.168.1.0/24 192.168.4.0/24 * * *

ネットワーク機器では珍しい、独自路線です。出てきた単語はaccept・pass・reject・restrictです。ここで初めて出てきた、passの意味は以下のとおりです。

  • pass

【動詞】

  1. 動詞(+副詞())〕通過する通っていく; 進む.
  2. 〈ものが〉(からへ)次々に回される.
  3. が〉たつ,過ぎ去る.
  4. 財産などが〉〔()に〕渡るto,into〕.
  5. 貨幣などが〉通用する流通する.
  6. 議案などが〉通過する.
  7. が〉試験に合格する及第するパスする (⇔fail).

2の意味ですかね。ネットワーク機器にとって、次に回します=許可します、なので。

ここで出てきたacceptに関しては、これまでとは違って積極的な意味にも取れますね。"pp auth accept pap chap"は、papかchap認証を受け入れる、というコマンドなので。

restrictは、許可でも拒否でもない、制限という意味で先ほど出てきましたが、この設定をすると、WAN回線の接続状態に応じて通したり通さなかったりするみたいです。

雑談ですが、YAMAHA社製のネットワーク機器は、音が全くしないんですよね。小さくて、なのに性能もいいし、なによりコマンド仕様が独自で日本語対応してるので、すごく設定しやすいです。WebインターフェースのGUIもありますし。大好きです。あなたも自宅に1台、どうですか?(ステマじゃないです)

まとめ

結果、よくわかりませんでした。

各英単語の登場回数と、私が判断したITに使われる際の意味をまとめておきます。英語に関してはそこら辺の中学生の方が私よりできるくらい苦手なので、意味が若干違うかもしれませんが、ご容赦ください。コメントいただければ反映します。

動作英単語登場回数意味
許可allow5単なる許可
許可accept4積極的な許可
許可permit3転送の許可
許可grant2受け身な許可
許可valid2信用する
許可pass1転送の許可
拒否deny8単なる拒否
拒否reject4拒絶する拒否
拒否drop1中断する
拒否invalid1信用しない
制限restrict3制限する

allowとdenyが多数派ですね。denyに関しては2位と倍の差をつけた圧勝です。

もういっそ、allowとdenyだけにしてほしいです…。英単語によって違いがあるのであれば、素人にもわかるくらいの違いにしてほしい。明確な動作の差があれば納得なんですけどねー…。

ただ、今回調べてみて、英単語による若干のニュアンスの違いは掴み取れました。すごく感覚的な、言葉には表しにくい違いですが。開発者の方は、それを使い分けているのかも知れないですね。

筆者について

フリーランスエンジニアとして活動している、「もりやませーた」です。

筆者のTwitterはこちら。記事に関するご意見等はTwitterの方へお寄せください。

その他業務に関するお問い合わせは、こちらのページをご覧ください。

SQL 言葉