UFW Uncomplicated Firewall, iptables güvenlik duvarı yapılandırmasını basitleştirilmesine yöneliktir. iptables sağlam ve aynı zamanda esnek bir araçtır ancak yeni başlayanlar ve orta düzey Linux kullanıcıları için kullanımı zor olabilir. Eğer ağ güvenliğinizi yapılandırmak için hangi aracı kullanacağınızdan emin değilseniz, UFW sizin için en doğru seçim.

Bu eğitimde Ubuntu 14.04 sunucu üzerine UFW güvenlik duvarı nasıl kurulur anlatacağız.

Önkoşullar

Eğitime başlamadan önce, Eğer Ubuntu sunucunuza root olarak bağlandıysanız sudo komutunu kullanmanıza gerek yoktur.

UFW, Ubuntu kurulumunda varsayılan olarak yüklenen bir araçtır. Ancak daha önce kaldırılmış ise öncelikle kurulumu tekrar gerçekleştirmek gerekiyor, bunun için aşağıdaki komutu kullanabilirsiniz.

sudo apt-get install UFW

UFW ile IPv6 yapılandırılması

Ubuntu sunucunuzun IPv6 desteklemek üzere yapılandırılmış olduğundan emin olun. Bunu kontrol etmek için nano editörünü kullanacağız:

sudo nano /etc/default/UFW

Karşınıza gelen sayfada “IPv6=” satırını bulun ve “IPv6=no” şeklinde ise aşağıdaki gibi değiştirin

IPV6=yes

ve kaydederek çıkış yapın. UFW etkinleştirildiğinde, IPv4 ve IPv6 güvenlik duvarı kurallarını yapılandırabilirsiniz.

UFW Durum ve Kural Kontrolü

Bu komutla UFW durumunu kontrol edebilirsiniz.

sudo UFW status verbose

Karşınıza böyle bir ekran geliyorsa eğer, bunun nedeni UFW güvenlik duvarının varsayılan olarak pasif ayarlı olmasıdır.

Output:
Status: inactive

UFW güvenlik duvarı aktif ise, tüm kuralları listeleyen detaylı bir durum ekranıyla karşılaşırsınız. Örneğin SSH 22 portuna gelen isteklere izin verilmiş ise aşağıdaki gibi bir ekran karşınıza çıkacaktır.

UFW güvenlik duvarının yapılandırmasını listelemek için bu komutu kullanılır.

Output:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

UFW etkinleştirmeden önce, SSH portunun gelen bağlantılara izin verilecek şekilde yapılandırılmış olduğundan emin olmalısınız, aksi taktirde güvenlik duvarını aktif ettiğinizde SSH kuralı tanımlanmadıysa sunucunuza SSH üzerinden bağlanamazsınız. 

Şimdi UFW varsayılan ayarlarını isteğimize göre düzenlemeye başlayabiliriz.

Standart Kurulum

UFW varsayılan olarak gelen istekleri engellemek ve giden tüm isteklere ise izin verecek şekilde yapılandırılmıştır. Bu nedenle sunucunuzda bulunan herhangi bir uygulamaya erişim mümkün olmayacaktır.

Bu yazımızı takip ederek UFW güvenlik duvarınızın varsayılan ayarlarını düzenleyebilirsiniz.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Yukarıdaki komutlar sunucunuza dışarıdan gelen istekleri reddetmek ve sunucunuz üzerinden giden isteklere izin vermek için kullanılan yapılandırma komutlarıdır. Bu şekilde bir yapılandırma kişisel bir bilgisayar kullanımına uygun bir yapılandırmadır. Ancak sunucuların genellikle dışarıdan gelen isteklere yanıt verecek şekilde yapılandırılması gerektiğinden, UFW güvenlik duvarımızı amacımıza göre yapılandırmalıyız.

SSH bağlantılarına izin vermek

UFW güvenlik duvarımız etkinleştirildiğinde ayarlarının varsayılan olarak gelen tüm istekleri reddetmek üzere ayarlandığını biliyoruz, bu nedenle öncelikle sunucunuza uzaktan bağlanmak ve sunucunuzu yönetmek için SSH bağlantılarına izin vermeniz gerekmektedir. Bunun için yapmamız gereken SSH portu üzerinden gelen bağlantı isteklerine izin verecek şekilde yapılandırıp, kurallımızı oluşturacağız. 

Sunucunuza gelen SSH bağlantılarına izin vermek için UFW yapılandırılmasında aşağıdaki komutu kullanmanız gerekmektedir.

sudo ufw allow ssh

Bu komut UFW güvenlik duvarında SSH portu olan 22 numaralı port üzerinden gelen tüm isteklere izin verecek şekilde yapılandırmanızı sağlayacak kuralı oluşturur ve bu yapılandırma kurallarını /etc/services dosyası içerisine yazar.

Aşağıdaki örnekte görüldüğü gibi dilerseniz komutu servis ismi yerine port numarasını belirterek de kullanabilirsiniz, her iki şekilde de aynı kuralı oluşturacaktır.

sudo ufw allow 22

İsterseniz SSH servisine farklı bir port üzerinden de bağlantı erişimine izin verebilirsiniz. Eğer SSH servisinizi 2222 portunu kullanmak üzere konfigüre ettiyseniz, aşağıdaki örnekte olduğu gibi SSH servisinizi 2222 portu üzerinden erişime açabilirsiniz. 

sudo ufw allow 2222

Artık güvenlik duvarımızı SSH bağlantılarına izin verecek şekilde yapılandırdık, şimdi güvenlik duvarımızı aktif edebiliriz.

UFW Güvenlik Duvarını Etkinleştirmek

UFW güvenlik duvarını aktif etmek için aşağıdaki komut kullanılır.

sudo ufw enable

Ekrana gelen soruyu “y” diyerek geçiyoruz. 

Güvenlik duvarınız artık etkin SSH 22 portunuz ve UFW aktif. Şimdi UFW güvenlik duvarınızın durum ve yapılandırma kurallarını listelemek için sudo ufw status verbose komutunu kullanabiliriz.


Şimdi sizin için gerekli olan hizmetleri yapılandırma ile ilgili birkaç örnek daha göstereceğiz. Eğer tüm gelen bağlantılara izin vermek istediğiniz bir servis bunları uygulayabilirsiniz.

HTTP port 80

Sunucunuzu şifresiz web sunucusu olarak yapılandırmak için HTTP portunuza gelen isteklere izin vermelisiniz. 

sudo ufw allow http

Bunun yerine HTTP port numarası 80’i de kullanabilirsiniz.

sudo ufw allow 80

HTTPS port 443

Sunucunuzu şifreli web sunucusu olarak yapılandırmak istiyorsanız HTTPS portuna gelen isteklere izin vermelisiniz.

sudo ufw allow https

Bunun yerine HTTPS protokolü port numarası 443’ü kullanabilirsiniz.

sudo ufw allow 443

FTP-port 21

Şifresiz dosya transferleri için kullanılan FTP portunuza gelen isteklere bu komutla izin verebilirsiniz.

sudo ufw allow ftp

Bunun yerine port numarasını 21 kullanmak istiyorsanız, bu komutu kullanın.

sudo ufw allow 21/tcp

Belirli Port aralıklarına izin vermek

Bazı uygulamalar birden çok port aralığını kullanır. UFW güvenlik duvarınızı belirli port aralıklarına izin verecek şekilde yapılandırabilirsiniz. Bunun için port aralıklarını ve protokolü belirtmelisiniz.

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Belirli IP Adreslerine izin vermek

Sunucunuza belirli bir IP adresinden gelen isteklere izin vermek için aşağıdaki komutu kullanabilirsiniz.

sudo ufw allow from 15.15.15.51


UFW güvenlik duvarınızı yapılandırmak için kuralları nasıl oluşturulacağını öğrendik. Şimdi oluşturulan kuralları nasıl sileceğinize göz atalım.

Kural Silmek

Güvenlik duvarı kurallarını nasıl silineceği bilmek, nasıl oluşturulması gerektiği kadar önemlidir. Kural oluştururken 2 farklı şekilde de oluşturabiliyorduk, silme işlemi de yine iki farklı şekilde yapılabilir. 

Kural Numarası ile Kural Silmek

Eğer güvenlik duvarınızdan kural silmek istiyorsanız bunun için öncelikle status numbered komutuyla kuralların bir listesini almalısınız. Aşağıda görüldüğü gibi her bir kuralın yanında numaralar görülmektedir.

sudo ufw status numbered

Numbered Output:
Status: active
To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Örneğin [2] numaralı kuralı silmeye karar verdik, bunun için aşağıdaki komutu kullanabilirsiniz.

sudo ufw delete 2

Kuralı silmek istediğinizden eminmisiniz sorusuna “y” yanıtını vererek kuralı siliyoruz.

Bir diğer silme yöntemi ise protokol adı ya da port numarası ile silme yöntemidir.

sudo ufw delete allow http

sudo ufw delete allow 80

Eğer herhangi bir nedenle UFW güvenlik duvarını kapatmanız gerekiyorsa aşağıdaki komutla UFW’yi devre dışı bırakabilirsiniz.

sudo ufw disable

Tekrar aktif etmek istediğinizde, UFW ile oluşturulan tüm kurallarınız yeniden aktif olacaktır. Bunun için sudo UFW enable komutunu kullanmanız yeterli olacaktır.

Herhangi bir kural oluşturduğunuzda kuralın geçerli olabilmesi için UFW güvenlik duvarının yeniden başlatılması gerekebilir, bunun için aşağıdaki komutu kullanmalısınız.

sudo ufw reset

Sonuç

Güvenlik duvarınız artık hazır, SSH ve HTTP bağlantılarına izin verecek şekilde yapılandırıldı. Bundan sonra UFW güvenlik duvarınızı nasıl yapılandırabileceğinizi ve sunucunuzu nasıl daha güvenli hale getirebileceğinizi öğrendiniz. 

Kaynak: https://siterobot.io

DAHA AYRINTILI BILGILER:

How do I add a comment for the rule?

Use the following syntax
$ sudo ufw rule comment 'my cool comment here'
Open port 53 and write a comment about rule too:
ufw allow 53 comment 'open tcp and udp port 53 for dns'
Another example:
$ sudo ufw allow proto tcp from any to any port 80,443 comment 'my cool web app ports'
OR
$ sudo ufw allow proto tcp from any to 10.8.0.1 port 22 'SSHD port 22 for private lan'

Enable the UFW based firewall

Now you have default policy and ssh port allowed. It is safe to start enable the firewall, enter:
$ sudo ufw enable
Sample outputs:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Once enabled, the firewall runs after reboots too.

Disable the UFW based firewall

If you need to stop the firewall and disable on system startup, enter:
$ sudo ufw disable
Sample outputs:

Firewall stopped and disabled on system startup

How do I check the status of my rules?

Use the status command:
$ sudo ufw status
$ sudo ufw status verbose

Sample outputs:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
 
 
To                         Action      From
--                         ------      ----
192.168.1.10 443/tcp       ALLOW       Anywhere                  
192.168.1.10 22/tcp        ALLOW       Anywhere

Adding more rules (open ports and allow IPs)

The syntax is as follows to open tcp port 22 and 443:
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Open UDP/1194 (OpenVPN) server:
$ sudo ufw allow 1194/udp
Open port 25 (smtpd/email server):
$ sudo ufw allow 25

Allowing port ranges

You can allow port ranges too say, tcp and udp 3000 to 5000:
$ sudo ufw allow 3000:5000/tcp
$ sudo ufw allow 3000:5000/udp

Make sure you allow connections from an IP address called 1.2.3.4, enter:
$ sudo ufw allow from 1.2.3.4
Make sure you allow connections from an IP address called 1.2.3.4 to our port 22, enter:
$ sudo ufw allow from 1.2.3.4 to any port 22 proto tcp
OR (dest 222.222.222.222 port 22)
$ sudo ufw allow from 1.2.3.4 to 222.222.222.222 port 22 proto tcp

How to allow incoming HTTPS traffic (open port 443)

$ sudo ufw allow https comment 'Allow all to access Nginx server'
## allow only from 139.1.1.1 ##
$ sudo ufw allow from 139.1.1.1 to any port 443
## allow only from 203.11.11.2/29 ##
$ sudo ufw allow from 203.11.11.2/29 to any port 443

How to allow incoming HTTP traffic (open port 80)

$ sudo ufw allow http comment 'Allow all to access Apache server'
## allow only from 139.1.1.1 ##
$ sudo ufw allow from 139.1.1.1 to any port 80
## allow only from 203.11.11.2/29 ##
$ sudo ufw allow from 203.11.11.2/29 to any port 80

How to allow incoming MySQL/MariaDB traffic (open port 3306)

Allow access to MySQL/MariaDB port 3306 from selected subnet only (see MySQL/MariaDB remote access tutorial):
$ sudo ufw allow from 192.168.1.0/24 to any port 3306
Allow access to MySQL/MariaDB port 3306 Apache server only:
$ sudo ufw allow from 202.54.1.1 to any port 3306

How to allow incoming PostgreSQL traffic (open port 5432)

Allow access to PostgreSQL port 5432 from selected subnet only (see PostgreSQL remote access tutorial):
$ sudo ufw allow from 192.168.1.0/24 to any port 5432
Allow access to PostgreSQL port 5432 Apache server only:
$ sudo ufw allow from 202.54.1.1 to any port 5432

How to allow incoming SMTPD/Postfix/Sendmail (mail server) traffic (open port 25)

$ sudo ufw allow 25
$ sudo ufw allow smtp

How to allow incoming IMAP/IMAPS

$ sudo ufw allow 143
$ sudo ufw allow 993

How to allow incoming POP3/POP3S

$ sudo ufw allow 110
$ sudo ufw allow 995

Denying access to port or connections (close ports and block IPs)

The syntax is as follows to deny access (i.e. simply ignoring access to port 443) to port tcp port 443:
$ sudo ufw deny 443/tcp
Make sure you deny all connections from an IP address called 1.2.3.4, enter:
$ sudo ufw deny from 1.2.3.4
Make sure you deny all connections from an IP/subnet called 123.45.67.89/24, enter:
$ sudo ufw deny from 123.45.67.89/24
Make sure you deny access to 1.2.3.4 (say hackers IP) on port 22:
$ sudo ufw deny from 1.2.3.4 to any port 22 proto tcp

Rejecting access to port or connections (reject and let user know they are blocked by firewall)

The deny syntax simply ignores traffic. If you want let the sender know when traffic is being denied, rather than simply ignoring it, use reject syntax:
$ sudo ufw reject in smtp
$ sudo ufw reject out smtp
$ sudo sudo ufw reject 1194 comment 'No more vpn traffic'
$ sudo ufw reject 23 comment 'Unencrypted port not allowed'

If somebody try to connect to port 23 they will get reject message as follows:

telnet: Unable to connect to remote host: Connection refused

Deleting the UFW firewall rules

Now you know how to add, deny, and list the firewall rules. It is time to delete unwanted rules. There are two options to deleting rules. The first syntax is:
$ sudo ufw delete {rule-here}
In this example, delete HTTPS (tcp port 443) traffic rule,
$ sudo ufw delete allow 443
If you no longer wished to allow smptd/email (port 25) traffic, execute:
$ sudo ufw delete allow 25
The second option is to list list all of the current rules in a numbered list format:
$ sudo ufw status numbered
Sample outputs:

Status: active
 
     To                         Action      From
     --                         ------      ----
[ 1] 10.8.0.1 22/tcp            ALLOW IN    Anywhere                  
[ 2] Anywhere                   DENY IN     123.45.67.0/24            
[ 3] 22/tcp                     DENY IN     1.2.3.4

To delete 2nd rule ("ufw deny from 123.45.67.89/24"), you type the command:
$ sudo ufw delete 2
Sample outputs:

Deleting:
 deny from 123.45.67.0/24
Proceed with operation (y|n)? y
Rule deleted

How do I reset the firewall?

The syntax is as follows to reset ufw rules to their factory default settings and in an inactive mode, run:
$ sudo ufw reset
Sample outputs:

Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20160801_121710'
Backing up 'after.rules' to '/etc/ufw/after.rules.20160801_121710'
Backing up 'before.rules' to '/etc/ufw/before.rules.20160801_121710'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20160801_121710'
Backing up 'user.rules' to '/etc/ufw/user.rules.20160801_121710'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20160801_121710'

How do I reload the firewall?

The syntax is as follows to reload firewall:
$ sudo ufw reload
When you edit UFW' configuration file, you need to run reload command. For example, you can edit /etc/ufw/before.rules, enter:
$ sudo nano /etc/ufw/before.rules
OR
$ sudo vi /etc/ufw/before.rules
To allow all traffic fro eth0 to eth0 (add after line that read as "# End required lines"), enter:

# allow all on eth0
-A ufw-before-input -i eth0 -j ACCEPT
-A ufw-before-output -o eth0 -j ACCEPT

Save and close the file. Reload the firwall:
$ sudo ufw reload

How do I see the firewall logs?

By default all UFW entries are logged into /var/log/ufw.log file:
$ sudo more /var/log/ufw.log
$ sudo tail -f /var/log/ufw.log

Sample outputs:

Aug  1 12:09:48 server2 kernel: [15727.245115] [UFW BLOCK] IN=br1 OUT= MAC=00:25:90:4f:b0:6f:44:d3:ca:5f:89:40:08:00 SRC=62.210.181.123 DST=75.xxx.yyy.zzz LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=20343 DF PROTO=TCP SPT=2328 DPT=80 WINDOW=512 RES=0x00 SYN URGP=0 
Aug  1 12:09:58 server2 kernel: [15737.485726] [UFW BLOCK] IN=br1 OUT= MAC=00:25:90:4f:b0:6f:44:d3:ca:5f:89:40:08:00 SRC=187.134.225.91 DST=75.xxx.yyy.zzz  LEN=46 TOS=0x00 PREC=0x00 TTL=54 ID=0 DF PROTO=UDP SPT=54704 DPT=53413 LEN=26 
Aug  1 12:09:58 server2 kernel: [15737.486102] [UFW BLOCK] IN=br1 OUT= MAC=00:25:90:4f:b0:6f:44:d3:ca:5f:89:40:08:00 SRC=187.134.225.91 DST=75.xxx.yyy.zzz  LEN=151 TOS=0x00 PREC=0x00 TTL=54 ID=0 DF PROTO=UDP SPT=54704 DPT=53413 LEN=131 


You can search log file with grep command:
$ sudo grep something /var/log/ufw.log
$ sudo grep '187.134.225.91' /var/log/ufw.log

How do I see ufw reports?

The added report displays the list of rules as they were added on the command-line:
$ sudo ufw show added
Sample outputs:

Added user rules (see 'ufw status' for running firewall):
ufw allow 22
ufw reject 23

The raw report shows the complete firewall, while the others show a subset of what is in the raw report:
$ sudo ufw show raw
$ sudo ufw show raw | more

The listening report will display the ports on the live system in the listening state for tcp and the open state for udp, along with the address of the interface and the executable listening on the port. An '*' is used in place of the address of the interface when the executable is bound to all interfaces on that port. Following this information is a list of rules which may affect connections on this port. The rules are listed in the order they are evaluated by the kernel, and the first match wins. Please note that the default policy is not listed and tcp6 and udp6 are shown only if IPV6 is enabled:
$ sudo ufw show listening
$ sudo ufw show listening | more

tcp:
  22 10.86.115.66 (sshd)
   [ 1] allow 22
 
  22 10.8.0.1 (sshd)
   [ 1] allow 22
 
  443 75.xxx.yyy.zzz (openvpn)
udp:
  123 10.8.0.1 (ntpd)
  123 75.xxx.yyy.zzz (ntpd)
  123 10.86.115.66 (ntpd)
  123 * (ntpd)
udp6:
  123 * (ntpd)

Other possible reports are:
$ sudo ufw show builtins
$ sudo ufw show before-rules
$ sudo ufw show user-rules
$ sudo ufw show after-rules
$ sudo ufw show logging-rules