வழிகாட்டி

Linux-இல் ufw அமைப்பு: சேவையகத்தில் firewall மற்றும் nftables அடிப்படைகள்

புதுப்பிக்கப்பட்டது: · Skillaria.Top

ufw அமைப்பு மூன்று படிகளில் முடிகிறது: இயல்பு கொள்கைகளை அமைத்தல் (sudo ufw default deny incoming மற்றும் allow outgoing), SSH மற்றும் தேவையான போர்ட்களை அனுமதித்தல் (sudo ufw allow 22/tcp, sudo ufw allow 443/tcp), பின்னர் sudo ufw enable மூலம் firewall-ஐ இயக்குதல். விதிகளை sudo ufw status numbered மூலம் சரிபார்க்கலாம்; உள்ளே ufw netfilter-ஐ iptables அல்லது nftables வழியாக கட்டுப்படுத்துகிறது.

Linux-இல் firewall எந்த பிணைய பாக்கெட்டுகளை சேவையகத்துக்குள் அனுமதிப்பது, எவற்றை நிராகரிப்பது என்று முடிவு செய்கிறது. இதை கர்னலின் netfilter துணை அமைப்பு செய்கிறது; அதைக் கட்டுப்படுத்துவது கீழ்நிலை iptables மற்றும் nftables கருவிகள், மற்றும் அவற்றின் மேல் உள்ள ufw (Uncomplicated Firewall). Ubuntu மற்றும் Debian சேவையகங்களில் பெரும்பாலானவற்றுக்கு ufw அமைப்பு ஐந்து நிமிடங்களில் முடியும்: உள்வரும் எல்லாவற்றையும் மூடுங்கள், SSH மற்றும் சேவை போர்ட்களைத் திறங்கள், இயக்குங்கள். கீழே படிப்படியான வழிகாட்டி, பொதுவான பிழைகள், மற்றும் பின்னணியில் என்ன நடக்கிறது என்று புரிந்துகொள்ள தேவையான குறைந்தபட்ச nftables.

Linux-இல் firewall எப்படி அமைந்துள்ளது

பாக்கெட் வடிகட்டல் கர்னலில் நடைபெறுகிறது — அது netfilter. அது இடைமறிப்புப் புள்ளிகளை (hooks) வழங்குகிறது: ஹோஸ்டுக்கு வரும் போக்குவரத்து, வெளிச் செல்லும் போக்குவரத்து, கடந்து செல்லும் (forward) போக்குவரத்து. பயனர் கருவிகள் இந்தப் புள்ளிகளுக்கான விதிகளை கர்னலில் எழுதுகின்றன மட்டுமே.

கருவிநிலைஎப்போது பயன்படுத்துவது
ufwஎளிய தொடரியல் கொண்ட மேல் அடுக்குUbuntu/Debian-இல் தனி சேவையகம், வழக்கமான விதிகள்
firewalldமண்டலங்களுடன் கூடிய மேல் அடுக்குRHEL, Rocky, Fedora
nftables (nft)கீழ் நிலை, நவீனமானதுசிக்கலான விதிகள், NAT, முகவரித் தொகுப்புகள்
iptablesகீழ் நிலை, வழக்கற்று வருவதுபழைய அமைப்புகள் மற்றும் ஸ்கிரிப்ட்கள்

முக்கியம்: ஒரே ஒரு நிர்வாகக் கருவியைப் பயன்படுத்துங்கள். ufw மூலமும் கைமுறையாக iptables மூலமும் ஒரே நேரத்தில் விதிகளை மாற்றினால் அவை ஒன்றையொன்று மேலெழுதும், நிலைமை கணிக்க முடியாததாகிவிடும்.

ufw-ஐ நிறுவி சரிபார்த்தல்

Ubuntu-வில் ufw பொதுவாக ஏற்கெனவே நிறுவப்பட்டிருக்கும், ஆனால் அணைக்கப்பட்டிருக்கும். Debian-இல் அதை தனியாக நிறுவ வேண்டும்:

$ sudo apt update
$ sudo apt install ufw
$ sudo ufw status
Status: inactive

inactive நிலை என்பது ufw விதிகள் பயன்படுத்தப்படவில்லை என்று பொருள். Firewall-ஐ இப்போதே இயக்குவது சீக்கிரம்: முதலில் SSH-ஐ அனுமதியுங்கள், இல்லையென்றால் தொலை சேவையகத்தில் உங்கள் அணுகலையே துண்டித்துவிடுவீர்கள்.

சேவையகத்தில் ufw படிப்படியாக அமைத்தல்

படி 1. இயல்பு கொள்கைகள்

இயல்பு கொள்கை என்பது எந்த விதியும் பொருந்தாதபோது பாக்கெட்டுடன் என்ன செய்வது என்பது. சேவையகத்துக்கான பாதுகாப்பான திட்டம்: உள்வருவது தடை, வெளிச்செல்வது அனுமதி.

$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

உங்கள் சொந்த வெளிச் செல்லும் இணைப்புகளுக்கான பதில்கள் தானாகவே கடந்து செல்கின்றன: ufw இணைப்பு நிலையை கண்காணிக்கிறது (connection tracking), எனவே பதில்களுக்காக போர்ட்களைத் திறக்க வேண்டியதில்லை.

படி 2. SSH-ஐ அனுமதித்தல்

$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH என்பது ஒரு பயன்பாட்டு சுயவிவரம். SSH நிலையற்ற போர்ட்டில் கேட்கிறதென்றால் அதை வெளிப்படையாக அனுமதியுங்கள்: sudo ufw allow 2222/tcp. sshd உண்மையில் எந்த போர்ட்டில் கேட்கிறது என்று sudo ss -tlnp | grep sshd கட்டளையால் பார்க்கலாம்.

படி 3. சேவை போர்ட்களைத் திறத்தல்

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

நெறிமுறையைக் குறிப்பிடுங்கள்: /tcp இல்லாமல் ufw போர்ட்டை TCP, UDP இரண்டுக்கும் திறக்கும், தேவையில்லாத திறந்த கதவு எதற்கும் பயன்படாது.

படி 4. firewall-ஐ இயக்குதல்

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

ufw உடனே தொடங்கி ஒவ்வொரு துவக்கத்திலும் இயங்கும். தற்போதைய SSH அமர்வை மூடாதீர்கள்: இரண்டாவது அமர்வைத் திறந்து இணைப்பு வேலை செய்கிறதா என்று உறுதிசெய்யுங்கள்.

படி 5. விதிகளைச் சரிபார்த்தல்

$ 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)

/etc/default/ufw-இல் IPV6=yes (இயல்பு மதிப்பு) இருந்தால் IPv6 விதிகளை ufw தானாக உருவாக்குகிறது.

ufw-இல் போர்ட்டைத் திறப்பது: எல்லா தொடரியல் வடிவங்களும்

ufw allow கட்டளை சுருக்கமான மற்றும் முழு வடிவங்களைப் புரிந்துகொள்கிறது. சுருக்கமானது வழக்கமான சந்தர்ப்பங்களுக்கு வசதியானது; முழு வடிவம் மூலம், இடைமுகம் அல்லது இலக்கு முகவரியைக் குறிப்பிட வேண்டியபோது பயன்படுகிறது.

பணிகட்டளை
TCP போர்ட்sudo ufw allow 443/tcp
UDP போர்ட்sudo ufw allow 51820/udp
போர்ட் வரம்புsudo ufw allow 6000:6007/tcp
சேவையின் பெயரால்sudo ufw allow https
ஒரு IP-இலிருந்துsudo ufw allow from 203.0.113.10
ஒரு துணைப் பிணையத்திலிருந்து ஒரு போர்ட்டுக்குsudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
ஒரு இடைமுகத்தில்sudo ufw allow in on eth1 to any port 3306 proto tcp
தடுத்தல்sudo ufw deny 23/tcp
பதிலுடன் நிராகரித்தல்sudo ufw reject 25/tcp

deny மற்றும் reject இடையேயான வேறுபாடு: deny பாக்கெட்டை சத்தமின்றி நிராகரிக்கிறது, கிளையண்ட் நேர முடிவு வரை காத்திருக்கும்; reject "போர்ட் மூடப்பட்டுள்ளது" என்ற பதிலை அனுப்புகிறது. வெளி உலகுக்கு பொதுவாக deny தேர்ந்தெடுக்கப்படுகிறது; உள் பிணையங்களில் reject வசதியானது — கிளையண்டுகள் உடனே பிழையைப் பார்க்கின்றன.

தரவுத்தளத்தை ஒரு சேவையகத்திலிருந்து மட்டும் அணுகுதல்

அடிக்கடி வரும் பணி: PostgreSQL அல்லது MySQL இணையத்திலிருந்து தெரியக்கூடாது, ஆனால் அருகிலுள்ள சேவையகத்தில் உள்ள பயன்பாடு இணைய வேண்டும்.

$ sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp
Rule added

deny incoming கொள்கையால் 5432 மற்ற எல்லோருக்கும் மூடப்பட்டிருக்கும். கூடுதலாக DBMS-ஐ உள் முகவரியில் மட்டும் கேட்கும்படி அமைக்க வேண்டும் — firewall மற்றும் சேவை அமைப்புகள் ஒன்றையொன்று பாதுகாக்கின்றன.

பயன்பாட்டு சுயவிவரங்கள்

தொகுப்புகள் தங்கள் போர்ட்களின் விவரங்களை /etc/ufw/applications.d/-இல் வைக்கலாம். சுயவிவரங்களின் பட்டியலும் உள்ளடக்கமும்:

$ 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

சுயவிவரத்தை அனுமதிக்க: sudo ufw allow "Nginx Full". இடைவெளி உள்ள பெயர்களை மேற்கோளுக்குள் வையுங்கள். சொந்த சுயவிவரத்தை அதே அடைவில் INI வடிவில் எழுதி sudo ufw app update பெயர் மூலம் பயன்படுத்தலாம்.

ufw விதியை நீக்குவது எப்படி

மிகவும் நம்பகமான வழி — எண் மூலம்:

$ 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

நீக்கிய பின் எண்கள் நகர்வதால், அடுத்த நீக்கத்துக்கு முன் மீண்டும் status numbered இயக்குங்கள். இரண்டாவது வழி — விதியை delete என்ற சொல்லுடன் மீண்டும் எழுதுவது: sudo ufw delete allow 80/tcp; அது IPv4 மற்றும் IPv6 வடிவங்களை ஒரே நேரத்தில் நீக்கும்.

விதிகளின் வரிசை மற்றும் தொடக்கத்தில் செருகுதல்

ufw விதிகளை மேலிருந்து கீழாகச் சரிபார்க்கிறது, முதலில் பொருந்தும் விதி செயல்படுகிறது. எனவே ஒரு குறிப்பிட்ட முகவரிக்கான தடை பொதுவான அனுமதிக்கு மேலே இருக்க வேண்டும்:

$ sudo ufw insert 1 deny from 198.51.100.23
Rule inserted

சாதாரண கட்டளையால் deny சேர்த்தால் அது allow 443/tcp-க்குப் பின் பட்டியலின் கடைசியில் வரும், அந்தப் போர்ட்டுக்கு அது வேலை செய்யாது.

SSH-ஐ கடவுச்சொல் ஊகத்திலிருந்து பாதுகாத்தல்: ufw limit

limit விதி இணைப்பை அனுமதிக்கிறது, ஆனால் 30 வினாடிகளுக்குள் 6 அல்லது அதற்கு மேற்பட்ட இணைப்புகளைத் திறந்த முகவரியைத் தடுக்கிறது:

$ sudo ufw limit OpenSSH
Rule updated

இது வெகுஜன கடவுச்சொல் ஊகத்துக்கு எதிரான எளிய பாதுகாப்பு. தீவிர பாதுகாப்புக்கு சாவிகளால் மட்டும் உள்நுழைவை இயக்குங்கள்; விரும்பினால் fail2ban சேர்க்கலாம் — அது ufw வழியாக முகவரிகளைத் தடுக்க முடியும்.

ufw பதிவுகள்

பதிவு செய்தலை sudo ufw logging on இயக்கும்; நிலைகள் — low, medium, high, full. பதிவுகள் /var/log/ufw.log-இலும் (rsyslog வழியாக) கர்னல் பதிவிலும் சேரும்:

$ 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

SRC மற்றும் DPT புலங்கள் யார் எந்த போர்ட்டைத் தட்டினார்கள் என்று காட்டுகின்றன. சேவை பதில் அளிக்காமல், பதிவில் அதன் போர்ட்டுடன் UFW BLOCK இருந்தால் — விதி சேர்க்கப்படவில்லை என்று பொருள்.

ufw மற்றும் Docker: விதிகளை மீறி போர்ட்கள் ஏன் திறந்திருக்கின்றன

இது மிகவும் அறியப்பட்ட பொறி. Docker போர்ட்டை வெளியிடும்போது (-p 8080:80) தானாகவே NAT விதிகளையும் DOCKER சங்கிலியையும் சேர்க்கிறது; கொள்கலனுக்கான போக்குவரத்து forward வழியாகச் செல்கிறது, ufw-இன் உள்வரும் விதிகளைத் தாண்டி. இதன் விளைவாக ufw status 8080-ஐக் காட்டாது, ஆனால் வெளியிலிருந்து அது அணுகக்கூடியதாக இருக்கும்.

தீர்வு வழிகள்:

  • போர்ட்களை localhost-இல் மட்டும் வெளியிடுங்கள்: -p 127.0.0.1:8080:80, வெளியில் தேவையானதை nginx போன்ற தலைகீழ் ப்ராக்ஸி மூலம் வழங்குங்கள்.
  • சொந்த விதிகளை DOCKER-USER சங்கிலியில் சேருங்கள் — Docker அதை மேலெழுதுவதில்லை.
  • துணை கொள்கலன்களின் போர்ட்களை வெளியிடாமல், Docker பிணையம் வழியாக மட்டும் இணையுங்கள்.

மீட்டமைத்தல் மற்றும் நிறுத்துதல்

$ sudo ufw disable     # அணைக்கும், விதிகள் சேமிக்கப்படும்
$ sudo ufw reset       # எல்லா விதிகளையும் நீக்கி அணைக்கும்
$ sudo ufw reload      # அமைப்பை மீண்டும் படிக்கும்

reset-க்கு முன் ufw விதிக் கோப்புகளின் நகல்களை தேதிப் பின்னொட்டுடன் /etc/ufw/-இல் சேமிக்கும். விதிகள் /etc/ufw/user.rules மற்றும் user6.rules-இல் உள்ளன — அவற்றை கைமுறையாக திருத்தாமல், கட்டளைகள் மூலம் மட்டுமே மாற்றுங்கள்.

nftables அடிப்படைகள்

nftables என்பது Linux கர்னலில் iptables-க்கு நவீன மாற்று. Debian 10+ மற்றும் Ubuntu 20.10+-இல் iptables கட்டளை இயல்பாக iptables-nft இணக்க அடுக்கு வழியாக வேலை செய்கிறது, எனவே ufw விதிகளும் nftables-இல் சேருகின்றன. கர்னலில் ஏற்றப்பட்டதை எல்லாம் பார்க்க:

$ sudo nft list ruleset

nftables அமைப்பு: அட்டவணை (குடும்பம் ip, ip6, அல்லது இரண்டுக்கும் inet) சங்கிலிகளை கொண்டுள்ளது, அவை netfilter புள்ளிகளுடன் இணைக்கப்பட்டுள்ளன; சங்கிலிகளில் விதிகள் உள்ளன. சேவையகத்துக்கான குறைந்தபட்ச firewall கோப்பு /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;
    }
}

பயன்படுத்தி துவக்கத்தில் இயக்குவது:

$ sudo nft -c -f /etc/nftables.conf   # தொடரியலை மட்டும் சரிபார்க்க
$ sudo systemctl enable --now nftables

விதிகளை இயங்கும்போதே சேர்க்கலாம், ஆனால் கோப்பில் எழுதாவிட்டால் மறுதொடக்கத்துக்குப் பிறகு அவை மறைந்துவிடும்:

$ 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   # -a விதிகளின் handle-ஐக் காட்டும்
$ sudo nft delete rule inet filter input handle 9

nftables-இன் முக்கிய நன்மை — தொகுப்புகள் ({ 22, 80, 443 }) மற்றும் IPv4, IPv6 இரண்டுக்கும் ஒரே inet அட்டவணை. உங்கள் சொந்த nftables.service-ஐ ufw-உடன் ஒரே நேரத்தில் இயக்காதீர்கள்: flush ruleset ufw விதிகளை அழித்துவிடும்.

பொதுவான பிழைகள்

  • SSH விதி இல்லாமல் ufw-ஐ இயக்கியது — அணுகல் போய்விட்டது. வழங்குநரின் கன்சோல் (VNC/serial) உதவும்: sudo ufw allow OpenSSH அல்லது sudo ufw disable.
  • போர்ட்டைத் திறந்தாலும் சேவை கிடைக்கவில்லை — சேவை 127.0.0.1-இல் கேட்கிறது, வெளி முகவரியில் அல்ல. ss -tlnp மூலம் சரிபாருங்கள்.
  • இன்னும் ஒரு கிளவுட் firewall இருக்கிறது — பல வழங்குநர்களுக்கு பாதுகாப்புக் குழுக்கள் உண்டு; போர்ட்டை அங்கேயும் திறக்க வேண்டும்.
  • deny வேலை செய்யவில்லை — விதி அனுமதிக்கும் விதிக்குக் கீழே உள்ளது; insert 1 பயன்படுத்துங்கள்.

சுருக்கம்

அடிப்படை ufw அமைப்பு என்பது default deny incoming, SSH மற்றும் சேவை போர்ட்களின் அனுமதி, ufw enable, மற்றும் status numbered மூலம் சரிபார்ப்பு. குறிப்பிட்ட அணுகலுக்கு from மற்றும் port கொண்ட விதிகளைப் பயன்படுத்துங்கள், SSH-க்கு limit; Docker-உடன் பணியாற்றும்போது அது ufw-ஐத் தாண்டுகிறது என்பதை நினைவில் வையுங்கள். NAT அல்லது சிக்கலான முகவரித் தொகுப்புகள் தேவைப்பட்டால் nftables-க்கு மாறுங்கள். சேவையகத்தை firewall மூலம் பாதுகாப்பது Linux பாடநெறியில் நடைமுறையுடன் விளக்கப்பட்டுள்ளது.

அடிக்கடி கேட்கப்படும் கேள்விகள்

ufw மற்றும் iptables இடையே என்ன வேறுபாடு?

ufw என்பது எளிய தொடரியல் கொண்ட மேல் அடுக்கு; அது iptables அல்லது nftables விதிகளைத் தானாக உருவாக்குகிறது. iptables மற்றும் nftables கீழ் நிலைக் கருவிகள்: முழு கட்டுப்பாட்டைத் தருகின்றன, ஆனால் அதிக அறிவு தேவை.

மறுதொடக்கத்துக்குப் பிறகு ufw விதிகள் சேமிக்கப்படுமா?

ஆம். sudo ufw enable-க்குப் பிறகு firewall துவக்கத்தில் தொடங்குகிறது, விதிகள் /etc/ufw/user.rules மற்றும் user6.rules-இல் சேமிக்கப்படுகின்றன.

வெளிச் செல்லும் இணைப்புகளுக்கு போர்ட்களைத் திறக்க வேண்டுமா?

allow outgoing கொள்கையில் தேவையில்லை. இணைப்பு நிலையைக் கண்காணிப்பதால் வெளிச் செல்லும் இணைப்புகளின் பதில்களை ufw தானாகவே கடத்துகிறது.

ufw இயங்கும்போது ping-ஐ எப்படி அனுமதிப்பது?

இயல்பாக ufw உள்வரும் ICMP echo-request-ஐ ஏற்கெனவே அனுமதிக்கிறது: இந்த விதி /etc/ufw/before.rules-இல் உள்ளது. ping-ஐத் தடுக்க அந்தக் கோப்பில் ACCEPT-ஐ DROP ஆக மாற்றி sudo ufw reload இயக்குங்கள்.

CentOS மற்றும் Rocky Linux-இல் ufw உள்ளதா?

அங்கே நிலையான கருவி firewall-cmd கட்டளையுடன் கூடிய firewalld. ufw-ஐ EPEL-இலிருந்து நிறுவலாம், ஆனால் firewalld-உடன் கலக்காமல் இருப்பது நல்லது.

இந்தத் தலைப்பை வீடியோவில் கற்றுக்கொள்ளுங்கள்

“Linux: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்