2009年7月16日木曜日

サブネットマスクとワイルドカードマスク

久しぶりにCCNA受験向けの本を読んでいる。結局CISCOモノを普段さわらないので取得が億劫になって読むのをやめることが多いが。
 

さて、だいぶ昔に読んだときには「サブネットマスク」と「ワイルドカードマスク」の使い分けがイマイチ消化できなくて、コマンド別にどちらを使うかといった非効率な覚え方だったが、今読んだら判別のコツがわかった。
 
 


  • サブネットマスク
    ホスト同士の通信に使うので、ホスト部が必要な場合に指定。

  •  
  • ワイルドカードマスク
    ネットワークの識別に使うので、ネットワーク部が必要な場合に指定。ホスト部は不要。

 

これだけのことだった、いらない情報をマスクする。
上記の定義では、ルーティングテーブルやスタティックルート設定などはネットワークっぽいのでワイルドカードマスクを使うように感じるかもしれないが、あくまでルーティングはホスト間の通信のためパケットをスイッチするものなのでサブネットマスクでいいんだろう。
 

PC同士がPingするならホスト部の違いがわかればいい、ネットワーク部はマスク。
ルータがパケットをフィルタリングする時は、(あえて定義していなければ)ホスト部なんて余計な情報なのでマスクしたらいい。ネットワーク単位で処理するのがいいだろう。
 

CCNA教科書をみて、『丸暗記しか無いなぁ……』と思っていた頃よりはマシになっているようだ。
 

2009年7月13日月曜日

SQLServer2000のEnterPriseManagerからNull値を挿入

メモエントリ
 

いまさら2000かよとも思うが...
EMからレコードを更新する際、「Ctrl+0」 でNull が入る。
普通だと空文字列になっちゃうのかな。

2009年7月10日金曜日

自分でソフトウェアエンジニアリング研修

高度情報技術者の資格を持っているがベタな開発なんて出来ない。
データベースは触れるしセキュリティ考慮した設計のマネごとはするが、DB付属ツールから生のSQLをたたかないとデータを取り出せない、コードももちろん触れない。
 

なぜにこのような歪なエンジニアが生まれるのか、私の場合はそれなりに理由もわかる。
業界にヨコから入ってきているので基礎的な研修をしていないというのもその一つではなかろうか。
(努力が足りないというのはさておき^^; )
 

しかしどうにも自分に対するエンジニアとしての評価が毛の生えた素人からなかなか離れないのもそこにある、かもしれないと思っているわけで。
 
 

丁度よさそうな本があった


まあいいさ、自分で納得できるか知らないが、足りないと思うところはやっていくに限る。
 

ずっと受けたかったソフトウェアエンジニアリングの新人研修 (翔泳社)

 

この本に書いてあるような事がこなせないようでは、新人研修の終わった新人以下ってことか。
そいつは困ったですね。
 
 

それなら自分で研修しよう


という訳で、ソフトウェアエンジニアリングの新人研修を、コーチ自分生徒自分で一通りやってみることにした。開発プロジェクトの通し研修だ。
 

俺の要求を俺が定義して、俺によるシステム提案を俺の視点でレビューするのだ。
そして俺が発注したら俺が外部設計を組み立て、それをみた俺が内部設計して俺に製造させる。
俺のためのテスト仕様を俺に実施させたら、待ちに待った俺としての受け入れテストが行われるという訳だ。
そして俺への完了報告。
 

…ともかくやっておくべきだろう?
 

2009年7月2日木曜日

echoで改行やらTAB文字出力

メモエントリ
 

echo で改行したりTAB文字、要はちょっとだけエスケープ処理したいときー。
$'\n' やら $'\t' やらと$のあとシングルクォートで囲んであげる。
 

例えばこんな使い方、リダイレクトで hosts.allow へ。
# echo sshd: 127. 192.168. : allow$'\n'sshd: ALL: deny
sshd: 127. 192.168. : allow
sshd: ALL: deny

 
 

-e オプションで全体的にエスケープ有効にすれば シングルクォートだけでOK ⇒ '\n'
 

今更ながら。
 

2009年6月25日木曜日

Nagiosプラグイン、check_snmp で閾値に下限を設定する

メモエントリ。
Nagiosプラグインの check_snmp について。
 

check_snmp を使って性能監視をしたいと思ったが、警告(WARNING) オプションで閾値を指定すると、取得した値が閾値を上回ったらWARNING で返ってくる。
下回った時はどうやって設定するんだろう。
 

とりあえずヘルプを見る。

# ./check_snmp --help
check_snmp v2021 (nagios-plugins 1.4.13)
Copyright (c) 1999-2007 Nagios Plugin Development Team

 
Check status of remote machines and obtain sustem information via SNMP
 
 
Usage:check_snmp -H -o [-w warn_range] [-c crit_range]
[-C community] [-s string] [-r regex] [-R regexi] [-t timeout] [-e retries]
[-l label] [-u units] [-p port-number] [-d delimiter] [-D output-delimiter]
[-m miblist] [-P snmp version] [-L seclevel] [-U secname] [-a authproto]
[-A authpasswd] [-X privpasswd]
 
Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
-H, --hostname=ADDRESS
Host name, IP Address, or unix socket (must be an absolute path)
-p, --port=INTEGER
Port number (default: 161)
-n, --next
Use SNMP GETNEXT instead of SNMP GET
-P, --protocol=[1|2c|3]
SNMP protocol version
-L, --seclevel=[noAuthNoPriv|authNoPriv|authPriv]
SNMPv3 securityLevel
-a, --authproto=[MD5|SHA]
SNMPv3 auth proto
-C, --community=STRING
Optional community string for SNMP communication (default is "public")
-U, --secname=USERNAME
SNMPv3 username
-A, --authpassword=PASSWORD
SNMPv3 authentication password
-X, --privpasswd=PASSWORD
SNMPv3 privacy password
-o, --oid=OID(s)
Object identifier(s) or SNMP variables whose value you wish to query
-m, --miblist=STRING
List of MIBS to be loaded (default = none if using numeric oids or 'ALL'
for symbolic oids.)
-d, --delimiter=STRING
Delimiter to use when parsing returned data. Default is "=" Any data on the right hand side of the delimiter is considered
to be the data that should be used in the evaluation.
-w, --warning=INTEGER_RANGE(s)
Range(s) which will not result in a WARNING status

-c, --critical=INTEGER_RANGE(s)
Range(s) which will not result in a CRITICAL status
-s, --string=STRING
Return OK state (for that OID) if STRING is an exact match
-r, --ereg=REGEX
Return OK state (for that OID) if extended regular expression REGEX matches
-R, --eregi=REGEX
Return OK state (for that OID) if case-insensitive extended REGEX matches
-l, --label=STRING
Prefix label for output from plugin (default -s 'SNMP')
-u, --units=STRING
Units label(s) for output data (e.g., 'sec.').
-D, --output-delimiter=STRING
Separates output on multiple OID requests
-t, --timeout=INTEGER
Seconds before connection times out (default: 10)
-v, --verbose
Show details for command-line debugging (Nagios may truncate output)
 
This plugin uses the 'snmpget' command included with the NET-SNMP package.
if you don't have the package installed, you will need to download it from
http://net-snmp.sourceforge.net before you can use this plugin.
 
Notes:
- Multiple OIDs may be indicated by a comma- or space-delimited list (lists with
internal spaces must be quoted) [max 8 OIDs]
- Ranges are inclusive and are indicated with colons. When specified as
'min:max' a STATE_OK will be returned if the result is within the indicated
range or is equal to the upper or lower bound. A non-OK state will be
returned if the result is outside the specified range.
- If specified in the order 'max:min' a non-OK state will be returned if the
result is within the (inclusive) range.
- Upper or lower bounds may be omitted to skip checking the respective limit.
- Bare integers are interpreted as upper limits.
- When checking multiple OIDs, separate ranges by commas like '-w 1:10,1:,:20'
- Note that only one string and one regex may be checked at present
- All evaluation methods other than PR, STR, and SUBSTR expect that the value
returned from the SNMP query is an unsigned integer.
 
Send email to nagios-users@lists.sourceforge.net if you have questions
regarding use of this software. To submit patches or suggest improvements,
send email to nagiosplug-devel@lists.sourceforge.net

 

閾値はレンジだそうで、Note部分に色々書いてあるな、ちょっと試してみた。値はコロンで仕切ろう。
    設定例
  1. "-w 100" ⇒ 100を超えたら警告

  2. "-w :100" ⇒ 100を超えたら警告

  3. "-w 100:500" ⇒ 100から500の範囲からはみ出したら警告

  4. "-w 100:" ⇒ 100未満なら警告


 

という感じになる模様。

2009年6月20日土曜日

Windows コマンドラインから 「パスワードを無期限にする」を有効にする

何を言わんか、判る人にはわかるだろう。 net user コマンドにはこの機能がないのだ。
 

先日とある切欠で wmic の存在を思い出し、記事タイトルのことが出来るのかやってみた。
WMICodeCreator でWMIの中身をチェック、Win32_UserAccount の PasswordExpires を更新すればよい ことはわかっているので、WSHからは既にやっていたんだが、wmic を使えばコマンド1行でOKなのがいい。
 

wmic では Win32_UserAccount のエイリアスは useraccount だ。
なのでコマンドはこうなる。
 

wmic useraccount where (Name = "hogehoge") set PasswordExpires=False
 
 


では、コンピュータ名 "TESTPC" で ユーザー "hogehoge" のアカウントプロパティ「パスワードを無期限にする」にチェックを入れてみよう。
 

C:\>wmic useraccount where (Name = "hogehoge") set PasswordExpires=False
'\\TESTPC\ROOT\CIMV2:Win32_UserAccount.Domain="TESTPC",Name="hogehoge"' のプロパティを更新しています
プロパティは正しく更新されました。

 

C:\>wmic useraccount where (Name = "hogehoge") get PasswordExpires
PasswordExpires
FALSE

 

はいオッケィ。
これで、ユーザ管理画面を開かずにユーザ作成、グループに追加、パスワード無期限 をコマンドラインだけで出来て、あの面倒な「コンピュータの管理」を開かないで済むのだ。
 

2009年6月15日月曜日

社内検証LANをLinuxのiptablesでマスカレード

社内に検証用のLANを作ったとして、既存のLANにはくっつけたくないけど、ネットには繋ぎたいなという環境。
 

NIC2枚ざしのLinuxサーバを1台使って、検証用ネットワークをマスカレードしてしまうには、1行のiptablesルールでOKだったりする。
※使ったのはCentOS5.3でiptables は v1.3.5
 

接続としてはこんな感じ。
┼────┼
│Internet│
┼────┼

│ 社内LAN:192.168.1.0/24
├─┬──────



│eth0:192.168.1.10
┼───────┼
│ルータ用Linux │
┼───────┼
│eth1:10.48.1.254

│ 検証LAN:10.48.1.0/24
├────

 
 


事前にipv4のフォワードを有効にしておく必要があるので、 "/etc/sysctl/conf" を修正して再起動。
# Controls IP packet forwarding
#net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1

 

で、iptablesのルールを作成。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
natテーブルのPOSTROUTINGチェインにルールを1つ、これでとりあえずマスカレードしてくれるようだ。
インターフェイスは環境によるので適宜書き換え、出る際のルールなので外側に。
 

FTPとかはPassiveを使わないと無理だろうけど、とりあえずで設定するなら簡単でいい。
 


ルールを出すとこんな感じ
# iptables -v -L -t nat
Chain PREROUTING (policy ACCEPT 573 packets, 67730 bytes)
pkts bytes target prot opt in out source destination
 
Chain POSTROUTING (policy ACCEPT 333 packets, 26739 bytes)
pkts bytes target prot opt in out source destination
12 861 MASQUERADE all -- any eth0 anywhere anywhere
 
Chain OUTPUT (policy ACCEPT 377 packets, 29918 bytes)
pkts bytes target prot opt in out source destination

 
 

不都合あったらルールに追記するって事で、とりあえず完了。
 

出来ない場合、 lsmod で ipt_MASQUERADE があるか確認。