1. Alapok
2. Hozzon létre kezdeti szabályokat
3. Legyen a szabályok tartósak
4. Engedélyezze a kimenő kapcsolatokat
5. Teljes országok engedélyezése vagy letiltása
Bevezetés
iptablesegy hatékony eszköz a Linux kernel integrált tűzfalának beállítására. A legtöbb Ubuntu disztribúción előre telepítve van, de ha testreszabott Ubuntu verziót használ, vagy konténerben fut, valószínűleg manuálisan kell telepítenie.
sudo apt-get install iptables iptables-persistent
A telepítés után, ha a rendszer megkérdezi, hogy mentse-e az aktuális szabályokat, ez pillanatnyilag nem számít, mert később eltávolítani vagy új szabályokat fog létrehozni.
Tippek
A netcatparanccsal ( a kiszolgálótól eltérő számítógépen) tesztelheti, hogy melyik port van nyitva vagy zárva.
nc -z -w5 -v SERVER_IP PORT
nc a netcat parancs.
-z csak küldjön egy csomagot hasznos teher nélkül.
-w5 várjon legfeljebb 5 másodpercet a válaszra.
-v bőbeszédű mód.
- Cserélje
SERVER_IPki a szerver címét.
- Cserélje
PORTki a tesztelni kívánt portra, ha nyitva van (pl 22. ).
A szerveren a netstatparanccsal megtekintheti, hogy mely portok figyelnek éppen a kapcsolatokra.
sudo netstat -tulpn
Megjegyzés: Bár netstatpraktikus megoldás megtalálni azokat a portokat, amelyekkel dolgozni szeretne, tisztában kell lennie a kiszolgálóra jelenleg telepített alkalmazásokkal, és hogy mely portok figyelnek, nem kell minden portot engedélyeznie a netstatkimenetben .
Szintaxis
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
-A INPUTadjunk hozzá egy szabályt a INPUTlánchoz, a lánc szabályok csoportja, az útmutatóban leginkább használt szabályok a INPUT, OUTPUTés a PREROUTING.
-p tcpbeállítva tcpprotokollként, amelyre ez a szabály vonatkozni fog, használhat más protokollokat is, például a udp, icmpvagy a all.
-m tcphasználja a tcpmodult. iptablesmodulokon keresztül támogatja a további szolgáltatásokat, amelyek közül néhány már előre telepítve van iptables, mások pedig, például a geoipmodul.
--dport 22a -val kezdődő parancsok --további opciókat jeleznek a korábban használt modulhoz, ebben az esetben azt mondjuk a tcpmodulnak, hogy csak a portra vonatkozzon 22.
-m geoiphasználja a geoipmodult. Ez országonként korlátozza a csomagokat (további információ az 5. lépésben).
--src-cc PEmondd meg a geoipmodulnak, hogy korlátozza a bejövő csomagokat a Peruból érkezőkre. További országkódokért keressen ISO 3166 country codesaz interneten.
-j ACCEPTaz -jargumentum megmondja iptables, hogy mi a teendő, ha egy csomag megfelel az előző argumentumokban megadott megszorításoknak. Ebben az esetben ACCEPTezek a csomagok lesznek , a többi opció a REJECT, DROPés így tovább. További lehetőségeket iptables jump targetstalálhat az interneten keresve .
1. Alapok
Sorolja fel az összes szabályt.
sudo iptables -L
Sorolja fel az összes parancsot, amelyet a jelenleg használt szabályok létrehozásához használtak, amelyek hasznosak a szabályok szerkesztéséhez vagy törléséhez.
sudo iptables -S
Egy adott szabály törléséhez válasszon egy szabályt a listából, sudo iptables -Sés cserélje ki -Aa következőre -D.
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Sorolja fel az összes számozott szabályt a INPUTláncban.
sudo iptables -L INPUT --line-numbers
Számozott szabály törlése.
sudo iptables -D INPUT 2
Az összes szabály törléséhez.
sudo iptables -F
Figyelmeztetés: megszakadhat a kapcsolat, ha SSH-n keresztül csatlakozik .
Csak a OUTPUTlánc szabályait törölje .
sudo iptables -F OUTPUT
2. Hozzon létre kezdeti szabályokat
Engedélyezés SSHa eth0felületen
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-i eth0 szabály alkalmazása egy adott felületre, ha engedélyezni szeretné, hogy bármely felületről távolítsa el ezt a parancsot.
A bejövő csomagok korlátozása egy adott IP-re (pl 10.0.3.1/32. ).
sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
-s 10.0.3.1/32 megad egy IP/alhálózatot, amelyről engedélyezi a kapcsolatokat.
Állítsa be az alapértelmezett láncszabályokat.
Figyelmeztetés: a folytatás előtt győződjön meg arról, hogy a megfelelő SSH-szabályokat alkalmazta, ha távoli kiszolgálón dolgozik .
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-P INPUT DROP letilt minden bejövő csomagot (azaz senki nem fog tudni csatlakozni a futó szerverekhez, mint például az Apache, SQL stb.).
-P FORWARD DROP letilt minden továbbított csomagot (azaz amikor a rendszert routerként használja).
-P OUTPUT ACCEPTengedélyezi az összes kimenő csomagot (azaz amikor végrehajt egy HTTPkérést).
Minden forgalom engedélyezése a loopback felületen ( ajánlott ).
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
3. Legyen a szabályok tartósak
Mentse el az aktuális iptablesszabályokat.
sudo netfilter-persistent save
sudo netfilter-persistent reload
Ha egy tárolóban fut, a netfilter-persistentparancs valószínűleg nem fog működni, ezért újra kell konfigurálnia a iptables-persistentcsomagot.
sudo dpkg-reconfigure iptables-persistent
4. Engedélyezze a kimenő kapcsolatokat
DNS-lekérdezések engedélyezése.
sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
A statemodul segítségével engedélyezheti RELATEDés ESTABLISHEDkimenő csomagokat.
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Engedélyezze a kívánt portokat; ebben az esetben HTTPportok.
sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
További portok, amelyeket érdemes használni.
FTP: tcp a 21-es porton
HTTPS: tcp a 443-as porton
DHCP: udp a 67-es porton
NTP: udp a 123-as porton
Megjegyzés: Ha engedélyezni szeretné, apt-getszükséges lehet a FTPés aHTTPS .
Engedélyezze a visszaadott forgalmat csak a RELATEDmár meglévő ESTABLISHEDkapcsolatokhoz ( ajánlott, mert néha kétirányú kommunikációra van szükség).
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Egyéb hasznos szabályok
Külső ping kérések engedélyezése.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Előre forgalom eth0port 2200a 10.0.3.21:22(hasznos, ha azt szeretné, hogy ki egy SSH szervert futtató tároló belsejében).
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22
Ha SSH használatával sikeresen bejelentkezik a szerverére, akkor állandó kapcsolat jön létre (azaz nem jön létre új kapcsolat, még akkor sem, ha 1 óránál hosszabb ideig csatlakozik). Ha nem sikerül, és újra megpróbál bejelentkezni, új kapcsolat jön létre. Ez blokkolja a folyamatos SSH-bejelentkezési kísérleteket az új kapcsolatok óránkénti korlátozásával.
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP
Átirányítása kérelmek port 443a port 4430(hasznos, ha azt szeretné, hogy kötődik a port 443nélkül root).
sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
ens3 a hálózati interfész.
-m geoip országblokk modul (lásd az 5. lépést).
Figyelmeztetés: Ne használja lo, az operációs rendszer eldob minden, a loopback felületre átirányított csomagot .
5. Teljes országok engedélyezése vagy letiltása
5.1 Telepítés xtables-addons
A xtables-addonsmodult többféle módszerrel telepítheti , nyugodtan használja az Önnek legmegfelelőbb telepítési módot.
Telepítés a segítségével apt-get.
sudo apt-get install xtables-addons-common
Telepítés a segítségével module-assistant.
sudo apt-get install module-assistant xtables-addons-source
sudo module-assistant --verbose --text-mode auto-install xtables-addons
Telepítés forrásból.
sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
cd xtables-addons
./autogen.sh
./configure
make
sudo make install
Építsen fel egy "országok" adatbázist.
sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv
Indítsa újra a rendszert.
sudo reboot
A xtables-addonssikeres telepítés után az első újraindítás után futtassa, depmodkülönben az országblokkolás nem fog megfelelően működni (ez csak az első alkalommal szükséges).
sudo depmod
Hozzon létre egy szkriptet a címen /etc/cron.monthly/geoip-updateraz geoipadatbázis havi frissítéséhez .
#!/usr/bin/env bash
# this script is intended to run with sudo privileges
echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip
echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl
echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater
Tedd /etc/cron.monthly/geoip-updatervégrehajthatóvá.
sudo chmod +x /etc/cron.monthly/geoip-updater
5.2 Példaszabályok
_Megjegyzés: Ha iptables: No chain/target/match by that namehibaüzenetet kap egy geoipszabály alkalmazásakor , akkor lehetséges, hogy xtables-addonsa telepítés nem megfelelő. Próbálkozzon másik telepítési módszerrel.
Blokkolja az összes bejövő csomagot Kínából, Hongkongból, Oroszországból és Koreából.
sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP
A 80fenti országok kivételével mindenhonnan bejövő csomagok engedélyezése a porton .
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Csak Peruból engedélyezze a bejövő csomagokat az ens3interfészen a porton 22(bátran válassza ki azt az országkódot, amelyről csomagokat szeretne fogadni, például USaz Egyesült Államok esetében).
sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT
443Csak Peruból engedélyezze a bejövő csomagokat a porton .
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT