Install Samba 4 AD DC

Published: by Creative Commons Licence

GOAL : Running Samba 4 AD DC

RUNNING MODE ROOT

Install Depedency SAMBA

yum install -y attr bind-utils docbook-style-xsl gcc gdb krb5-workstation libsemanage-python libxslt perl perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Test-Base wget \ 
pkgconfig policycoreutils-python python2-crypto gnutls-devel libattr-devel keyutils-libs-devel libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel lmdb-devel jansson-devel gpgme-devel pygpgme libarchive-devel python3 python3-libs python3-pip python3-setuptools \
python36-devel avahi-libs cups-libs python36-dns.noarch

Install Depedency Packaging

yum install -y rpm-build ruby ruby-devel rubygems ruby-libs

Dowload SAMBA AD DC

wget -c https://download.samba.org/pub/samba/stable/samba-4.9.13.tar.gz
tar xvf samba-4.9.13.tar.gz

Install FPM

gem install fpm

Compile SAMBA AD DC

cd samba-4.9.13
   ./configure \
     --prefix=/usr \
     --localstatedir=/var \
     --with-configdir=/etc/samba \
     --libdir=/usr/lib64 \
     --with-modulesdir=/usr/lib64/samba \
     --with-pammodulesdir=/lib64/security \
     --with-lockdir=/var/lib/samba \
     --with-logfilebase=/var/log/samba \
     --with-piddir=/run/samba \
     --with-privatedir=/etc/samba \
     --enable-cups \
     --with-acl-support \
     --with-ads \
     --with-automount \
     --enable-fhs \
     --with-pam \
     --with-quotas \
     --with-shared-modules=idmap_rid,idmap_ad,idmap_hash,idmap_adex \
     --with-syslog \
     --with-utmp \
    --with-dnsupdate 
  make
  mkdir -p ~/work
  mkdir -p ~/work/usr/lib/systemd/system/
  make install install DESTDIR=~/work

Generate Service Systemd

  echo "
  [Unit]
  Description=Samba AD Daemon
  Wants=network-online.target
  After=network.target network-online.target rsyslog.service

  [Service]
  Type=forking
  PIDFile=/run/samba/samba.pid
  LimitNOFILE=16384
  ExecStart=/usr/sbin/samba --daemon
  ExecReload=/bin/kill -HUP $MAINPID

  [Install]
  WantedBy=multi-user.target
  "> ~/work/usr/lib/systemd/system/samba.service

Reload Daemon

systemctl daemon-reload

Remove Package All About SAMBA

rpm -qa| grep samba | xargs rpm -e --nodeps
rpm -qa| grep tdb-tools | xargs rpm -e --nodeps
rpm -qa| grep libwbclient | xargs rpm -e --nodeps
rpm -qa| grep libsmbclient | xargs rpm -e --nodeps
[ -f /etc/samba/smb.conf ] && rm /etc/samba/smb.conf || echo "There is no file";

Generate Package SAMBA AD DC

/usr/local/bin/fpm  \
    -d "pam" \
    -d "gnutls" \
    -d "cups-libs" \
    -d "acl" \
    -d "attr" \
    -d "python3" \
    -d "lmdb" \
    -d "lmdb-devel" \
    -s dir \
    -t rpm \
    -S "samba4-ad-dc-4.9.13.el7.x86_64.rpm" \
    -m "Dwiyan Galuh W" \
    -n "" \
    --license "Breeware License -  wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp" \
    --url "https://roomit.tech" \
    --description "This Packages is SAMBA 4 Active Directory Domain Controller, We can manage all activities using samba-tool." \
    -a "x86_64" \
    --vendor "dwiyan@roomit.tech" \
    -v 4.9.13 \
    -C ~/work  \
    -p samba4-ad-dc-4.9.13.el7.x86_64.rpm

Install RPM

rpm -i samba4-ad-dc-4.9.13.el7.x86_64.rpm

Provisioning SAMBA AD DC

mv /etc/krb5.conf /etc/krb5.conf.org    
samba-tool domain provision --use-rfc2307 --interactive

Config Global

cat /etc/samba/smb.conf

[global]
	binddns dir = /etc/samba/bind-dns
	cache directory = /etc/samba/cache
	dns forwarder = 8.8.8.8
	lock directory = /etc/samba
	netbios name = AD
	private dir = /etc/samba/private
	realm = ROOMIT.COM
	server role = active directory domain controller
	state directory = /etc/samba/state
	workgroup = ROOMIT
	idmap_ldb:use rfc2307 = yes
        client ldap sasl wrapping = sign
        ldap server require strong auth = no
        tls enabled  = yes
        tls keyfile  = /etc/samba/private/tls/roomitKey.pem
        tls certfile = /etc/samba/private/tls/roomitCert.pem
        tls cafile   = /etc/samba/private/tls/roomitIntermediate.pem
        winbind use default domain = yes
        template homedir = /home/%U
        template shell   = /bin/bash
        ntlm auth = mschapv2-and-ntlmv2-only



[netlogon]
	path = /etc/samba/state/sysvol/roomit.tech/scripts
	read only = No

[sysvol]
	path = /etc/samba/state/sysvol
	read only = No

Copy Kerberos Config

cp /etc/samba/krb5.conf /etc/samba

content krb5.conf:

[libdefaults]
	default_realm = ROOMIT.COM
	dns_lookup_realm = false
	dns_lookup_kdc = true

checking:

klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ROOMIT.COM

Valid starting       Expires              Service principal
03/11/2020 09:18:30  03/11/2020 19:18:30  krbtgt/ROOMIT.COM@ROOMIT.COM
	renew until 03/12/2020 09:18:27

Start Service SAMBA AD DC

systemctl start samba 

Check Service UP

ss -tulpn

tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      736/samba: conn[lda 
tcp        0      0 0.0.0.0:49152           0.0.0.0:*               LISTEN      10784/samba: conn[r 
tcp        0      0 0.0.0.0:49153           0.0.0.0:*               LISTEN      31489/samba: task[d 
tcp        0      0 0.0.0.0:49154           0.0.0.0:*               LISTEN      10784/samba: conn[r 
tcp        0      0 0.0.0.0:3268            0.0.0.0:*               LISTEN      736/samba: conn[lda 
tcp        0      0 0.0.0.0:3269            0.0.0.0:*               LISTEN      736/samba: conn[lda 
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      31493/samba: task[l 
tcp        0      0 0.0.0.0:135             0.0.0.0:*               LISTEN      10784/samba: conn[r 
tcp        0      0 0.0.0.0:464             0.0.0.0:*               LISTEN      31495/samba: conn[k 
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      31502/samba: conn[d 
tcp        0      0 0.0.0.0:88              0.0.0.0:*               LISTEN      31495/samba: conn[k 
tcp6       0      0 :::636                  :::*                    LISTEN      736/samba: conn[lda 
tcp6       0      0 :::49152                :::*                    LISTEN      10784/samba: conn[r 
tcp6       0      0 :::49153                :::*                    LISTEN      10784/samba: conn[r 
tcp6       0      0 :::49154                :::*                    LISTEN      10784/samba: conn[r 
tcp6       0      0 :::3268                 :::*                    LISTEN      736/samba: conn[lda 
tcp6       0      0 :::3269                 :::*                    LISTEN      736/samba: conn[lda 
tcp6       0      0 :::389                  :::*                    LISTEN      736/samba: conn[lda 
tcp6       0      0 :::135                  :::*                    LISTEN      10784/samba: conn[r 
tcp6       0      0 :::464                  :::*                    LISTEN      31495/samba: conn[k 
tcp6       0      0 :::53                   :::*                    LISTEN      31502/samba: conn[d 
tcp6       0      0 :::88                   :::*                    LISTEN      31495/samba: conn[k 
udp        0      0 0.0.0.0:53              0.0.0.0:*                           31502/samba: conn[d 
udp        0      0 10.69.16.130:88         0.0.0.0:*                           31495/samba: conn[k 
udp        0      0 0.0.0.0:88              0.0.0.0:*                           31495/samba: conn[k 
udp        0      0 10.69.16.130:137        0.0.0.0:*                           31491/samba: task[n 
udp        0      0 10.69.16.255:137        0.0.0.0:*                           31491/samba: task[n 
udp        0      0 0.0.0.0:137             0.0.0.0:*                           31491/samba: task[n 
udp        0      0 10.69.16.130:138        0.0.0.0:*                           31491/samba: task[n 
udp        0      0 10.69.16.255:138        0.0.0.0:*                           31491/samba: task[n 
udp        0      0 0.0.0.0:138             0.0.0.0:*                           31491/samba: task[n 
udp        0      0 10.69.16.130:389        0.0.0.0:*                           31494/samba: task[c 
udp        0      0 0.0.0.0:389             0.0.0.0:*                           31494/samba: task[c 
udp        0      0 10.69.16.130:464        0.0.0.0:*                           31495/samba: conn[k 
udp        0      0 0.0.0.0:464             0.0.0.0:*                           31495/samba: conn[k 
udp6       0      0 :::53                   :::*                                31502/samba: conn[d 
udp6       0      0 :::88                   :::*                                31495/samba: conn[k 
udp6       0      0 :::389                  :::*                                31494/samba: task[c 
udp6       0      0 :::464                  :::*                                31495/samba: conn[k 

Test Query

Check Domain Level

 samba-tool domain level show 

Add User

 samba-tool user create foo.bar

List User

 samba-tool user list | grep foo.bar

Iptables

add in /etc/sysconfig/iptables

# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

##### Allow STATE RELATED AND ESTABLISHED ######
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

##### Allow Income ICMP Only From Vlan Operational #####
-A INPUT -s 10.69.16.0/24 -p icmp -j ACCEPT

##### Allow Income Local Loop ######
-A INPUT -i lo -j ACCEPT

##### Allow Income SSH Only VLAN Admin #########
-A INPUT -s 10.69.5.0/24,10.69.16.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

##### Allow Income MONIT ####
-A INPUT -s 10.69.5.0/24,10.69.16.0/24 -p tcp -m state --state NEW -m tcp --dport 2812 -j ACCEPT

##### Allow Income Rest API Shell ####
#-A INPUT -s 10.69.5.0/24 -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

#### Allow Income SNMP ####
#-A INPUT -s 10.69.16.91 -d 10.69.16.130 -p udp -m udp --dport 161 -j ACCEPT

#### Allow Income NRPE ####
-A INPUT -s 10.69.16.91 -d 10.69.16.130 -p tcp -m tcp --dport 5666 -j ACCEPT

##### Allow Income LDAP and LDAPS AD TCP/UDP ########
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 389 -j ACCEPT
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 636 -j ACCEPT
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 389 -j ACCEPT

##### Allow Income HTTP ######
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 80 -j ACCEPT

##### Allow Income HTTPS #####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 443 -j ACCEPT

##### Allow Income DNS TCP/UDP #####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 53 -j ACCEPT
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 53 -j ACCEPT

##### Allow Income Kerberos TCP/UDP ####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 88 -j ACCEPT
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 88 -j ACCEPT

##### Allow Income Kerberos KPASSWD ####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 464 -j ACCEPT
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 464 -j ACCEPT

##### Allow Income NTP #####
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 123 -j ACCEPT

##### Allow Income End Point Mapper (DCE/RPC Locator Service) ######
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 135 -j ACCEPT

##### Allow Income NetBIOS Name Service   ######
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 137 -j ACCEPT

##### Allow Income NetBIOS Datagram ######
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 138 -j ACCEPT

##### Allow Income NetBIOS Session  #####
-A INPUT  -p udp -m state --state NEW,RELATED,ESTABLISHED -m udp --dport 139 -j ACCEPT

##### Allow Income Samba Over TCP ####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 445 -j ACCEPT

##### Allow Global Catalog / SSL ####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 3268 -j ACCEPT
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 3269 -j ACCEPT

##### Allow Dynamic RPC Ports #####
-A INPUT  -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp -m multiport --dports 49152:65535  -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT