Pag-set up ng ufw sa Linux: firewall sa server at mga batayan ng nftables
Ang pag-set up ng ufw ay tatlong hakbang: itakda ang default policy (sudo ufw default deny incoming at allow outgoing), payagan ang SSH at ang kailangang port (sudo ufw allow 22/tcp, sudo ufw allow 443/tcp), at saka i-enable ang firewall gamit ang sudo ufw enable. Sinusuri ang mga rule gamit ang sudo ufw status numbered, at sa ilalim, kinokontrol ng ufw ang netfilter sa pamamagitan ng iptables o nftables.
Nagpapasya ang firewall sa Linux kung aling network packet ang papapasukin sa server at alin ang itatapon. Ginagawa ito ng netfilter subsystem ng kernel, at kinokontrol ito ng mga utility gaya ng mababang antas na iptables at nftables, at ng mas simpleng ufw (Uncomplicated Firewall). Para sa karamihan ng server sa Ubuntu at Debian, limang minuto lang ang ufw setup: isara ang lahat ng papasok, buksan ang SSH at ang port ng mga serbisyo, at i-enable. Sa ibaba ang hakbang-hakbang na gabay, mga karaniwang pagkakamali, at ang kaunting nftables para maunawaan kung ano ang nangyayari sa ilalim.
Paano gumagana ang firewall sa Linux
Nasa kernel ang pag-filter ng packet, at ito ang netfilter. Nagbibigay ito ng mga hook: ang papasok na trapiko papunta sa mismong host, ang palabas, at ang dumadaan lamang (forward). Ang mga user utility ay nagsusulat lamang ng mga rule sa kernel para sa mga hook na ito.
| Tool | Antas | Kailan gamitin |
|---|---|---|
ufw | nasa itaas, simpleng syntax | iisang server sa Ubuntu/Debian, karaniwang rule |
firewalld | nasa itaas, may zone | RHEL, Rocky, Fedora |
nftables (nft) | mababa, moderno | kumplikadong rule, NAT, set ng address |
iptables | mababa, unti-unting nawawala | mga lumang system at script |
Mahalaga: gumamit ng isang tool lamang sa pamamahala. Kung sabay mong ine-edit ang rule sa ufw at sa iptables nang manu-mano, mag-o-overwrite sila sa isa't isa, at magiging hindi mahulaan ang resulta.
Pag-install at pagsusuri ng ufw
Karaniwang naka-install na ang ufw sa Ubuntu pero naka-off. Sa Debian, kailangan itong i-install nang hiwalay:
$ sudo apt update
$ sudo apt install ufw
$ sudo ufw status
Status: inactive
Ang estadong inactive ay nangangahulugang hindi ina-apply ang mga rule ng ufw. Huwag pa itong i-enable: payagan muna ang SSH, dahil kung nasa malayong server ka, puputulin mo ang sarili mong access.
Hakbang-hakbang na ufw setup sa server
Hakbang 1. Mga default policy
Ang default policy ang gagawin sa packet kapag walang rule na tumugma. Ligtas na setup para sa server: bawal ang papasok, pinapayagan ang palabas.
$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
Awtomatikong pinapasok ang mga sagot sa sarili mong palabas na koneksyon: sinusubaybayan ng ufw ang estado ng koneksyon (connection tracking), kaya hindi na kailangang magbukas ng port para sa mga sagot.
Hakbang 2. Payagan ang SSH
$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
Ang OpenSSH ay application profile. Kung nakikinig ang SSH sa hindi karaniwang port, tahasang payagan ito: sudo ufw allow 2222/tcp. Para malaman kung aling port talaga ang gamit ng sshd, patakbuhin ang sudo ss -tlnp | grep sshd.
Hakbang 3. Buksan ang port ng mga serbisyo
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
Ilagay ang protocol: kapag walang /tcp, bubuksan ng ufw ang port para sa TCP at UDP nang sabay, at ang dagdag na bukas na pinto ay hindi kailangan.
Hakbang 4. I-enable ang firewall
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Agad na tatakbo ang ufw at awtomatikong magsisimula sa bawat boot. Huwag isara ang kasalukuyang SSH session: magbukas ng pangalawa at tiyaking gumagana ang koneksyon.
Hakbang 5. Suriin ang mga rule
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
Awtomatikong gumagawa ng rule para sa IPv6 ang ufw kung nakatakda sa /etc/default/ufw ang IPV6=yes (ito ang default).
Paano magbukas ng port sa ufw: lahat ng syntax
Naiintindihan ng ufw allow ang maikli at buong anyo. Ang maikli ay para sa karaniwang kaso, ang buo naman ay kapag kailangang tukuyin ang pinagmulan, interface o destinasyong address.
| Gawain | Command |
|---|---|
| TCP port | sudo ufw allow 443/tcp |
| UDP port | sudo ufw allow 51820/udp |
| Saklaw ng mga port | sudo ufw allow 6000:6007/tcp |
| Sa pamamagitan ng pangalan ng serbisyo | sudo ufw allow https |
| Mula sa isang IP | sudo ufw allow from 203.0.113.10 |
| Mula sa subnet papunta sa port | sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp |
| Sa partikular na interface | sudo ufw allow in on eth1 to any port 3306 proto tcp |
| Ipagbawal | sudo ufw deny 23/tcp |
| Tanggihan nang may sagot | sudo ufw reject 25/tcp |
Ang pagkakaiba ng deny at reject: tahimik na itinatapon ng deny ang packet kaya naghihintay ang kliyente hanggang mag-timeout; nagpapadala naman ng sagot ang reject na sarado ang port. Para sa labas, karaniwang deny ang pinipili; para sa internal na network, mas maginhawa ang reject dahil agad na nakikita ng mga kliyente ang error.
Database na bukas lamang sa isang server
Karaniwang kaso: hindi dapat makita sa internet ang PostgreSQL o MySQL, pero kailangang kumonekta rito ang application sa kalapit na server.
$ sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp
Rule added
Nananatiling sarado ang port 5432 sa lahat ng iba pa dahil sa deny incoming na policy. Mabuting i-configure din ang mismong database na makinig lamang sa internal na address: pinoprotektahan ng firewall at ng setting ng serbisyo ang isa't isa.
Mga application profile
Puwedeng maglagay ang mga package ng paglalarawan ng kanilang mga port sa /etc/ufw/applications.d/. Listahan at nilalaman ng mga profile:
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
Para payagan ang profile: sudo ufw allow "Nginx Full". Ilagay sa quotation mark ang mga pangalang may espasyo. Puwede kang gumawa ng sarili mong profile sa INI format sa parehong direktoryo at i-apply ito gamit ang sudo ufw app update pangalan.
Paano magbura ng rule sa ufw
Ang pinakamaaasahang paraan ay ayon sa numero:
$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6)
$ sudo ufw delete 2
Deleting:
allow 80/tcp
Proceed with operation (y|n)? y
Rule deleted
Pagkatapos magbura, nagbabago ang mga numero, kaya patakbuhin muli ang status numbered bago ang susunod na pagbura. Ang pangalawang paraan ay ulitin ang rule na may salitang delete: sudo ufw delete allow 80/tcp; binubura nito nang sabay ang IPv4 at IPv6 na bersyon.
Pagkakasunod-sunod ng rule at pagsingit sa itaas
Sinusuri ng ufw ang mga rule mula sa itaas pababa, at ang unang tumugma ang nasusunod. Kaya ang pagbabawal para sa partikular na address ay dapat nasa itaas ng pangkalahatang pagpayag:
$ sudo ufw insert 1 deny from 198.51.100.23
Rule inserted
Kapag idinagdag mo ang deny gamit ang karaniwang command, mapupunta ito sa dulo ng listahan, pagkatapos ng allow 443/tcp, at hindi ito gagana para sa port na iyon.
Proteksyon ng SSH laban sa brute force: ufw limit
Pinapayagan ng rule na limit ang koneksyon, pero hinaharangan ang address na nagbukas ng 6 o higit pang koneksyon sa loob ng 30 segundo:
$ sudo ufw limit OpenSSH
Rule updated
Ito ay simpleng proteksyon laban sa malawakang brute force ng password. Para sa mas seryosong proteksyon, idagdag ang login gamit lamang ang key at, kung gusto, ang fail2ban, na kayang mag-ban ng address sa pamamagitan ng ufw.
Mga log ng ufw
Ang logging ay naka-enable sa pamamagitan ng sudo ufw logging on; ang mga level ay low, medium, high, full. Napupunta ang mga entry sa /var/log/ufw.log (sa pamamagitan ng rsyslog) at sa kernel log:
$ sudo journalctl -k | grep 'UFW BLOCK' | tail -2
Oct 14 10:12:03 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=45.155.205.1 DST=192.0.2.10 PROTO=TCP SPT=51544 DPT=3389
Oct 14 10:12:09 web kernel: [UFW BLOCK] IN=eth0 OUT= SRC=89.248.165.7 DST=192.0.2.10 PROTO=TCP SPT=40312 DPT=23
Ipinapakita ng mga field na SRC at DPT kung sino ang kumatok at sa aling port. Kung hindi tumutugon ang serbisyo at may UFW BLOCK sa log para sa port nito, ibig sabihin hindi pa naidadagdag ang rule.
ufw at Docker: bakit bukas ang mga port kahit may rule
Ito ang pinakakilalang bitag. Kapag naglalathala ng port ang Docker (-p 8080:80), nagdadagdag ito ng sariling NAT rule at chain na DOCKER, at dumadaan ang trapiko papunta sa container sa forward, nilalampasan ang papasok na rule ng ufw. Kaya hindi lumalabas ang port 8080 sa ufw status, pero bukas ito mula sa labas.
Mga solusyon:
- Ilathala lamang ang port sa localhost:
-p 127.0.0.1:8080:80, at ilabas ito sa labas sa pamamagitan ng reverse proxy (nginx). - Magdagdag ng sariling rule sa chain na
DOCKER-USER— hindi ito pinapatungan ng Docker. - Huwag ilathala ang port ng mga service container, at ikonekta na lamang sila sa pamamagitan ng Docker network.
Reset at pag-disable
$ sudo ufw disable # i-off, nananatili ang mga rule
$ sudo ufw reset # burahin ang lahat ng rule at i-off
$ sudo ufw reload # basahin muli ang configuration
Bago ang reset, gumagawa ang ufw ng kopya ng mga file ng rule sa /etc/ufw/ na may petsa sa dulo. Ang mga rule mismo ay nasa /etc/ufw/user.rules at user6.rules — huwag itong i-edit nang manu-mano, gamitin lamang ang mga command.
Mga batayan ng nftables
Ang nftables ang modernong kapalit ng iptables sa kernel ng Linux. Sa Debian 10+ at Ubuntu 20.10+, ang command na iptables ay gumagana bilang default sa pamamagitan ng compatibility layer na iptables-nft, kaya nasa nftables din ang mga rule ng ufw. Para makita ang lahat ng nakakarga sa kernel:
$ sudo nft list ruleset
Istruktura ng nftables: ang table (family na ip, ip6, o inet para sa pareho) ay naglalaman ng mga chain na nakakabit sa mga punto ng netfilter, at ang mga chain ay naglalaman ng mga rule. Minimal na firewall para sa server sa file na /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iif "lo" accept
ip protocol icmp accept
meta l4proto ipv6-icmp accept
tcp dport { 22, 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
I-apply at i-enable sa boot:
$ sudo nft -c -f /etc/nftables.conf # suriin lamang ang syntax
$ sudo systemctl enable --now nftables
Puwedeng magdagdag ng rule habang tumatakbo, pero mawawala ang mga ito pagkatapos mag-reboot kung hindi isusulat sa file:
$ sudo nft add rule inet filter input tcp dport 5432 ip saddr 10.0.0.5 accept
$ sudo nft -a list chain inet filter input # ipapakita ng -a ang handle ng mga rule
$ sudo nft delete rule inet filter input handle 9
Ang pangunahing bentahe ng nftables ay ang mga set ({ 22, 80, 443 }) at ang iisang inet table para sa IPv4 at IPv6. Huwag patakbuhin nang sabay ang sarili mong nftables.service at ang ufw: buburahin ng flush ruleset ang mga rule ng ufw.
Mga karaniwang pagkakamali
- Na-enable ang ufw nang walang rule para sa SSH — nawala ang access. Nasasagip ka ng console ng provider (VNC/serial):
sudo ufw allow OpenSSHosudo ufw disable. - Nabuksan ang port pero hindi ma-access ang serbisyo — nakikinig ang serbisyo sa
127.0.0.1, hindi sa panlabas na address. Tingnan gamit angss -tlnp. - May cloud firewall pa — maraming provider ang may security group; buksan din doon ang port.
- Hindi gumagana ang deny — mas mababa ang rule kaysa sa pumapayag na rule; gamitin ang
insert 1.
Buod
Ang batayang ufw setup ay binubuo ng default deny incoming, pagpayag sa SSH at sa mga port ng serbisyo, ufw enable, at pagsusuri gamit ang status numbered. Para sa tiyak na access, gamitin ang mga rule na may from at port; para sa SSH, gamitin ang limit; at kapag gumagamit ng Docker, tandaang nilalampasan nito ang ufw. Kapag kailangan ang NAT o kumplikadong set ng rule, lumipat sa nftables. Ang proteksyon ng server gamit ang firewall ay ipinapaliwanag din nang praktikal sa kursong Linux.
Mga madalas itanong
Ano ang pagkakaiba ng ufw at iptables?
Ang ufw ay nasa itaas na may simpleng syntax at kusang gumagawa ng mga rule ng iptables o nftables. Ang iptables at nftables ay mababang antas na tool na nagbibigay ng buong kontrol, pero nangangailangan ng mas maraming kaalaman.
Nananatili ba ang mga rule ng ufw pagkatapos mag-reboot?
Oo. Pagkatapos ng sudo ufw enable, awtomatikong nagsisimula ang firewall sa boot, at nakaimbak ang mga rule sa /etc/ufw/user.rules at user6.rules.
Kailangan bang magbukas ng port para sa palabas na koneksyon?
Kapag allow outgoing ang policy, hindi na kailangan. Awtomatikong pinapasok ng ufw ang mga sagot sa palabas na koneksyon dahil sa connection tracking.
Paano payagan ang ping habang naka-enable ang ufw?
Bukas na ang papasok na ICMP echo request bilang default: nakalagay ang rule na ito sa /etc/ufw/before.rules. Para i-block ang ping, palitan ang ACCEPT ng DROP sa file na iyon at patakbuhin ang sudo ufw reload.
May ufw ba sa CentOS at Rocky Linux?
Ang standard na tool doon ay firewalld, kasama ang command na firewall-cmd. Puwedeng i-install ang ufw mula sa EPEL, pero hindi magandang paghaluin ito sa firewalld.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.
Pumunta sa kurso