#必要な機材
ath5k または ath9k ドライバに対応し、
かつアクセスポイント機能を持った無線 LAN デバイス。
#パッケージインストール
apt-get install hostapd iw isc-dhcp-server haveged
#ネットワークの構成
/etc/network/interfaces を編集する。
# lo インターフェイスを起動する。
auto lo
# 論理インターフェイス lo を
# IPv4 loopback インターフェイスとして定義する。
iface lo inet loopback
# wlan0 インターフェイスを起動する。
auto wlan0
# 論理インターフェイス wlan0 へ IPv4 固定アドレスを定義する。
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.0.0
gateway 192.168.0.1
dns-name-servers 8.8.8.8
wireless-mode master
/etc/NetworkManager/NetworkManager.conf
を編集する。
[keyfile]
unmanaged-devices=mac:無線LAN の MAC アドレス
/etc/default/ufw を編集する。
# IPv6 サポートを有効にする。
IPV6=yes
# 外部から入ってくる通信を破棄する。
DEFAULT_INPUT_POLICY="DROP"
# 外部へ出て行く通信の通過を許可する。
DEFAULT_OUTPUT_POLICY="ACCEPT"
# パケット転送を許可する。
DEFAULT_FORWARD_POLICY="ACCEPT"
DEFAULT_APPLICATION_POLICY="SKIP"
# ufw 自身が作成したチェーンのみを操作対象とする。
MANAGE_BUILTINS=no
# iptables のバックエンドとして /etc/ufw/sysctl.conf を使用する。
IPT_SYSCTL=/etc/ufw/sysctl.conf
# 拡張トラッキングモジュールの読込み設定
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"
/etc/ufw/sysctl.conf を編集する。
# パケット転送を有効にする。
net/ipv4/ip_forward=1
# 送信元アドレスの検証を全インターフェイスで有効にし、
# なりすまし攻撃を防止する。
net/ipv4/conf/default/rp_filter=1
net/ipv4/conf/all/rp_filter=1
# IP ソースルートパケットを受信しない。
net/ipv4/conf/default/accept_source_route=0
net/ipv4/conf/all/accept_source_route=0
net/ipv6/conf/default/accept_source_route=0
net/ipv6/conf/all/accept_source_route=0
# ICMP リダイレクトを無効化し、
# MITM 攻撃を防止する。
net/ipv4/conf/default/accept_redirects=0
net/ipv4/conf/all/accept_redirects=0
net/ipv6/conf/default/accept_redirects=0
net/ipv6/conf/all/accept_redirects=0
# 偽の ICMP エラーを無視する。
net/ipv4/icmp_echo_ignore_broadcasts=1
net/ipv4/icmp_ignore_bogus_error_responses=1
net/ipv4/icmp_echo_ignore_all=0
# 有り得ないパケットを記録しない。
net/ipv4/conf/default/log_martians=0
net/ipv4/conf/all/log_martians=0
# TCP / IP SYN クッキーを無効にする。
net/ipv4/tcp_syncookies=0
net/ipv4/tcp_sack=1
/etc/ufw/before.rules を編集する。
# filter テーブルの設定。
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# loopback インターフェイスにおける送受信を許可する。
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# 既存のパケットの受信・送信・転送を許可する。
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 不正なパケットを破棄する。
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
# 受信における icmp コードを受入れる。
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# 転送における icmp コードを受入れる。
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
# dhcp クライアントの動作を許可する。
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
# 上記以外の non-local パケットは破棄する。
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
# MULTICAST UPnP のサービス探査を許可する。
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT
COMMIT
# nat テーブルの設定。
*nat
# 送信時のアドレス変換を許可する。
:POSTROUTING ACCEPT [0:0]
# パケット転送先のインターフェイスを eth0 とする。
# アドレスを変換する。
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
/etc/dhcp/dhcpd.conf を編集する。
# リース確認の際に DNS の更新を試行しない。
ddns-update-style none;
# ネットワーク全体の共通設定。
option domain-name "example.org";
option domain-name-servers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
# dhcp ログメッセージを異なるログファイルへ送信する。
log-facility local7;
# サブネットの設定。
subnet 192.168.0.0 netmask 255.255.0.0{
# 192.168.0.10 から 192.168.0.20 の間で IP アドレスを発行する。
range 192.168.0.10 192.168.0.20;
option domain-name-servers 8.8.8.8;
option routers 192.168.0.1;
default-lease-time 600;
max-lease-time 7200;
}
/etc/default/isc-dhcp-server を編集する。
# isc-dhcp-server の設定ファイルとして
# /etc/dhcp/dhcpd.conf を使用する。
DHCPD_CONF=/etc/dhcp/dhcpd.conf
# /var/run/dhcpd.pid を
# isc-dhcp-server の PID ファイルとして使用する。
DHCPD_PID=/var/run/dhcpd.pid
# wlan0 インターフェイスを dhcp サーバとして使用し、
# dhcp リクエストを待ち受ける。
INTERFACES="wlan0"
#hostapd の設定
/etc/default/hostapd を編集する。
# /etc/hostapd/hostapd.conf を hostapd の設定ファイルとして使用する。
# hostapd はシステム起動時に起動する。
DAEMON_CONF="/etc/hostapd/hostapd.conf"
# -dd オプションを適用して hostapd を起動する。
# /var/log/syslog へ詳細なログメッセージを出力する。
DAEMON_OPTS="-dd"
/etc/hostapd/hostapd.conf を編集する。
雛形は /usr/share/doc/hostapd/examples/hostapd.conf.gz
に収められている。
# wlan0 インターフェイスをアクセスポイントとして使用する。
interface=wlan0
# nl80211 ドライバを使用する。
driver=nl80211
# syslog へ全モジュールのログを記録する。
logger_syslog=-1
# 記録するレベルは informational message までとする。
logger_syslog_level=2
# バックグラウンド動作していない場合に限り、
# 全モジュールのログを stdout へ出力する。
logger_stdout=-1
# 出力するレベルは informational message までとする。
logger_stdout_level=2
# /var/run/hostapd へ UNIX ドメインソケットを作成する。
ctrl_interface=/var/run/hostapd
# gid 0(root) へ制御インターフェイスへの接続を許可する。
ctrl_interface_group=0
# ssid 名。
ssid=任意の ssid 名
# 日本で使用可能な電波出力とチャンネルを使用する。
country_code=JP
# IEEE 802.11d を有効にする。
# country_code を通知し、規制に基づいて
# 電波出力とチャンネルを設定する。
ieee80211d=1
# IEEE 802.11g の帯域を使用する。
hw_mode=g
# チャンネル設定
channel=1
beacon_int=100
dtim_period=2
# 最大 3 台までの端末接続を許可する。
max_num_sta=3
rts_threshold=2347
fragm_threshold=2346
# 接続端末の MAC アドレスに基づく認証を無効にする。
macaddr_acl=0
# 認証アルゴリズムとして Shared Key Authentication を使用する。
auth_algs=1
# 完全な ssid を知らない場合でも接続を許可する。
ignore_broadcast_ssid=0
# wmm パラメータの設定。
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
# 送信失敗が頻発するか、何らかの原因で接続が失われると
# 端末の接続解除を実行する。
disassoc_low_ack=1
# HT PHY をサポートしない端末でも接続を許可する。
require_ht=0
eapol_key_index_workaround=0
eap_server=0
# アクセスポイント自身の IP アドレスを 127.0.0.1 とする。
own_ip_addr=127.0.0.1
# WPA2 を使用する。
wpa=2
# 接続認証に使用するパスワード。
wpa_passphrase=任意のパスワード
# 鍵管理アルゴリズムとして WPA-PSK を使用する。
wpa_key_mgmt=WPA-PSK
# RSN / WPA2 の共有鍵暗号化方式として CCMP を使用する。
rsn_pairwise=CCMP
#コマンド
##sudo lsmod | grep ath
無線 LAN デバイスが ath5k, ath9k に対応しているかどうかを確認する。
##iw list
無線 LAN デバイスがサポートしている機能を表示する。
##hostapd -d /etc/hostapd/hostapd.conf
設定ファイルをテストする。構成エラーがある場合にはエラーが表示され、
hostapd の実行を中断する。
エラーが無い場合は hostapd が起動され、コンソールへデバッグメッセージが表示される。
##service hostapd start
hostapd を起動する。
##service hostapd restart
hostapd を再起動する。
##service isc-dhcp-server restart
isc-dhcp-server を再起動する。
##ufw disable && ufw enable
ufw を再起動する。