iPhoneをUSB経由でテザリングして複数PCをネットに接続

 インターネット接続用の回線が(諸々の都合で)廃止となってしまったので、代わりにiPhone でテザリングして、自分の作業用PCやその他のPCをインターネットに接続できるようにしてみたときの備忘録です。

 

【使用機器】

  • iPhone 5s (iOS 9.2、 docomo / Xiパケ・ホーダイ for iPhone)
  • Windows 7 Professional
  • HUB , その他PC

 構成はこんなです。 (PC達にWiFiがないので、Windows 7 をブリッジにして有線でつなぎます)

 なくなってしまった有線インターネット回線は、もともと Linux や Windows など諸々の検証用に使用していたので、今回も自分の作業用PC(Windows 7)のみならず、他のマシン達も(Windows 7経由で)同時にインターネットに接続できるようにしてみます。

  携帯電話事業者によって、テザリング できる / できない は変わってきますので、そこらへんについてはご利用のキャリアでのご確認を。。。
 私の場合(docomo)では、特に追加契約などは不要でテザリングできました。
 ・docomo iPhone テザリングの利用方法

 

 作業のおおまかな流れとしては、

  1.  USB接続の iPhone でテザリングできるように、 Windows 7 にデバイスドライバなどを入れる。
  2.  Windows 7 の USBポート に iPhone を繋いでインターネットに接続。
  3.  Windows 7 の有線LANにHUB(とか)を繋ぐ。
  4.  Windows 7 で 有線LAN と iPhone側の接続をブリッジする。

 こんな感じです。
 特段むずかしい事もないので、早速やってみましょう。

 

§1. デバイスドライバの導入

 Windows 用の iPhone ドライバは、iTunes のインストーラーに含まれています。
 iTunes をまるっとインストールするのが手っ取り早いのですが、iTunes には Bojour などどいった他のアプリも同梱されています。
 今回は作業用PCということもあり、極力不要なアプリは除外したいので、必要最低限なもののみインストールします。

【iPhone USB テザリング】
 ・Apple のサポートコミュニティ(英語) : https://discussions.apple.com/thread/6829407?start=0&tstart=0
・ASCII.jp の記事 : http://ascii.jp/elem/000/000/918/918548/

 

 上記サイトを参考に、iTunes インストーラーをアーカイバで展開(解凍) -> 各インストールコンポーネント(*.msi)を抽出、下記の2つを導入、でUSB経由でiPhoneテザリングするための最低限必要な機能が実装できます。

① AppleApplicationSupport.msi
② AppleMobileDeviceSupport.msi

(インストールの順番は、iTunes 削除 https://support.apple.com/ja-jp/HT204275 と逆 ~ 上記① -> ②の順番 ~ で行います)

 ちなみに、Mobile Device Support (← Windows のサービスとしてインストールされる)だけでも動くのでは、と思って試したのですが、 Application Support がないとサービスの起動ができませんでした。。。

 

 

  • iTunes のダウンロード

 Apple のサイトから iTunes のインストーラーをダウンロードして、展開(解凍)します。

 ダウンロードサイト(日本):  http://www.apple.com/jp/itunes/download 

 

 ダウンロードしたインストーラーを解凍したところ。(今回は Lhaplus http://www7a.biglobe.ne.jp/~schezo/  を使用)

 上記のなかから、

① AppleApplicationSupport.msi
② AppleMobileDeviceSupport.msi

 ①、②の順番にインストール。 (インストールのスクリーンショットは割愛しますが、インストーラーの指示どおりで特に難しくないです)

 

§ 2. iPhone を USB で接続

 まず、iPhone側 で、ホーム画面から 「設定」 を押して > 「インターネット共有」 を押して > インターネット共有設定をオンに。(スクリーンショットはないです・・・)

 続いて、Windows 7 マシンのUSBポートに iPhone を接続します。

 すると、Windowsのネットワークアダプタに ↓ このように、「Apple Mobile Device Ethernet」(画面内の下から2番目) が追加されます。

 私の環境だと、iPhoneは 「ローカルエリア接続2」にマッピングされました。

 このPC 1台だけをネット接続するのであれば、この時点で 「ローカルエリア接続2」 を 「DHCP」 に設定すれば、インターネットに疎通できるようになります。

 

【iPhone から配布されるIPアドレス】
Windowsで ipconfig して確認したところ、

IPv4 アドレス . . . . . . . . . . : 172.20.10.4(優先)
サブネット マスク . . . . . . . . : 255.255.255.240
リース取得. . . . . . . . . . . . : 2016年1月14日 10:41:08
リースの有効期限. . . . . . . . . : 2016年1月15日 10:26:44
デフォルト ゲートウェイ . . . . . : 172.20.10.1
DHCP サーバー . . . . . . . . . . : 172.20.10.1
DNS サーバー. . . . . . . . . . . : 172.20.10.1

でした。

iPhone からは、USBインターフェース(ローカルエリア接続2)に /28 (255.255.255.240)のネットワークが展開されていますので、iPhone が使う .1 を除き、第4オクテットが .2  ~  .14  を端末側で利用できますね。
端末側では DHCP を使用しなくとも、第4オクテットが .2  ~  .14 を固定で割り振るのもアリですね。

 

 

§ 3. WIndows 7 の有線LAN側にHUB(とか)を接続

 Windows 7 の有線LAN側にHUB(とか)を接続、その先にインターネットに接続したいマシン達を接続します。 

 各マシンのIPアドレスは、DHCPにするか、固定でもよいかと。
(DHCPと固定を併用する場合は、DHCPリースされてないIPを固定に割り当てないと)

 DHCPを使用する場合は、最大 13台が同時接続できる・・・かな? (検証していないのですが、.2 から .14 までがリースされるとして)

 NATを併用すれば、もっと接続台数は増やせますね。

 多くの携帯電話会社では 通信量制限があるので、台数が多いとすぐ上限を超えてしまいそうですが・・・
 また、従量課金の場合はこの方法はキケンですね・・・

 

 

§ 4. Windows 7 で 有線LAN と iPhone側の接続をブリッジする

 Windows 7 の有線LAN と iPhone テザリング接続を間をブリッジ接続します。

 コントロールパネルからネットワーク接続を開き、

・有線LAN : ローカルエリア接続(Marvell Yukon 88E8072)
・iPhone テザリング : ローカルエリア接続2(Apple Mobile Device Ethernet)

を選択、右クリックして 「ブリッジ接続」 を選択します。

 

 しばらくすると、下記のように 「ネットワーク ブリッジ」 が作成されます。

 

 「ネットワークブリッジ」 のプロパティを開くと、アダプターの欄に先ほど選択していた  「ローカルエリア接続」 と 「ローカルエリア接続2」 が選択(チェック)されているはずです。

  「ネットワークブリッジ」 のIPアドレスは DHCP で取得にしておきます。 

 

 

 これで、Windows 7 と その先につながっているマシン達が、iPhone 経由でインターネットと疎通できます。
 iPhone の USB インターフェース側に展開される IPアドレス(サブネット)は上記に記したように /28 (iPhone も含めて、ホスト部 は14台ぶん) のサブネットなので、DHCPでiPhoneからIPアドレスをもらっても、固定IPを別途割り振っても良いかと思います。
 携帯電話の通信量制限を気にしなくても良い環境であれば、Windows 7 の有線LAN側に NAT できる機器を置けば、何台でも同時接続可能にすることもできると思います。

 

 今回の備忘録は以上です。

 

 

.vimrc for me

 自分用の .vimrc をいつでも他の環境にコピる用の備忘録なので、特段解説がないですヨ。 ^^;

ペーストする際には、「:set paste」 を忘れずに!

 

" vi互換スイッチの設定。この定義は vimrc の先頭に記述しなければならない。(compatible: vi互換を優先し、vimの機能は制限される。 / nocompatible: vimの機能を有効にする。)
"
set nocompatible

" 現在のカーソル位置(行、桁)をVimウィンドウの右下に常に表示する。(有効:ruler/無効:noruler)
set ruler

" カラースキーマを設定 (使えるカラーはこちら(at CentOS 7) >>> /usr/share/vim/vim74/colors)
colorscheme desert

" 検索パターンにおいて大文字と小文字を区別しない。(有効:ignorecase/無効:noignorecase)
set noignorecase

" 検索パターンが大文字を含んでいたらオプション 'ignorecase' を上書きする。(有効:smartcase/無効:nosmartcase)
set smartcase

" オンのときは、ウィンドウの幅より長い行は折り返され、次の行に続けて表示される。(有効:wrap/無効:nowrap)
set wrap

" 入力されているテキストの最大幅。行がそれより長くなると、この幅を超えないように空白の後で改行される。値を 0 に設定すると無 効になる。
set textwidth=0
set formatoptions=q

" 検索がファイル末尾まで進んだら、ファイル先頭から再び検索する。(有効:wrapscan/無効:nowrapscan)
set wrapscan

" オンのとき、コマンドライン補完が拡張モードで行われる。(有効:wildmenu/無効:nowildmenu)
set wildmenu

" 閉じ括弧が入力されたとき、対応する開き括弧にわずかの間ジャンプする。(有効:showmatch/無効:noshowmatch)
set showmatch

" 毎行の前に行番号を表示する。(有効:number/無効:nonumber)
set number
"
" タブ文字を CTRL-I で表示し、行末に $ で表示する。(有効:list/無効:nolist)
set list

" Listモード (訳注: オプション 'list' がオンのとき) に使われる文字を設定する。
set listchars=tab:>-,extends:<,trail:-,eol:<

" 最下ウィンドウにいつステータス行が表示されるかを設定する。
"       0: 全く表示しない
"       1: ウィンドウの数が2以上のときのみ表示
"       2: 常に表示
set laststatus=2

" コマンド (の一部) を画面の最下行に表示する。(有効:showcmd/無効:noshowcmd)
set showcmd

" ファイルを上書きする前にバックアップを作る。書き込みが成功してもバックアップはそのまま取っておく。(有効:backup/無効:nobackup)
set nobackup

" ファイルの上書きの前にバックアップを作る。オプション 'backup' がオンでない限り、バックアップは上書きに成功した後削除される。(有効:writebackup/無効:nowritebackup)
set writebackup

 

 

 

Linux サーバー初期設定

 Linux 構築時の初期設定をまとめました。 自分流ですが、だいたいいつもこんな設定をしてから使い始めてます。 (以下、コマンドやパラメータは CentOS 6 (64bit) でのものです。)

 

【おおまかな初期設定の流れ】

  1. ユーザの追加。
  2. root ユーザ での ssh ログインを禁止。 (必ず一般ユーザでログインしてから su か sudo する)
  3. su / sudo できるユーザを登録。
  4.  ネットワーク(IP アドレスなど)の設定。
  5.  セキュリティ関連の設定。
  6. 必要なアプリケーションのインストール

 

§ 1. ユーザの追加。

 一般ユーザーを追加します。 (セキュリティ上の観点から、必ず一般ユーザでログインし、 root 権限が必要な場合はその都度 sudo か su しましょう)。

 ユーザー名「user001」さんを登録。

# useradd user001

 

 ユーザ「user001」さんにパスワードを設定。

# passwd user001
Changing password for user user001.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

 

 

§2. root ユーザでの ssh 接続を禁止

 root ユーザで直接 ssh 接続できてしまうのはセキュリティ上の観点から好ましくないので、禁止します。

 /etc/ssh/sshd_config の中の PermitRootLogin を no に指定します。

# vim /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no

 

 変更後、sshd を再起動します。

# service sshd restart
sshd を停止中:                            [  OK  ]
sshd を起動中:                            [  OK  ]

 

 

§3. su、sudo できるユーザを制限

# vim /etc/pam.d/su
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid
auth            substack        system-auth
auth            include         postlogin
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         include         postlogin
session         optional        pam_xauth.so

 6行目の 「auth            required        pam_wheel.so use_uid」 のコメントを外して有効にします。

 

# visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

「%wheel>-ALL=(ALL)>——ALL」  のコメントを外して有効にします。(CentOS 6.7 minimal インストールでは 105行目に上記記述あり)

 

 

§ 4. 管理者ユーザに wheel (root への昇格権限) を付与

# usermod -G wheel user001

 

 確認してみます。

# cat /etc/group | grep wheel
wheel:x:10:user001

 wheel に user001 が追加されました。

 

 

§ 5. ネットワークの設定

 ネットワークまわりについては、Red Hat の ドキュメント がわかりやすいです。 

 主要な設定ファイルは以下になります。

  1. /etc/hosts
  2. /etc/resolv.conf
  3. /etc/sysconfig/network
  4. /etc/sysconfig/network-scripts/ifcfg-ethx

 

 1. の /etc/hosts 、今回は特に記述しないので、飛ばします。(自前の名前解決はせずに DNS を利用)

 2. の /etc/resolv.conf は 4. (ifcfg-ethx) での設定が反映されるようにしているので、割愛します。

 

# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=nekokoneko.miz.blue
#GATEWAY=10.0.255.254
  • 1行目: yes にします。 no はネットワーク使わない。
  • 2行目: IPv6 を使うかどうか。 yes  or no を指定。
  • 3行目: host 名です。 FQDN で指定。(設定しなくても IP通信は可能です)
  • 4行目: デフォルトゲートウェイを指定します。 後述の ifcfg-ethx ファイル内で指定する事もできます。( ifcfg-ethx に記述がない場合は、こちらの値が使用される)

 

 

 ifcfg-ethx ファイルを編集します。 サーバーの環境によって x  の部分が変わります(NIC の数によります。 x は通常 0 から開始されます)。  「#show ip addr 」 か 「# ifconfig -a 」 すると x の部分がわかります。  (今回は 仮想マシンで NIC 1枚 なので eth0 )

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

 

DEVICE=eth0
#DEVICE=eth0:2    ### 複数のIPアドレスをNICに割り当てる場合。 eth0 <-- 1個め、 eth0:0 <-- 2個め、 eth0:1 <-- 3個め・・・
#DEVICE=eth0.100    ### 802.1q  vlan ID = 100の場合。 「lsmod | grep 8021q」してモジュールがロードされていなかったら、「modprobe 8021q」でロードが必要。
#VLAN=yes    ### 802.1q 使う場合。
#DEVICE=bond0    ### bondigインターフェースの場合
HWADDR=90:FB:A6:0A:F7:AE
TYPE=Ethernet
UUID=77c9fc8b-b113-4151-ae82-51606cf23a42
ONBOOT=yes
#NM_CONTROLLED=yes
NM_CONTROLLED=no
#BOOTPROTO=dhcp
BOOTPROTO=none

IPADDR=10.1.10.201
NETMASK=255.255.255.0
#PREFIX=24

GATEWAY=10.1.10.150

PEERDNS=yes
DNS1=10.1.10.254
DNS2=8.8.8.8

#ETHTOOL_OPTS="autoneg off speed 100 duplex full"
#BONDING_OPTS="mode=1 primary=eth0 miimon=1000 updelay=5000"
#BONDING_OPTS="mode=1 primary=eth0 arp_interval=1000 arp_ip_target=+10.0.1.1 arp_ip_target=+10.0.1.2 arp_ip_target=+10.0.1.254"
  • 1 ~ 3 、5行目: 物理デバイス名です。 通常はこの設定ファイル名(ifcfg-xxx) の xxx 部分と同一です。 (備忘録のために複数のインターフェース名を書いてます)
  • 4行目: このインターフェースで 802.1q 使う場合は yes
  • 6行目: MACアドレスになります(物理 NICの MAC を上書きします)。 書かなくてもよいです。 ( NIC と MAC アドレスの紐づけは udev で。  障害などで NIC交換 -> MAC アドレスが変わった -> eth1(とか)になっちゃった場合は 「 /etc/udev/rules.d/70-persistent-net.rules 」 の記述をコメントアウトして再起動すると eth0 に戻る)  同様のパラメータとして、MACADDR がありますが、混在させないこと(どちらか一方のみを記述)。
  • 7行目、8行目: TYPE、UUID。 書かないでよいです。 ifcfg-ethx ファイルがシステム(Network Manager だ!)によって自動的に作成された場合に、記述されます。
  • 9行目: ONBOOT。 yes or no。 OS起動時にこのNICをアクティブにするか、しないか。
  • 10、11行目: yes = Network Manager (GUIの操作ツール) による設定が許可される。 no = 許可しない。 ラップトップPCなどで LAN や Bluetooth や WIFI を頻繁に切り替えて使用する場合は yes が便利ですが、サーバー用途では no にしたほうが無難です。
  • 12、13行目: BOOTPROTO。 このNIC が IP アドレスを取得する方法です。 none、bootp、dhcp の何れかを指定。 固定IPの場合は none を。
  • 15行目: IPアドレスを指定します。
  • 16、17行目: ネットマスクを指定します。 (NETMASK の代わりに PREFIX でも指定できます)
  • 19行目: デフォルトゲートウェイを指定します。 NIC が複数枚あって、どのNIC にデフォルトゲートウェイを設定するか、指定したい場合に有用です。 (たとえば、同じサブネットにNIC 2枚つなぐとか) ※ 複数の ifcfg-ethx でこのパラメータを設定した場合、最後に読み込まれた値が有効になります。    複数 NIC でルーターにするとか IP パケットの取り扱いを詳細に設定したい場合は、iproute2 で。
  • 21行目: PEERDNS=yse の場合、DNS{1,2} = の値を /etc/resolv.conf に書き込みます。 PEERDNS=no の場合、DNS{1,2} = を記述しても何もおきません (/etc/resolv.conf に記述しましょう)。
  • 22、23行目: DNS サーバーを指定します。 (PEERDNS=no にして  /etc/resolv.conf に直接書いてもよいです)
  • 25行目: Ethtool のオプションを指定できます。 この例だと(コメントアウトしてるので反映されませんが)  auto negotiation を OFF にして 100Mbps/Full Duplex 固定にする設定です。
  • 26、27行目: ボンディング インターフェース(にした場合)のパラメータです。 (備忘録でのっけてます)

 

 設定が一通り終わったら、ネットワークインターフェースを再起動して反映させます。

# service network restart
インターフェース bond0 を終了中:                           [  OK  ]

ループバックインターフェースを終了中                       [  OK  ]

ループバックインターフェイスを呼び込み中                   [  OK  ]

インターフェース bond0 を活性化中:                         [  OK  ]

 

 ネットワークの設定が完了して無事にインターネットと疎通できるようになったら、一旦 yum update してパッケージを最新にしておきましょう。

 

§ 6. root 宛のメールを管理者ユーザに転送する。

 /etc/aliases を編集して root 宛のメールを(管理者にでも)転送します。

# vi /etc/aliases
# Person who should get root's mail
#root           mark
root:           user001@xxxxxx.com

 root のエントリーは設定ファイルの最下段にあると思います。 初期状態では このエントリーがコメントアウトされている(ユーザ 「mark」 に転送するそうだ)ので、適宜変更します。

 

 変更を反映します。

# newaliases

 

 

§ 7. SELinux

 SELinux を停止します。  ※ サーバー要件によって、個別に判断が必要です。

 SELinux が有効/無効かの確認方法。

# getenforce
Enforcing
  • Enforcing : SELinux が有効 (ポリシー違反のアクセスは、ログに書き出して拒否する)
  • Permissive : SELinux が有効 (ポリシー違反のアクセスは、ログに書きだすが、許可する)
  • Disabled : SELinux は完全に無効

 

 SELinux の状態確認コマンド。

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

 

 SELinux の 無効化 / 有効化方法。

 一時的な設定変更の場合、setenforce コマンドで Enforcing / Permissive の切り替えが可能。

# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

 

 恒久的な変更は、下記のようにファイルを修正後、OS再起動。

# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

 6行目の SELINUX = ******** に適用したい設定を記述します。 指定できる文字列は 3~5 行目に記載があります。

 OS を再起動すると変更が反映されます。

 

 

§ 8. NTP

 時刻同期の設定をします。

 NTP が入っていない場合、yum で追加します。

# yum install ntp

 

 参照する NTP サーバーを追加します。

# vi /etc/ntp.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server 10.1.10.254 iburst
server ntp.jst.mfeed.ad.jp iburst
server ntp.nict.jp iburst

 7行目から9行目を追加してます。

 

 ntpd を再起動します。

# service ntpd restart

 

 OS 起動時に NTPd も起動するようにします。

# chkconfig ntpd on
# chkconfig --list ntpd

 

 時刻同期状態を確認。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
-59.124.29.241   133.243.238.244  2 u   20   64   77   71.951   -0.036   0.229
+59.106.180.168  131.112.181.48   2 u  104   64   76   37.789   -0.758   1.208
-66.228.42.59    108.31.199.162   3 u   42   64   77  214.141    2.760   4.602
+129.250.35.250  103.1.106.69     2 u   48   64   77   30.978   -0.625   0.244
x10.1.10.254     .LOCL.           1 u   61   64   77   43.447  -229.57   8.811
+210.173.160.87  133.243.236.17   2 u    7   64  177   38.486   -1.431   2.434
*133.243.238.164 .NICT.           1 u   15   64  177   43.077   -3.176   1.810

 先頭に 「*」 マークが付いているサーバーがあれば、時刻同期は上手く行っています。(上例だと 10行目)

 

 

§ 9.  iptables

 iptables で パケットフィルタリング(= Firewall)を行います。

 サーバーの通信要件によりますが、だいたいこんなエントリーを登録してます。 (設定ファイルの直接編集は非推奨ですが、いつもファイル編集 > service iptables restart しちゃってます)

cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Sep 19 10:51:23 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [3:177]
:OUTPUT ACCEPT [3:177]
COMMIT
# Completed on Fri Sep 19 10:51:23 2014
# Generated by iptables-save v1.4.21 on Fri Sep 19 10:51:23 2014
*mangle
:PREROUTING ACCEPT [2:268]
:INPUT ACCEPT [2:268]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3:177]
:POSTROUTING ACCEPT [3:177]
COMMIT

##
## followings were added by user001.
##
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]


#
## This custom chain logs, then DROPs packets.
##
-N LnD

-A LnD -p tcp -m limit --limit 1/s -j LOG --log-prefix "[TCP drop] " --log-level=info
-A LnD -p udp -m limit --limit 1/s -j LOG --log-prefix "[UDP drop] " --log-level=info
-A LnD -p icmp -m limit --limit 1/s -j LOG --log-prefix "[ICMP drop] " --log-level=info
-A LnD -f -m limit --limit 1/s -j LOG --log-prefix "[FRAG drop] " --log-level=info
-A LnD -j DROP

#
# This custom chain logs, then REJECTs packets.
#
-N LnR

-A LnR -p tcp -m limit --limit 1/s -j LOG --log-prefix "[TCP reject] " --log-level=info
-A LnR -p udp -m limit --limit 1/s -j LOG --log-prefix "[UDP reject] " --log-level=info
-A LnR -p icmp -m limit --limit 1/s -j LOG --log-prefix "[ICMP reject] " --log-level=info
-A LnR -f -m limit --limit 1/s -j LOG --log-prefix "[FRAG reject] " --log-level=info
-A LnR -j REJECT

#
# This chain logs, then DROPs "Xmas" and Null packets which might
# indicate a port-scan attempt
#
-N ScanD

-A ScanD -p tcp -m limit --limit 1/s -j LOG --log-prefix "[TCP Scan?] "
-A ScanD -p udp -m limit --limit 1/s -j LOG --log-prefix "[UDP Scan?] "
-A ScanD -p icmp -m limit --limit 1/s -j LOG --log-prefix "[ICMP Scan?] "
-A ScanD -f -m limit --limit 1/s -j LOG --log-prefix "[FRAG Scan?] "
-A ScanD -j DROP

#
# This chain limits the number of new incoming connections to
#  prevent DDoS attacks
#
-N DDoS

-A DDoS -m limit --limit 100/s --limit-burst 500 -j RETURN
-A DDoS -j LOG --log-prefix "[DOS Attack/SYN Scan?] "
-A DDoS -j DROP

#
# Block IRC ports
#
-A OUTPUT -p tcp --dport 6660:6669 -j DROP

#
# Allow unlimited traffic on the loopback interface
#
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

#
# allow all outgoing
#
-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT

#
# Disallow packets frequently used by port-scanners
#

# All of the bits are cleared
-A INPUT -p tcp --tcp-flags ALL NONE -j ScanD

# SYN and FIN are both set
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j ScanD

# SYN and RST are both set
-A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j ScanD

# FIN and RST are both set
-A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j ScanD

# FIN is the only bit set, without the expected accompanying ACK
-A INPUT -p tcp --tcp-flags ACK,FIN FIN -j ScanD

# PSH is the only bit set, without the expected accompanying ACK
-A INPUT -p tcp --tcp-flags ACK,PSH PSH -j ScanD

# URG is the only bit set, without the expected accompanying ACK
-A INPUT -p tcp --tcp-flags ACK,URG URG -j ScanD

# SYN-Flood
# (Request for new connection; large number indicate possible DDoS-type attack;
# same as --syn)
-A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j DDoS

#
# ICMP
#

# (4) Source Quench.
# Incoming & outgoing requests to slow down (flow control)

-A INPUT -p ICMP --icmp-type 4 -s 0.0.0.0/0 -j ACCEPT

# (12) Parameter Problem.
# Incoming & outgoing error messages

-A INPUT -p ICMP --icmp-type 12 -s 0.0.0.0/0 -j ACCEPT

# (3) Destination Unreachable, Service Unavailable.
# Incoming & outgoing size negotiation, service or
# destination unavailability, final traceroute response

-A INPUT -p ICMP --icmp-type 3 -s 0.0.0.0/0 -j ACCEPT

# (11) Time Exceeded.
# Incoming & outgoing timeout conditions,
# also intermediate TTL response to traceroutes

-A INPUT -p ICMP --icmp-type 11 -s 0.0.0.0/0 -j ACCEPT

#
# (0 | 8) Allow pings to anywhere.
#

-A INPUT -p ICMP --icmp-type 0 -s 0.0.0.0/0 -j ACCEPT
-A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT

#
# AUTH (113) - Allowing your outgoing AUTH requests as a client
#

-A OUTPUT -p tcp --sport 1024: --dport 113 -d 0.0.0.0/0 -j ACCEPT

-A INPUT -p tcp -m state --state ESTABLISHED,RELATED --sport 113 --dport 1024: -s 0.0.0.0/0 -j ACCEPT

