Cisco IOSはvty, consoleなどの仮想端末し、タイムアウトやメッセージ出力などの様々な設定が可能です。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config-line)# login [ local ] Router(config-line)# login authentication { <auth_list> | default } Router(config-line)# transport input { [ telnet ] [ ssh ] | all | none } Router(config-line)# transport output { [ telnet ] [ ssh ] | all | none } Router(config-line)# transport prefer { telnet | ssh | none } Router(config-line)# session-timeout <min> Router(config-line)# exec-timeout <min> [ <sec> ] Router(config-line)# absolute-timeout <min> Router(config-line)# logout-warning <sec> Router(config-line)# ip netmask-format { bit-count | decimal | hexadecimal Router(config-line)# lockable Router(config-line)# length <num> Router(config-line)# vacant-message <message> Router(config-line)# refuse-message <message> Router(config-line)# rotary <num> Router(config)# username <name> access-group <ac;> Router(config)# line vty <num> Router(config-line)# access-class <acl> { in | out } Router(config)# username <user> autocommand <command> Router(config)# line vty <num> Router(config-line)# autocommand <command>
構成図
これ以降の動作確認は、以下の環境で行います。
初期設定の状態でtelnetとsshによるアクセスを許可しています。
+--------+ +--------+ | R1 +--------+ R2 | +--------+.1 .2+--------+ e0/0 e0/1 192.168.12.0/24 R1 Loopback0 R2 Loopback0 10.1.1.1/32 10.2.2.2/32
[R1] ip domain name cisco.com crypto key generate rsa ! username cisco password 0 cisco ! line vty 0 4 login local transport input telnet ssh [R2] ip domain name cisco.com crypto key generate rsa ! username cisco password 0 cisco ! line vty 0 4 login local transport input telnet ssh
設定全文は下記ファイルです。詳細設定は下記を参照ください。なお、ssh keyを生成する設定はconfigには含まれませんので、手入力でssh keyを生成して下さい。
line vty 接続設定 認証設定
仕様説明
以下のコマンドでline vtyに対する認証の設定が可能です。
コマンド | 説明 |
---|---|
login | line passwordに基づく認証を行います。 |
login local | local databaseに基づく認証を行います。 |
login authentication | 認証リストに基づく認証を行います(要AAA有効化)。 |
Router(config-line)# login [ local ] Router(config-line)# login authentication { <auth_list> | default }
以下transportコマンドは接続方法の定義です。
コマンド | 説明 |
---|---|
transport input | line vtyへ どの接続方法を許可するかの定義です。 例えば、”transport telnet ssh”とすればtelnet接続とssh接続を許可します。 |
transport output | vty接続したユーザが他のルータへどのような接続が可能かの定義です。例えば、”transport ssh”とすれば他のルータへの接続はsshのみ認められます。 |
transport prefer | 優先する接続方法の定義です。user modeで”telnet 192.168.12.2″と入力すると接続方法を明示的に指定した接続もできますが、”192.168.12.2″のように接続方法を省略した指定も可能です。接続方法を省略した場合は、”transport prefer”で定義された接続方法が使用されます。 |
Router(config-line)# transport input { [ telnet ] [ ssh ] | all | none } Router(config-line)# transport output { [ telnet ] [ ssh ] | all | none } Router(config-line)# transport prefer { telnet | ssh | none }
接続設定 認証設定
仕様理解のため、以下の設定をR1に投入します。
[R1] line vty 0 4 transport input ssh transport output telnet transport preferred none
R2からR1への接続を試みます。”transport input ssh”との設定が施されているので、telnet接続は拒否されるもののssh接続が可能である事が確認できます。
[R2] R2#telnet 10.1.1.1 Trying 10.1.1.1 ... % Connection refused by remote host R2# R2# R2#ssh -l cisco 10.1.1.1 Password: R1>
R2からR1へ接続した後に、以下の操作を行います。
“R2″のようにホスト名を指定すると、デフォルトの挙動ではホスト名の名前解決を試みるはずです。しかし、以下の出力を見るとno ip domain-lookupが設定されていないにも関わらず名前解決をしません。これは”transport prefer none”が定義されているので、そもそも接続を試みない、つまり接続しないので名前解決も必要ないからです。
また、”transport output telent”が設定されているので、ssh接続は許可されない旨のエラーメッセージが表示され、その一方telnet接続は可能である事が読み取れます。
[R2] R1>R2 ^ % Invalid input detected at '^' marker. R1> R1> R1>ssh -l cisco 10.2.2.2 % ssh connections not permitted from this terminal R1> R1>telnet 10.2.2.2 Trying 10.2.2.2 ... Open User Access Verification Username: cisco Password: R2>
line vty タイムアウト設定
仕様説明
以下のコマンドでvty接続に関するtimeoutを定義する事ができます。
コマンド | 説明 |
---|---|
session-timeout | vty接続したユーザが他のルータに接続した際、 他のルータへの接続可能な時間の上限を定義します。 |
exec-timeout | 何も入力しない状態が続いた場合の接続可能時間の上限を定義します。 |
absolute-timeout | 入力が続続いた場合の接続可能時間の上限を定義します。 |
absolute-timeout | absolute-timeoutによりログアウトされる前に警告メッセージを表示します。 警告メッセージを表示することで、ログアウト前にwrite memoryを実行したりコマンド入力途中でのログアウトを防いだりする事が可能です。 |
Router(config-line)# session-timeout <min> Router(config-line)# exec-timeout <min> [ <sec> ] Router(config-line)# absolute-timeout <min> Router(config-line)# logout-warning <sec>
動作確認 1
R1に対し以下timeoutを定義します。
[R1] line vty 0 4 session-timeout 1 exec-timeout 2 absolute-timeout 5 logout-warning 30
以下の操作を実行します。
- R2からR1へ接続します。
- 上記の状態でR1からR2へ再接続します。
- session-timeoutによりログアウトするのを待ちます
- exec-timeoutによりログアウトするのを待ちます
[R2] R2#ssh -l cisco 10.1.1.1 Password: R1> R1> R1> R1>telnet 10.2.2.2 Trying 10.2.2.2 ... Open User Access Verification Username: cisco Password: R2> R2> R2>this is test message ^ % Invalid input detected at '^' marker. R2> [Connection to 10.2.2.2 idle too long; timed out] R1> R1> R1>this is test message ^ % Invalid input detected at '^' marker. R1> [Connection to 10.1.1.1 closed by foreign host] R2#
上記のイベントをターミナルソフトのログから時刻を追います。
16行目14:30:04にR2にログインが完了し、23行目14:31:17にログアウトしています。session-timeoutで定義された約1分後にログアウトしているのが分かります。
26行目14:31:45に最後の入力があり、31行目14:33:54にログアウトしています。exec-timeoutで定義した約2分後にログアウトしています。
[Sun Apr 22 14:29:39.136 2012] R2#ssh -l cisco 10.1.1.1 [Sun Apr 22 14:29:46.137 2012] [Sun Apr 22 14:29:46.137 2012] Password: [Sun Apr 22 14:29:47.837 2012] [Sun Apr 22 14:29:47.837 2012] R1> [Sun Apr 22 14:29:48.858 2012] R1> [Sun Apr 22 14:29:49.893 2012] R1> [Sun Apr 22 14:29:49.893 2012] R1>telnet 10.2.2.2 [Sun Apr 22 14:29:58.891 2012] Trying 10.2.2.2 ... Open [Sun Apr 22 14:29:59.010 2012] [Sun Apr 22 14:29:59.010 2012] [Sun Apr 22 14:29:59.010 2012] User Access Verification [Sun Apr 22 14:29:59.010 2012] [Sun Apr 22 14:29:59.010 2012] Username: cisco [Sun Apr 22 14:30:02.874 2012] Password: [Sun Apr 22 14:30:04.924 2012] R2> [Sun Apr 22 14:30:06.905 2012] R2> [Sun Apr 22 14:30:06.959 2012] R2>this is test message [Sun Apr 22 14:30:16.936 2012] ^ [Sun Apr 22 14:30:16.936 2012] % Invalid input detected at '^' marker. [Sun Apr 22 14:30:16.936 2012] [Sun Apr 22 14:30:16.936 2012] R2> [Sun Apr 22 14:31:17.440 2012] [Connection to 10.2.2.2 idle too long; timed out] [Sun Apr 22 14:31:17.456 2012] R1> [Sun Apr 22 14:31:45.862 2012] R1> [Sun Apr 22 14:31:45.862 2012] R1>this is test message [Sun Apr 22 14:31:53.871 2012] ^ [Sun Apr 22 14:31:53.872 2012] % Invalid input detected at '^' marker. [Sun Apr 22 14:31:53.872 2012] [Sun Apr 22 14:31:53.872 2012] R1> [Sun Apr 22 14:33:54.511 2012] [Connection to 10.1.1.1 closed by foreign host] [Sun Apr 22 14:33:54.511 2012] R2#
動作確認 2
以下の操作を実行します。
- R2からR1へ接続します。
- exec-timeoutでログアウトされないよう定期的になんらかのコマンドを入力します。
- absolute-timeoutによりログアウトするのを待ちます
[R2] R2#ssh -l cisco 10.1.1.1 Password: R1>this is test message ^ % Invalid input detected at '^' marker. R1>this is test message ^ % Invalid input detected at '^' marker. R1> * * * Line timeout expired * * R1> R1> [Connection to 10.1.1.1 closed by foreign host] R2#
上記のイベントをターミナルソフトのログから時刻を追います。
5行目14:35:02にR2にログインが完了し、16行目14:39:33に警告メッセージが表示され、16行目14:40:01にログアウトしています。absolute-timeoutで定義された約5分後にログアウトし、absolute-timeoutで定義した30秒前に警告メッセージが表示されています。
[Sun Apr 22 14:34:47.845 2012] R2#ssh -l cisco 10.1.1.1 [Sun Apr 22 14:35:01.370 2012] [Sun Apr 22 14:35:01.370 2012] Password: [Sun Apr 22 14:35:02.780 2012] [Sun Apr 22 14:35:02.781 2012] R1>this is test message [Sun Apr 22 14:36:36.874 2012] ^ [Sun Apr 22 14:36:36.874 2012] % Invalid input detected at '^' marker. [Sun Apr 22 14:36:36.875 2012] [Sun Apr 22 14:36:36.875 2012] R1>this is test message [Sun Apr 22 14:38:24.868 2012] ^ [Sun Apr 22 14:38:24.868 2012] % Invalid input detected at '^' marker. [Sun Apr 22 14:38:24.868 2012] [Sun Apr 22 14:38:24.868 2012] R1> [Sun Apr 22 14:39:33.413 2012] * [Sun Apr 22 14:39:33.413 2012] * [Sun Apr 22 14:39:33.413 2012] * Line timeout expired [Sun Apr 22 14:39:33.413 2012] * [Sun Apr 22 14:39:33.413 2012] * [Sun Apr 22 14:39:44.854 2012] R1> [Sun Apr 22 14:39:49.868 2012] R1> [Sun Apr 22 14:40:01.527 2012] [Connection to 10.1.1.1 closed by foreign host] [Sun Apr 22 14:40:01.528 2012] R2#
line vty 表示設定 操作設定
仕様説明
以下のコマンドでサブネットマスク表示形式、lock機能を設定する事ができます。なお、私が動作確認を行った環境では、length, vacant-message, refuse-messageはサポートされていませんでした。
コマンド | 説明 |
---|---|
ip netmask-format | サブネットマスクの表示形式を変更します。 |
lockable | lock機能を有効にします。 |
lenght | showコマンドなどで一度に出力する行数を定義します。 |
vacant-message | vty lineに空きがあり接続が可能な場合に出力するメッセージです。 |
refuse-message | vty lineに空きがなく接続が不能な場合に出力するメッセージです。 |
Router(config-line)# ip netmask-format { bit-count | decimal | hexadecimal Router(config-line)# lockable Router(config-line)# length <num> Router(config-line)# vacant-message <message> Router(config-line)# refuse-message <message>
表示設定
以下設定をR1に投入します。
[R1] line vty 0 4 lockable ip netmask-format hexadecimal length 10 vacant-message # this is vacant message for vty # refuse-message # this is refuse message for vty #
R2からR1へ接続します。show ip interfaceなどサブネットマスクを表示させるコマンドを入力すると、サブネットマスクが16進数表記に変わっている事が分かります。
[R2] R2#ssh -l cisco 10.1.1.1 Password: R1> R1>show ip interface Ethernet 0/0 Ethernet0/0 is up, line protocol is up Internet address is 192.168.12.1 0xFFFFFF00 Broadcast address is 255.255.255.255 Address determined by non-volatile memory MTU is 1500 bytes Helper address is not set <omitted>
表示設定
lockはパスワードを入力しない限り、操作ができなくなる機能です。例えば、コンソールを開きっぱなしで離籍したい時に有効です。lock操作実施してから離籍すれば、他のユーザがコンソールからコマンドを入力するリスクを回避する事ができます。
R2からR1に接続したままの状態で、lockコマンドを入力します。パスワードを定義し、画面をlockできる事を確認します。
[R2] R1>lock Password: Again:
line vty アクセス制御
仕様説明
以下のコマンドでVTYに対するアクセス制御が可能です。
Router(config-line)# access-class <acl> { in | out }
以下のコマンドでユーザ単位のアクセス制御が可能です。ルータにログインしたユーザはアクセスリストで許可された通信しか許されなくなります。なお、このユーザ単位の制御は上記のline vtyに対する設定と競合します。
Router(config)# username <name> access-group <ac;>
VTYに対するアクセス制御
以下の設定をR1に投入します。
[R1] ip access-list standard PERMIT_VTY_IN 10 permit host 10.2.2.2 ip access-list standard PERMIT_VTY_OUT 10 permit host 10.2.2.2 ! line vty 0 4 transport input all transport output all access-class PERMIT_VTY_OUT out access-class PERMIT_VTY_IN in
R2からR1へ接続を試みます。VTY入力方向のACLの影響で、送信元がLoopback 0 (10.2.2.2)の場合のみ接続が許可される事が分かります。
R2#telnet 10.1.1.1 /source-interface Ethernet 0/0 Trying 10.1.1.1 ... % Connection refused by remote host R2# R2# R2#telnet 10.1.1.1 /source-interface Loopback 0 Trying 10.1.1.1 ... Open User Access Verification Username: cisco Password: R1>
R2からR1へ接続した状態で、再度R1からR2への接続を試みます。VTY出力方向のACLの影響で、宛先が10.2.2.2の場合のみ接続が拒否される事が分かります。また、ACLによって拒否された場合は、”Connections to that host not permitted from this terminal”と宛先から接続拒否を返された時とは異なるエラーメッセージが出力される事にも注意して下さい。
R1>telnet 192.168.12.2 Trying 192.168.12.2 ... % Connections to that host not permitted from this terminal R1> R1> R1>telnet 10.2.2.2 Trying 10.2.2.2 ... Open User Access Verification Username: cisco Password: R2>
ユーザ単位のアクセス制御
ユーザoperatorを作成し、operatorに対するアクセス制御をかけます。この設定は、先程のline vtyに対するアクセス制御と競合しますので、先程の設定の削除操作も行います。
[R1] line vty 0 4 transport input all transport output all no access-class PERMIT_VTY_OUT out no access-class PERMIT_VTY_IN in ! access-list 100 permit tcp any host 10.2.2.2 eq 22 username operator access-class 100 password operator
R2からR1へ、ユーザoperatprで接続します。ACLの影響で、telnetでの接続はできませんがSSH(tcp 22)による接続は可能である事を確認します。
R2#telnet 10.1.1.1 /source-interface Loopback 0 Trying 10.1.1.1 ... Open User Access Verification Username: operator Password: R1>telnet 10.2.2.2 Trying 10.2.2.2 ... % Connections to that host not permitted from this terminal R1> R1> R1>ssh -l cisco 10.2.2.2 Password: R2>
line vty rotary
仕様説明
以下のコマンドでtelnet接続可能なポート番号を変更します。例えば、”rotary 1″と指定すると、3001, 4001, 5001などのポート番号で接続可能です。
Router(config-line)# rotary <num>
rotaryはlock and keyと呼ばれる機能と併用される事が多いです。lock and keyは、アクセス許可用のユーザを作成し、そのユーザでログインすると一定時間アクセスが許されるようになる仕組みの事です。
lock and keyは”access-enable”というコマンドを実行する事によって、アクセスが一定時間許されるようになります。一般的には、ログイン後に自動的に”access-enable”コマンドを実行するようにします。コマンド自動実行の方法は、以下のようにユーザ単位の定義とline単位の定義があります。
Router(config)# username <user> autocommand <command> Router(config)# line vty <num> Router(config-line)# autocommand <command>
動作確認
rotaryの動作確認として、lock and keyを実装します。以下のようにlock and keyでhttpを許可する設定を投入します。
[R1] ip http server username access password access ! line vty 4 rotary 1 autocommand access-enable host ! ip access-list extended LOCK_KEY 10 dynamic ACCESS timeout 5 permit tcp any any eq www 20 deny tcp any any eq www 99 permit ip any any ! interface Ethernet0/0 ip access-group LOCK_KEY in
lock解除前は、httpに対してアクセスできない事を確認します。
[R2] R2#telnet 10.1.1.1 80 Trying 10.1.1.1, 80 ... % Destination unreachable; gateway or host down R2#
lock解除し、httpに対してアクセス可能な事を確認します。
[R2] R2#telnet 10.1.1.1 3001 Trying 10.1.1.1, 3001 ... Open User Access Verification Username: access Password: [Connection to 10.1.1.1 closed by foreign host] R2# R2# R2#telnet 10.1.1.1 80 Trying 10.1.1.1, 80 ... Open GET HTTP/1.1 400 Bad Request Date: Fri, 01 Mar 2002 00:11:04 GMT Server: cisco-IOS Accept-Ranges: none 400 Bad Request [Connection to 10.1.1.1 closed by foreign host] R2#
line console
仕様説明
以下のコマンドでconsoleに対する同時接続数を制限する事ができます。
Router(config-line)# session-limit <num>
上記以外の設定は、line vtyとほぼ同じなので説明を省略します。
動作確認
上記以外の設定は、line vtyとほぼ同じなので説明を省略します。
line console 0 transport output all transport preferred none session-limit 1 vacant-message # this is vacant message for console # refuse-message # this is refuse message for console # login local lockable R1>exit this is vacant message for console User Access Verification Username: cisco Password: R1> R1> R1>hoge ^ % Invalid input detected at '^' marker. R1> R1>show ip inter R1>show ip interface E R1>show ip interface Ethernet 0/0 Ethernet0/0 is up, line protocol is up Internet address is 192.168.12.1 0xFFFFFF00 Broadcast address is 255.255.255.255 Address determined by non-volatile memory MTU is 1500 bytes Helper address is not set R1>lock Password: Again: