Setting up NoCatAuth gateway

Posted on: Tue, 05/31/2005 - 17:02 By: dae

resource Authentication Gateway howto http://www.faqs.org/docs/Linux-HOWTO/Authe...CATGATEWAYSETUP

Linux Wireless Access Point howto http://oob.freeshell.org/nzwireless/LWAP-HOWTO.html

http://www.tldp.org/HOWTO/Authentication-Gateway-HOWTO/index.html

tip

ว๊าก ๆ set ตั้งนาน..

  1. อย่าลืม package Net::Netmask จาก CPAN
  2. อย่าลืมตั้ง permission ของ folder pgp
  3. อย่าลืมใส่ LocalNetwork ใน nocat.conf ของ authen ด้วย (ไม่มีใน doc นะ มันไม่ได้บอกไว้)
  4. file trusted.pgp ต้องเอาไปไว้ที่ nocat/gw/pgp นะ ไม่ใช่ที่ nocat/gw

สรุปวิธีตั้ง auth server ใน FC3

(เวลา install FC3 อย่า enable SELinux แต่ถ้า Enable ไปแล้วให้ไปเอาออกที่ /etc/selinux/config

  1. ลง NoCatAuth โดย 1.1 make PREFIX=/usr/local/nocat/authserv authserv (ระวัง มันจะหา gpg โดยใช้คำสั่ง which ให้ดูด้วยว่าเครื่องที่จะลงมันมี which อยู่หรือเปล่า FC3 ถ้าลงแบบ server มันจะไม่ลง which ให้) 1.2 make PREFIX=/usr/local/nocat/authserv pgpkey

  2. แก้ /etc/httpd/conf/httpd.conf โดยเพิ่มบรรทัด Include /usr/local/nocat/authserv/httpd.conf ไว้หลัง include มันจะได้ทำ Alias ของ /script

  3. Install Net::Netmask perl module โดย 3.1 untar Net-Netmask.xxxx 3.2 ใน Net-Netmask.xxxx directory พิมพ์ perl Makefile.pl 3.3 พิมพ์ make 3.4 พิมพ์ make install

  4. แก้ config ของ auth server แก้วิธี authenticate ให้ตรงกับที่จะใช้ เพิ่มบรรทัด LocalNetwork 192.168.1.0/24 ด้วย (สำคัญมาก)

  5. copy ไฟล์ /usr/local/nocat/authserv/trustedkeys.gpg ไปที่เครื่อง gateway โดยเอาไว้ที่ /usr/local/nocat/gw/pgp ด้วย

  6. แก้ permission ของ /usr/local/nocat/authserv/pgp ให้ owner เป็นคนเดียวกับที่รัน httpd

  7. restart httpd

---------- FOR FreeBSD --------------- อย่างแรกเลย Authen::Smb มันต้องแก้ #include < malloc.h > มันจะ error ใน FreeBSD ให้แก้เป็น #include < stdlib.h > แทน

แล้วก็ #include < sys/vfs.h> ก้ใช้ไม่ไ้ด ต้องเป็น #include < sys/statvfs.h> แทน

apache เวลาจะให้มันใช้ modssl ด้วยต้อง start ด้วย apachectl startssl ซึ่งมันจะถาม passphrase วิธีเอาออกก็คือ

  1.  Remove the encryption from the RSA private key (while preserving the original file):

      $ cp server.key server.key.org
      $ openssl rsa -in server.key.org -out server.key

  2. Make sure the server.key file is now only readable by root:

      $ chmod 400 server.key

ดูมาจาก http://www.modssl.org/docs/2.7/ssl_faq.html#ToC31

ต่อไปก็คือ.... เป็นไรไม่รู้ ถ้าให้ apache มัน start ตอน boot เครื่องเองเนี่ย มันจะหา gpg ไม่เจอ (คือตอน authen มันจะร้องด่าว่าหา gpg ไม่เจอ ดูได้จาก http-error.log) แต่ถ้า login เป็น root เข้าไป restart server แล้วมันจะหาเจอ ไม่รู้แก้ไงเหมือนกัน ก็เลย copy gpg ไปไว้ที่ /bin อีกที (ตอนแรกมันอยู่ที่ี /usr/local/bin) ก็ work เลย คงเกี่ยวกะ path ของแม่ง

โอ้วเย็ดดดดด

พยายามทำให้มันใช้ NIS.... ทำตั้งนาน.. ไม่ work ซะที ให้มันใช้ NIS ตรง ๆ (โดยใช้ package Net::Nis) ไม่ work

หันมาใช้ PAM ทดลองแล้วใช้ PAM ก็เหมือนจะ work ดี ลอง set PAM ให้ใช้ pam_permit.so ก็ work ใช้ได้.... แต่พอตั้งให้ให้จริง ๆ กลับไม่ work ไม่รู้เพราะอะไร.. ลองเอา Authen::PAM มา่ใช้ตรงๆ (คือเขียน perl ลองดู) ก็ใช้ได้ แต่พอใช้ใน apache กลับ ไม่ work

สุดท้ายใช้ Samba กะ Authen::Smb... ทีเดียว work เลย.. เฮ่อ...

แก้ไข Authentication server

หน้า web ต่าง ๆ ของ auth server มันมีผิด ๆ อยู่หน่อย อย่างแรกคือเวลา login ได้ถูกต้อง หน้า login_ok.html ที่แสดงออกมา link ที่ให้ click เผื่อเวลาที่ไม่ auto มันเป็น link ที่ผิด (มันใช้อันเดียวกับที่ใส่ไว้ใน content= 5;refresh ตรง header)

ให้ไปแก้ไฟล์ AuthService.pm ใน /usr/local/nocat/authserv/lib/NoCat/

แก้ sub ชื่อ sucess โดยเพิ่มตัวแปร redirect_click ให้ไว้

เวอร์ชั่นที่แก้แล้วจะเป็นยังงี้

sub success {
   my ( $self, $form, $args ) = @_;
   my %vars = ( $args ? %$args : $self->cgi->Vars );
   my @headers;

   my $redirect = $vars{redirect} || $self->{HomePage};

   # Add a refresh time of five seconds... unless one is already set.
   $vars{redirect_click} = $redirect;
   $vars{redirect} = $redirect = "5; URL=$redirect" unless $redirect =~ /^\d+;/o;

   push @headers, -Refresh => $redirect;
   # push @headers, -Cookie => $self->{Cookie} if $self->{Cookie};

   # Hit the g/w with the ticket first if there is one, get a 304,
   # then refresh the renewal link.    
   # push @headers, -Status => "302 Moved", -Location => $vars->{deliver_ticket}
   #    if $vars->{deliver_ticket};

   $vars{CGI} = $self->cgi->url;

   print $self->cgi->header( @headers ), $self->template( $form => \%vars );
}

แก้ไฟล์ login_ok.html ด้วย ตรงที่ click ให้เป็น

You've logged in. You will be redirected within five seconds. If not, click here to continue.

password เครื่องลูก ๆ ในชั้น 17

;sdgjo*(04286

ตอนที่ 2 การสร้าง authentication gateway

หลักจากสร้าง authentication server เสร็จแล้ว รายการต่อมาก็คือการสร้าง authentication gateway

  1. ลง Fedora Core3 (อีกแล้ว...) ตอนลงอย่าลืมเลือกให้มันลง dhcpd มาไว้ด้วย

  2. ตั้ง dhcpd server 2.1 สร้างไฟล์ /etc/dhcpd.conf ดังต่อไปนี้

ddns-update-style ad-hoc;
log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
 range 192.168.1.10 192.168.1.250;
 option subnet-mask 255.255.255.0;
 option routers 192.168.1.1;
 option broadcast-address 192.168.1.255;
 option domain-name-servers 161.200.93.11, 161.200.93.1;
 option domain-name "floor17.cp.eng.chula.ac.th";
}

subnet 161.200.92.0 netmask 255.255.254.0 {

}

subnet 161.200.92.0 เอาไว้บอกว่าเครื่องนี้ต่อกะ 2 network แล้วไม่ต้องยุ่งอะไรกะ network ของ 161.200.92.0/23

2.2 ตั้งให้ dhcpd รันทุกครั้งที่เปิดเครื่อง

chkconfig --level 345 dhcpd on
  1. ลง NoCatAuth โดย 3.0 ตัว script มันจะ detect firewall (iptables) แต่ว่า script มันเขียนไว้ผิด เราต้องไปแก้ script ที่มันเขียนก่อน

ให้แก้ไขไฟล์ bin/detect-fw.sh

ดูตรง

# Do we have iptables *and* are running Linux 2.4?
#
elif which iptables >/dev/null 2>&1 && \
 test X"`uname -sr | cut -d. -f-2`" = X"Linux 2.4"; then
   FIREWALL=iptables
   FW_BIN=iptables

ให้แก้ตรง Linux 2.4 เป็น Linux 2.6 (เพราะ Fedora Core3 มันใช้ 2.6)

3.1 make PREFIX=/usr/lolcal/nocat/gw gateway 3.2 แก้ไขไฟล์ nocat.conf โดยเพิ่ม/แก้ บรรทัดต่อไปนี้

AuthServiceAddr auth.cp.eng.chula.ac.th
ExternalDevice  eth0
InternalDevice  eth1
MembersOnly 1

3.3 copy ไฟล์ trustedkeys.gpg จากเครื่อง auth มาไว้ที่ /usr/local/nocat/gw/pgp

  1. ทำให้ service วิ่งได้เองเวลา reboot ให้แก้ไฟล์ /etc/rc.d/rc.local โดยเพิ่ม
/usr/local/nocat/gw/bin/gateway

อ้อ ๆ อย่าลืมแก้พวก htdocs ต่าง ๆ ใน auth server ให้ตรงกับที่ต้องการ (ไม่จำเป็น)

เช่นแก้ชื่ือให้เป็น CP Network, ใส่คำเตือน, etc.