#
# smtp server
#
-A INPUT -p tcp -m tcp --dport smtp -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport auth -m state --state ESTABLISHED -j ACCEPT

#
# POP3 (110) - Retrieving Mail as a POP3 client
# POP3S (995) - Retrieving Mail as a POP3S client
# IMAP (143) - Retrieving Mail as an IMAP client
# IMAPS (993) - Retrieving Mail as an Secure IMAP client
#
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -m multiport --sports 110,995,143,993 -m tcp --dport 1024: -j ACCEPT

#
# POP3 (110) - Hosting a POP3 server for remote clients
# POP3S (995) - Hosting a secure POP3 server for remote clients
# IMAP (143) - Hosting an IMAP server for remote clients
# IMAPS (993) - Hosting a Secure IMAP server for remote clients
#
-A INPUT -p tcp --sport 1024: -m multiport --dports 110,995,143,993 -j ACCEPT

#
# http client
#
-A INPUT -p tcp -m multiport --sports http,https,webcache -m tcp --dport 1024: -m state --state ESTABLISHED -j ACCEPT

#
# http server
#
-A INPUT -p tcp -m tcp --sport 1024: -m multiport --dports http,https,webcache -m state --state NEW,ESTABLISHED -j ACCEPT

#
# DNS client (53)
#
-A INPUT -p udp --sport 53 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

# TCP client-to-server requests are allowed by the protocol
# if UDP requests fail. This is rarely seen. Usually, clients
# use TCP as a secondary name server for zone transfers from
# their primary name servers, and as hackers.
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED --sport 53 --dport 1024: -j ACCEPT

#
# ntp client
#
-A INPUT -s 0.0.0.0/0 -p udp -m udp --sport 123 -j ACCEPT

#
# Outbound SMTP / e-mail
#
-A INPUT -p tcp -m tcp --sport smtp -m state --state ESTABLISHED -j ACCEPT

#
# FTP (20, 21) - Allowing outgoing client access to remote FTP servers
#                               Active & Passive
#
-A INPUT -p tcp -m tcp --sport ftp -m state --state ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m tcp --sport ftp-data -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT

#
# FTPS (989, 990) - Allowing incoming access to your local FTP+SSL server
#
# Incoming request
#
-A INPUT -p tcp -m tcp --sport 1024: --dport 990 -m state --state NEW,ESTABLISHED -j ACCEPT

#
# Normal Port mode FTP+SSL data channel responses
#
-A INPUT -p tcp -m tcp --sport 1024: --dport 989 -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Passive mode FTP data channel responses
#
-A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m state --state NEW,ESTABLISHED -j ACCEPT

#
# ssh client
#
-A INPUT -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

#
# ssh server
#
-A INPUT -p tcp -m tcp --dport 22 -m state --state INVALID,NEW -j LOG --log-prefix "iptables(ssh/22 connection): " --log-level=info
-A INPUT -s 0.0.0.0/0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

COMMIT

 

 

§ 10. ランレベルの確認

 好み(というか用途)次第ですが、ランレベルは 3 のほうがよりセキュア(なはず)です。

  • ランレベルの確認
# runlevel
N 3

 

  • ランレベル変更

 一時的な変更は telinit コマンドで 。

# telinit 3

 

 永続的な設定は /etc/inittab に記述します。

# vi /etc/inittab
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

 最下行の 数字 の部分を変更します。

 

 

§ 11.  便利そうなパッケージの追加

 これも要件次第ですが、入っていると便利そうなパッケージを追加しておきます。 (インストール時のパッケージ選択によっては、すでに入っているかもしれません)

 ※ 3rd パーティレポジトリ(EPEL とか)からのパッケージ取得は、今回は割愛します。 また別途別の備忘録にする予定です。

  • man ページ関連
# yum install man.x86_64 man-pages.noarch man-pages-ja.noarch

 ※ 依存関係にある XZ Util (xz-4) も併せて導入されます。

 

  • vim enhanced
# yum install vim-enhanced.x86_64

 ※ 依存関係にある perl なども併せて導入されます。

 

  • mail コマンド
# yum install mailx

 

  • bind ユーティリティ (dig とか nslookup とか)
# yum install bind-utils

 

  • sysstat
# yum install sysstat

 

  • wget
# yum install wget

 

  • tcpdump
# yum install tcpdump

 ※ 依存関係にある libcap も併せて導入されます。

 

  • nkf
# yum install nkf

 

  • telnet
# yum install telnet

 

  • Base システムをまるっと入れてしまったりとか、
# yum groupinstall base

 

  • セキュリティ関連のツール  をまるっとインストールしたり、
# yum groupinstall security-tools

 

  • ネットワーク関連のツール をまるっとインストールしてしまうのもいいかも。
# yum groupinstall network-tools

 

 このあと、例えばサーバ用途であれば、監視 とか ログローテーション(保存期間) とか syslog の監査だとか、いろいろやらなくちゃですが、そちらについてはまた別の機会に備忘録したいと思います。

 今回の備忘録は以上となります。

 

 

 

Windows IPアドレス変更 バッチファイル

 Windows 7 のラップトップPCを使っているのですが、 IP アドレスを変更する機会が頻繁にあるため、バッチファイルに netsh コマンドを記述して手早く切り替えられるようにしています。

  • DHCP で IPアドレスを取得する場合
@echo off
setlocal

rem インターフェイス名称を変数(IFNAME)として定義。名称に空白(スペース)を含むため、""で囲みます。
set IFNAME="ローカル エリア接続"

rem IPアドレスを DHCP で取得。
netsh interface ipv4 set address name=%IFNAME% source=dhcp

rem DNSサーバーのアドレスをDHCPで取得。
netsh interface ipv4 set dns name=%IFNAME% source=dhcp

 インターフェイスの部分は、インターフェース名称 もしくは インデックス で指定します。 (名称は コマンドラインから ipconfig コマンド で確認するか、コントロールパネル のネットワークと共有センター > 「アダプターの設定の変更」 からも確認できます。  一つのLANポートしか持っていない日本語Windows 7 であれば上記の文字列のはず。 また、ちゃんと確認してないのですが、WIndows 10 からは別の文字列になったようです。)

 

 インデックスは、下記のコマンドで確認できます。

netsh interface ipv4 show interface

 下記の場合、「ローカルエリア接続」 の インデックス(Idx)は 「11」 になります。

 

 

  • 固定IP アドレスを設定するバッチファイル
@echo off
setlocal

rem インターフェース名称を変数(IFNAME)として定義。名称に空白(スペース)を含むため、""で囲みます。
set IFNAME="ローカル エリア接続"

rem IPアドレスを変数(IPADDR)として登録
set IPADDR=10.10.10.1

rem サブネットマスクを変数(MASK)として登録
set MASK=255.255.255.0

rem デフォルトゲートウェイを変数(GW)として登録
set GW=10.10.10.254

rem DNSサーバーを変数(DNS1,DNS2)として登録
set DNS1=10.10.10.10
set DNS2=10.10.10.11

rem IPアドレス、マスク、デフォルトGW を設定。
netsh interface ipv4 set address name=%IFNAME% source=static address=%IPADDR% mask=%MASK% gateway=%GW% gwmetric=1


rem DNSサーバーを設定(優先順位 1 に 変数 DNS1 を)(validate=no ; DNSサーバーの検証なし)
netsh interface ipv4 add dnsservers name=%IFNAME% address=%DNS1% index=1 validate=no


rem DNSサーバーを設定(優先順位 2 に 変数 DNS2 を)( validate=no ; DNSサーバーの検証なし)
netsh interface ipv4 add dnsservers name=%IFNAME% address=%DNS2% index=2 validate=no


 

 こんな具合で DHCP用や 各環境用のIP設定バッチファイルを作成し、一箇所のフォルダーに纏めてます。

 各ファイルを右クリックして、「管理者として実行」 すると反映されます。

 

 ちなみに、hosts ファイルへのショートカット

 C:\Windows\System32\drivers\etc\hosts

 もこのフォルダに作成してます。すぐ編集できるので、重宝です。 ^^)

 

 netsh コマンドについては Microsoft の MSDN netsh に詳しく解説があります。