рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рддрд╛рд░рд╛рдВрдХрди рдХрд╛ рдПрдХреАрдХрд░рдг

рд╣рдорд╛рд░реЗ рд╕рдВрдЧрдарди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХреБрдЫ рд╕реНрддрд░ рдкрд░, рдпрд╣ рд╡реАрдУрдЖрдИрдкреА рдЯреЗрд▓реАрдлреЛрдиреА рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Asterisk-PBX рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢рд░реНрдд рдХреЗ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЯрд░реНрдорд┐рдирд▓ рдЙрдкрдХрд░рдг рдХрд┐рдлрд╛рдпрддреА рдмрдЬрдЯ - DLink DPH-150 рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реАрдУрдЖрдИрдкреА рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ рдорд╛рдирдХ MS ActiveDirectory рд╕реНрдиреИрдк-рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Ubuntu 9.04 рдкрд░ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди 1.8.4 рдХреЛ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЦреЛрдЬ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рддрд╛рд░рд╛рдВрдХрди рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдирд╛, рдпрд╣ рдЖрдВрд╢рд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдВрд╢рд┐рдХ рдПрдХреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред Asterisk рдХреЛрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд AD рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдПрдХреАрдХрд░рдг рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЕрд▓реНрдк рдорд╛рддреНрд░рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд▓рдЧрд╛ред рдЪреБрдиреЗ рд╣реБрдП рдПрдХреАрдХрд░рдг рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдПрдХ рд╕рд░рд▓ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереА (рдЬреЛ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрд╛), рдЬрд┐рд╕реЗ рдореБрдХреБрдЯ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ 'users.conf' рдЙрддреНрдкрдиреНрди рдХреА рдереА, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рддрд╛рд░рд╛рдВрдХрди рд╕реЗрд╡рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддрд╛рд░рд╛рдВрдХрди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдкрд╛рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдХрд▓рд╛ред

User.conf рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛


рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ AD рдореЗрдВ рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдвреВрдВрдврддреА рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ 'рдлрд╝реЛрди' рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ stdout рдореЗрдВ users.conf рдХреЙрдиреНрдлрд╝рд┐рдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
User.conf рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрдиреЗрдХреНрдЯ рдХреА рдЧрдИ рд╣реИ:
#exec /etc/asterisk/scripts/users.pl 

User.pl рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реА:
 #!/usr/bin/perl # users.pl v1.1 # # Script to generate asterisk 'users.conf' file from Active Directory (LADP) on users which contains 'phone' attribute # # Using: # 1. Print users to STDOUT: # users.pl # # 2. Print users to file: # users.pl users_custom.conf use strict; use warnings; use Net::LDAP; use Lingua::Translit; ###################### ### BEGIN SETTINGS ### ###################### my $debug = 0; my $warning = 0; # name of Domain my $AD="domain"; # Domain name in format AD # for example mydomain.ru my $ADDC="DC=domain"; # user in Active directory # example: "CN=asterisk,CN=Users,$ADDC" my $ADUserBind="CN=asterisk,CN=Users,$ADDC"; my $ADpass="p@s$w0rd"; # base search tree # example "OU=Users,$ADDC" my $ADUsersSearchBase="OU=Organisation,$ADDC"; # Field in active directory where telephone number, display name, phone stored # "telephonenumber", "displayname", "mail" my $ADfieldTelephone="telephonenumber"; my $ADfieldFullName="displayname"; my $ADfieldMail="mail"; my $ADfieldUser="samaccountname"; # You need to create a dialplan in your asterisk server; my $dialplan="office"; # default settings my $user_static = "context = $dialplan call-limit = 100 type = friend registersip = no host = dynamic callgroup = 1 threewaycalling = no hasdirectory = no callwaiting = no hasmanager = no hasagent = no hassip = yes hasiax = yes nat=yes qualify=yes dtmfmode = rfc2833 insecure = no pickupgroup = 1 autoprov = no label = macaddress = linenumber = 1 LINEKEYS = 1 callcounter = yes disallow = all allow = ulaw,alaw,iLBC,h263,h263p "; ####################### ### END OF SETTINGS ### ####################### my $ldap; # get array DNS names of AD controllers my $dig = "dig -t srv _ldap._tcp.$AD" . '| grep -v "^;\|^$" | grep SRV | awk "{print \$8}"'; my @adControllers = `$dig`; # try connect to AD controllers foreach my $controller (@adControllers){ $controller =~ s/\n//; #INITIALIZING $ldap = Net::LDAP->new ( $controller ) or next; print STDERR "Connected to AD controller: $controller\n" if $debug > 0; last; } die "$@" unless $ldap; my $mesg = $ldap->bind ( dn=>$ADUserBind, password =>$ADpass); #PROCESSING - Displaying SEARCH Results # Accessing the data as if in a structure # ie Using the "as_struct" method my $ldapUsers = LDAPsearch ( $ADUsersSearchBase, "$ADfieldTelephone=*", [ $ADfieldFullName, $ADfieldTelephone, $ADfieldMail, $ADfieldUser ] )->as_struct; # translit RUS module. # GOST 7.79 RUS, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Russian my $tr = new Lingua::Translit("GOST 7.79 RUS"); my %hashPhones = (); my $phones = \%hashPhones; my @out; while ( my ($distinguishedName, $attrs) = each(%$ldapUsers) ) { # if not exist phone or name - skipping my $attrPhone = $attrs->{ "$ADfieldTelephone" } || next; my $attrUser = $attrs->{ "$ADfieldUser" } || next; my $attrName = $attrs->{ "$ADfieldFullName" } || next; my $encName = $tr->translit("@$attrName"); my $attrMail = $attrs->{ "$ADfieldMail" } || [""]; # check for duplicates phone number if ( $phones -> {"@$attrPhone"} ){ my $currUser = "@$attrName"; my $existUser = $phones -> {"@$attrPhone"}; print STDERR "@$attrPhone alredy exist! Exist:'$existUser' Current:'$currUser'... skipping - '[@$attrPhone] $currUser'\n" if $warning; next; } else { $phones -> {"@$attrPhone"} = "@$attrName"; } # password for SID = (telephonenumber without first digit) + 1 # example: phone=6232 pass=233 #$phsecret =sprintf("%03d",( substr("@$attrVal",1,100)+1)); my $phsecret = "@$attrPhone"; push (@out, "[@$attrPhone]\n" . "fullname = $encName\n" . "email = @$attrMail\n" . "username = @$attrUser\n" #. "mailbox = @$attrPhone\n" . "cid_number = @$attrPhone\n" . "vmsecret = $phsecret\n" . "secret = $phsecret\n" . "transfer = yes\n" . "$user_static\n" ); } # End of that DN # print to file if (@ARGV){ open FILE, "> $ARGV[0]" or die "Error create file '$ARGV[0]': $!"; print STDOUT "Printing to file '$ARGV[0]'"; print FILE @out; close FILE; print STDOUT " ...done!\n"; } # print to STDOUT else{ print @out; } exit 0; #OPERATION - Generating a SEARCH #$base, $searchString, $attrsArray sub LDAPsearch { my ($base, $searchString, $attrs) = @_; my $ret = $ldap->search ( base => $base, scope => "sub", filter => $searchString, attrs => $attrs ); LDAPerror("LDAPsearch", $ret) && die if( $ret->code ); return $ret; } sub LDAPerror { my ($from, $mesg) = @_; my $err = "[$from] - error" ."\nCode: " . $mesg->code ."\nError: " . $mesg->error . " (" . $mesg->error_name . ")" ."\nDescripton: " . $mesg->error_desc . ". " . $mesg->error_text; print STDERR $err if $warning; } 

рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреЗрд▓реАрдлреЛрди рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЧрдарди

рдореБрдЦреНрдп рдирдВрдмрд░рд┐рдВрдЧ рдкреНрд▓рд╛рди рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕.conf рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ, рдЕрдХреНрд╕рд░, рдХрд░реНрдордЪрд╛рд░реА рдПрдХ рд╡рд┐рднрд╛рдЧ рд╕реЗ рджреВрд╕рд░реЗ рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .conf config рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ AD рдореЗрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд OU ($ ADGroupsSearchBase рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рд╕рдореВрд╣ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рдореВрд╣ рдХрд╛ рдлрд╝реЛрди рдирдВрдмрд░ рд▓рд┐рдЦрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ "рд╕рджрд╕реНрдпреЛрдВ" рдореЗрдВ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЬреЛ рд╕рдореВрд╣ рдирдВрдмрд░ рдбрд╛рдпрд▓ рдХрд░рддреЗ рд╕рдордп рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ:
 #exec /etc/asterisk/scripts/exten.pl 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
 #!/usr/bin/perl # exten.pl v1.1 # # Script to generate extensions 'extensions_custom.conf' file, # from Active Directory (LADP) on groups in OU=ADGroupsSearchBase # which groups contains 'description' attribute # # Using: # 1. Print users to STDOUT: # exten.pl # # 2. Print users to file: # exten.pl exten_custom.conf use strict; use warnings; use Net::LDAP; use Lingua::Translit; ###################### ### BEGIN SETTINGS ### ###################### my $debug = 0; my $warning = 1; #name of Domain my $AD="domain"; #Domain name in format AD #for example mydomain.ru my $ADDC="DC=domain"; # user in Active directory # example: "CN=asterisk,CN=Users,$ADDC" my $ADUserBind="CN=asterisk,CN=Users,$ADDC"; my $ADpass="p@s$w0rd"; # base search Groups tree example "OU=Users,$ADDC" my $ADGroupsSearchBase = "OU=asterisk,OU=Groups,OU=Organisation,$ADDC"; # base search Users tree example "OU=Users,$ADDC" my $ADUsersSearchBase = "OU=Organisation,$ADDC"; # default email to send voicemail if email user not set my $defaultEmail = 'asterisk@Organisation.com'; # Field in active directory where telephone number, display name, phone stored ... # "telephonenumber", "displayname", "mail", ... my $ADfieldTelephone = "telephonenumber"; my $ADfieldMember = "member"; my $ADfieldMemberOf = "memberof"; my $ADfieldInfo = "info"; my $ADfieldDescription = "description"; my $ADfieldMail = "mail"; ####################### ### END OF SETTINGS ### ####################### my $ldap; # get array DNS names of AD controllers my @adControllers = `dig -t srv _ldap._tcp.$AD | grep -v '^;\\|^\$' | grep SRV | awk '{print \$8}'`; # try connect to AD controllers foreach my $controller (@adControllers){ $controller =~ s/\n//; #INITIALIZING $ldap = Net::LDAP->new ( $controller ) or next; print STDERR "Connected to AD controller: $controller\n" if $debug > 0; last; } die "$@" unless $ldap; my $mesg = $ldap->bind ( dn=>$ADUserBind, password =>$ADpass); #PROCESSING - Displaying SEARCH Results # Accessing the data as if in a structure # ie Using the "as_struct" method my $ldapGroups = LDAPsearch ( $ADGroupsSearchBase, "$ADfieldDescription=*", [ $ADfieldMember, $ADfieldDescription ] )->as_struct; # translit RUS module. # GOST 7.79 RUS, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Russian my $tr = new Lingua::Translit("GOST 7.79 RUS"); my $hash = (); # process each group in $ADGroupsSearchBase with phone while ( my ($distinguishedName, $groupAttrs) = each(%$ldapGroups) ) { print STDERR "Processing GROUP: [$distinguishedName]\n" if $debug > 1; my $attrMembers = $groupAttrs->{ $ADfieldMember } or next; my $desc = $groupAttrs->{ $ADfieldDescription } or next; my $groupNumber = "@$desc"; print STDERR "MEMBERS: @$attrMembers\nDESC: $groupNumber (Count=$#$attrMembers+1)" if $debug > 1; # process members in current group foreach my $member (@$attrMembers) { my $ldapMember = LDAPsearch( $ADUsersSearchBase, "$ADfieldTelephone=*", [ $ADfieldTelephone ] ) -> as_struct; my $memberAttrs = $ldapMember->{$member}; my $memberPhone = $memberAttrs->{$ADfieldTelephone}[0] or next; print STDERR "\nMEMBER: $member" if $debug > 1; print STDERR "\tPHONE:$memberPhone" if $debug > 1; if ($hash -> {$groupNumber}){ my $a = $hash -> {$groupNumber}; push @$a, $memberPhone; } else { $hash -> {$groupNumber} = [$memberPhone]; } } print STDERR "\n\n" if $debug > 1; } # End of that groups in $ADGroupsSearchBase my @out; while ( my ($groupPhone, $userPhones) = each (%$hash) ) { print STDERR "GROUP: $groupPhone\t PHONES: @$userPhones\n" if $debug > 1; #foreach my $userPhone (@$userPhones) { push (@out, "exten => $groupPhone,1,Dial(sip/" . join('&sip/', @$userPhones) . ")\n"); } # print to file if (@ARGV){ open FILE, "> $ARGV[0]" or die "Error create file '$ARGV[0]': $!"; print STDOUT "Printing to file '$ARGV[0]'"; print FILE @out; close FILE; print STDOUT " ...done!\n"; } # print to STDOUT else{ print @out; } exit 0; #OPERATION - Generating a SEARCH # $base, $searchString, $attrsArray sub LDAPsearch { my ($base, $searchString, $attrs) = @_; my $ret = $ldap->search ( base => $base, scope => "sub", filter => $searchString, attrs => $attrs ); LDAPerror("LDAPsearch", $ret) && die if( $ret->code ); return $ret; } sub LDAPerror { my ($from, $mesg) = @_; my $err = "[$from] - error" ."\nCode: " . $mesg->code ."\nError: " . $mesg->error . " (" . $mesg->error_name . ")" ."\nDescripton: " . $mesg->error_desc . ". " . $mesg->error_text; print STDERR $err if $warning; #print STDERR "\nServer error: " . $mesg->server_error if $debug; } 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
exten => 605,1,Dial(sip/157&sip/130&sip/444&sip/103&sip/119&sip/151&sip/117)
exten => 602,1,Dial(sip/122&sip/110&sip/106)
exten => 607,1,Dial(sip/444&sip/122&sip/110&sip/100&sip/101)
exten => 601,1,Dial(sip/155&sip/101)
exten => 606,1,Dial(sip/444&sip/110&sip/100&sip/101)


рд╕реНрд╡рдЪрд╛рд▓рди

AD рд╕реЗ рдирдП рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рддрд╛рд░рд╛рдВрдХрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:
 asterisk -rx reload 

рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдмреВрдЯ рдХреЗ рд╕рд╛рде, рдкреВрд░реА рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯреЗрд▓реАрдлреЛрди рд╕рддреНрд░ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рд╡рд┐рд╕реНрддрд╛рд░

рдпрджрд┐ рд▓реЗрдЦ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд░реВрдЪрд┐ рдХрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрд╕ рдХрдерд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
  1. рдСрдЯреЛрдкреНрд░реЛрд╡рд┐рдЬрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ DLINK DPH-150 рдлреЛрди рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВ
  2. AD рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ NTLM рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд╛рдпрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд▓рдлрд╝реЙрдХреНрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Apache2 рдХреЛ mod_ntlm рд╕реНрдХреНрд░реВ рдХрд░рдирд╛


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдкреБрдирд╢реНрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдХ рд╡рд┐рджреЗрд╢реА рднрд╛рд╖рд╛ рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдореБрдЦреНрдп рдЕрд░реНрде рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

UPD: рдЕрджреНрдпрддрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯред рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:
1. DNS рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЛрдореЗрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ред
2. рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдореЗрдВ stdout рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/In125359/


All Articles