Úvod
Firewalld je firewall, řešení pro správu k dispozici pro mnoho distribucí Linuxu, která se chová jako frontend pro iptables filtrování paketů systému, který poskytuje jádro Linuxu. V této příručce se budeme zabývat tím, jak nastavit firewall pro váš server a ukáže vám základy řízení firewall s firewall-cmd
nástroje pro správu (pokud chcete raději použít iptables
s CentOS, postupujte podle tohoto průvodce).
Poznámka: Tam je šance, že může pracovat s novější verze firewalld, než bylo k dispozici v době psaní tohoto, nebo že váš server byl nastaven trochu jinak, než například server používá v této příručce. Chování některých příkazů vysvětlených v této příručce se tedy může lišit v závislosti na konkrétní konfiguraci.
Základní Pojmy v Firewalld
Než začneme mluvit o tom, jak vlastně používat firewall-cmd
nástroj pro správu vaší konfigurace brány firewall, měli bychom se seznámit s několika základními pojmy, které nástroj přináší.
zóny
démon firewalld
spravuje skupiny pravidel pomocí entit nazývaných „zóny“. Zóny jsou v podstatě sady pravidel diktovat, co provoz by měl být povolen v závislosti na úrovni, důvěra v sítě je počítač připojen k. Síťovým rozhraním je přiřazena zóna, která diktuje chování, které by měl firewall povolit.
pro počítače, které se mohou často pohybovat mezi sítěmi (jako jsou notebooky), poskytuje tento druh flexibility dobrý způsob změny pravidel v závislosti na prostředí. Můžete mít přísná pravidla, která zakazují většinu provozu při provozu na veřejné síti WiFi, a zároveň umožňují uvolněnější omezení při připojení k domácí síti. Pro server nejsou tyto zóny tak důležité, protože síťové prostředí se zřídka, pokud vůbec, mění.
bez ohledu na to, jak dynamické může být vaše síťové prostředí, je stále užitečné seznámit se s obecnou myšlenkou každé z předdefinovaných zón pro firewalld
. V pořadí od nejméně důvěryhodných po nejdůvěryhodnější jsou předdefinované zóny v rámci firewalld
:
- pokles: Nejnižší úroveň důvěry. Všechna příchozí připojení jsou zrušena bez odpovědi a jsou možná pouze odchozí připojení.
- blok: podobně jako výše uvedené, ale namísto pouhého zrušení připojení jsou příchozí požadavky odmítnuty zprávou
icmp-host-prohibited
neboicmp6-adm-prohibited
. - veřejnost: představuje veřejné, nedůvěryhodné sítě. Nedůvěřujete jiným počítačům, ale můžete povolit vybraná příchozí připojení případ od případu.
- externí: externí sítě v případě, že používáte bránu firewall jako bránu. Je nakonfigurován pro maskování NAT tak, aby vaše interní síť zůstala soukromá, ale dosažitelná.
- vnitřní: druhá strana vnější zóny, používaná pro vnitřní část brány. Počítače jsou poměrně důvěryhodné a jsou k dispozici některé další služby.
- dmz: Používá se pro počítače umístěné v DMZ (izolované počítače, které nebudou mít přístup ke zbytku vaší sítě). Povolena jsou pouze určitá příchozí připojení.
- práce: používá se pro pracovní stroje. Důvěřujte většině počítačů v síti. Může být povoleno několik dalších služeb.
- domov: domácí prostředí. Obecně to znamená, že důvěřujete většině ostatních počítačů a že bude přijato několik dalších služeb.
- důvěryhodné: důvěřujte všem strojům v síti. Nejotevřenější z dostupných možností a měl by být používán střídmě.
používat firewall, můžeme vytvořit pravidla a změnit vlastnosti našich zóny a pak přiřadit naše síťové rozhraní podle toho, které zóny jsou nejvhodnější.
trvalost pravidel
v firewalld mohou být pravidla označena jako trvalá nebo okamžitá. Pokud je pravidlo přidáno nebo změněno, ve výchozím nastavení se změní chování aktuálně spuštěné brány firewall. Při dalším spuštění budou stará pravidla vrácena.
firewall-cmd
operace může trvat --permanent
příznak k označení, že non-ephemeral firewall by měla být cílená. To ovlivní sadu pravidel, která je znovu načtena při spuštění. Toto oddělení znamená, že můžete otestovat pravidla v aktivní instanci brány firewall a poté znovu načíst, pokud se vyskytnou problémy. Příznak --permanent
můžete také použít k vytvoření celé sady pravidel v průběhu času, která budou všechna použita najednou při vydání příkazu reload.
nainstalujte a povolte spuštění brány Firewall při spuštění
firewalld
je standardně nainstalován v některých distribucích Linuxu, včetně mnoha obrázků CentOS 7. Může však být nutné nainstalovat firewalld sami:
- sudo yum install firewalld
po instalaci firewalld
můžete službu povolit a restartovat server. Mějte na paměti, že povolení firewalld způsobí spuštění služby při spuštění. Nejlepší je vytvořit pravidla brány firewall a využít příležitosti k jejich vyzkoušení před konfigurací tohoto chování, aby se předešlo možným problémům.
- sudo systemctl enable firewalld
- sudo reboot
Když se server restartuje, váš firewall by měl být vychován, vaše síťová rozhraní by měl být kladen do zóny nakonfigurován (nebo pádu zpět do nakonfigurován výchozí zóna), a nějaká pravidla spojená s zónu(y) budou použity na související rozhraní.
můžeme ověřit, zda je spuštěna služba a dosažitelné psaní:
- sudo firewall-cmd --state
outputrunning
To znamená, že firewall je nahoru a běží s výchozí konfiguraci.
seznámení s Aktuální Pravidla brány Firewall
předtím, Než začneme dělat úpravy, měli bychom se seznámit s výchozím prostředí a pravidla stanovená daemon.
zkoumáním výchozích hodnot
můžeme zjistit, která zóna je aktuálně vybrána jako výchozí zadáním:
- firewall-cmd --get-default-zone
outputpublic
Od doby, co jsme nedali firewalld
žádné příkazy, aby se odchýlit od výchozí zóna, a žádný z našich rozhraní jsou nakonfigurován tak, aby vázat se na jiné pásmo, které zóny bude také jen „aktivní“ zóny (zóna, která je ovládající provoz pro naše rozhraní). Můžeme ověřit, že zadáním:
- firewall-cmd --get-active-zones
outputpublic interfaces: eth0 eth1
Zde můžeme vidět, že náš příklad server má dvě síťová rozhraní je řízen firewallem (eth0
a eth1
). Obě jsou v současné době spravovány podle pravidel definovaných pro veřejnou zónu.
jak víme, jaká pravidla jsou však spojena s veřejnou zónou? Můžeme vytisknout výchozí zóna je konfigurace zadáním:
- sudo firewall-cmd --list-all
outputpublic (default, active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
můžeme říct, z výstupu, že tato zóna je oba výchozí a aktivní, a že eth0
a eth1
rozhraní jsou spojené s touto zónou (to už jsme věděli tohle všechno z našich předchozích šetření). Můžeme však také vidět, že tato zóna umožňuje normální operace spojené s klientem DHCP (pro přiřazení IP adresy) a SSH (pro vzdálenou správu).
zkoumání alternativních zón
nyní máme dobrou představu o konfiguraci Výchozí a aktivní zóny. Můžeme zjistit i informace o dalších zónách.
získat seznam dostupných zón, typ:
- firewall-cmd --get-zones
outputblock dmz drop external home internal public trusted work
můžeme vidět konkrétní konfiguraci související s zone, včetně --zone=
parametr --list-all
příkaz:
- sudo firewall-cmd --zone=home --list-all
outputhome interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
můžete výstup všechny zóny definice pomocí --list-all-zones
možnost. Pravděpodobně budete chtít přenést výstup do pageru pro snadnější prohlížení:
- sudo firewall-cmd --list-all-zones | less
Výběr Pásma pro Rozhraní
Pokud jste nakonfigurovali vaše síťová rozhraní jinak, každé rozhraní bude uveden ve výchozí zóně, je-li firewall spuštěn.
Změna Pásma Rozhraní
můžete přechodové rozhraní mezi zónami během relace pomocí --zone=
parametr v kombinaci s --change-interface=
parametr. Stejně jako u všech příkazů, které upravují bránu firewall, budete muset použít sudo
.
například můžeme převést naše rozhraní eth0
do zóny „domů“ zadáním tohoto:
- sudo firewall-cmd --zone=home --change-interface=eth0
outputsuccess
když jste v přechodu, rozhraní pro nové zóny, být vědomi toho, že jste pravděpodobně změnou služby, které bude funkční. Zde se například přesouváme do“ domovské “ zóny, která má k dispozici SSH. To znamená, že naše spojení by nemělo klesnout. Některé jiné zóny nemají ve výchozím nastavení povoleno SSH a pokud dojde k přerušení připojení při používání jedné z těchto zón, můžete se znovu přihlásit.
můžeme ověřit, že to bylo úspěšné tím, že znovu požádáme o aktivní zóny:
- firewall-cmd --get-active-zones
outputhome interfaces: eth0public interfaces: eth1
Nastavení Výchozí Zóna
Pokud jsou všechny vaše rozhraní může být nejlépe řešeny prostřednictvím jediného zóny, je to asi jednodušší vybrat nejlepší výchozí zóna a pak použít, že pro vaše konfigurace.
výchozí zónu můžete změnit parametrem --set-default-zone=
. To bude okamžitě změnit nějaké rozhraní, které spadl zpět na výchozí do nové zóny:
- sudo firewall-cmd --set-default-zone=home
outputsuccess
Nastavení Pravidla pro vaše Aplikace
základní způsob, jak definovat výjimky brány firewall pro služby, které chcete zpřístupnit je snadné. Projdeme si základní myšlenku zde.
přidání služby do zón
nejjednodušší metodou je přidání služeb nebo portů, které potřebujete, do zón, které používáte. Znovu, můžete získat seznam dostupných služeb s --get-services
možnost:
- firewall-cmd --get-services
outputRH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
můžete získat více podrobnosti o každé z těchto služeb při pohledu na jejich spojené .xml
soubor v /usr/lib/firewalld/services
adresář. Například služba SSH je definována takto:
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>
službu pro zónu můžete povolit pomocí parametru --add-service=
. Operace se zaměří na výchozí zónu nebo na jakoukoli zónu určenou parametrem --zone=
. Ve výchozím nastavení se tím upraví pouze aktuální relace brány firewall. Trvalou konfiguraci brány firewall můžete upravit zahrnutím příznaku --permanent
.
například, pokud jsme běží webový server slouží běžného HTTP provozu, můžeme povolit tento přenos pro rozhraní v naší „veřejnosti“ zóna pro tuto relaci zadáním:
- sudo firewall-cmd --zone=public --add-service=http
pokud chcete změnit výchozí zónu, můžete vynechat --zone=
. Můžeme ověřit, že operace byla úspěšná pomocí --list-all
nebo --list-services
operace:
- sudo firewall-cmd --zone=public --list-services
outputdhcpv6-client http ssh
pokud jste vyzkoušeli, že vše funguje tak, jak má, budete pravděpodobně chtít změnit trvalé pravidla brány firewall tak, aby vaše služba bude stále k dispozici po restartu. Můžeme změnit naši“ veřejnou “ zónu trvalým zadáním:
- sudo firewall-cmd --zone=public --permanent --add-service=http
outputsuccess
můžete ověřit, že to bylo úspěšné přidáním příznaku --permanent
do operace --list-services
. Pro jakékoli operace --permanent
musíte použít sudo
:
- sudo firewall-cmd --zone=public --permanent --list-services
outputdhcpv6-client http ssh
vaše“ veřejná “ zóna nyní umožní webový provoz HTTP na portu 80. Pokud je váš webový server nakonfigurován pro použití SSL / TLS, budete také chtít přidat službu https
. Můžeme to přidat k aktuální relaci a trvalému pravidlu-nastaveno zadáním:
- sudo firewall-cmd --zone=public --add-service=https
- sudo firewall-cmd --zone=public --permanent --add-service=https
co když není k dispozici žádná vhodná služba?
služby brány firewall, které jsou součástí instalace firewalld, představují mnoho nejčastějších požadavků na aplikace, ke kterým můžete povolit přístup. Pravděpodobně však budou existovat scénáře, kdy tyto služby neodpovídají vašim požadavkům.
v této situaci máte dvě možnosti.
Otevření Portu pro vaše Zóny
nejjednodušší způsob, jak přidat podporu pro vaši konkrétní aplikaci je otevřít porty, které používá v příslušné zóně(s). To je stejně snadné jako zadání portu nebo rozsahu portů a přidruženého protokolu pro porty, které potřebujete otevřít.
například, pokud naše aplikace běží na portu 5000 a používá TCP, můžeme přidat k „veřejné“ zóna pro tuto relaci pomocí --add-port=
parametr. Protokoly mohou být buď tcp
nebo udp
:
- sudo firewall-cmd --zone=public --add-port=5000/tcp
outputsuccess
můžeme ověřit, že to bylo úspěšné pomocí --list-ports
operace:
- sudo firewall-cmd --zone=public --list-ports
output5000/tcp
je také možné zadat sekvenční rozsah portů oddělením začíná a končí v přístavu v rozmezí s pomlčkou. Například, pokud naše aplikace používá UDP porty 4990 do 4999, mohli bychom otevřít na „veřejné“ zadáním:
- sudo firewall-cmd --zone=public --add-port=4990-4999/udp
Po testování, bychom pravděpodobně chtít přidat tyto stálé firewall. Můžete to udělat zadáním:
- sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
- sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
- sudo firewall-cmd --zone=public --permanent --list-ports
outputsuccesssuccess5000/tcp 4990-4999/udp
definování služby
otevření portů pro vaše zóny je snadné, ale může být obtížné sledovat, k čemu je každá z nich určena. Pokud jste někdy zrušili službu na vašem serveru, můžete si jen těžko pamatovat, které porty, které byly otevřeny, jsou stále vyžadovány. Aby se předešlo této situaci, je možné definovat službu.
služby jsou jednoduše kolekce portů s přidruženým názvem a popisem. Používání služeb je jednodušší spravovat než porty, ale vyžaduje trochu práce předem. Nejjednodušší způsob, jak začít, je zkopírovat existující skript (nalezený v /usr/lib/firewalld/services
) do adresáře /etc/firewalld/services
, kde firewall hledá nestandardní definice.
například bychom mohli zkopírovat definici služby SSH, kterou použijeme pro naši definici služby“ příklad“, jako je tato. Celým názvem mínus .xml
přípona bude diktovat název služby v rámci služby seznam brány firewall:
- sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml
Nyní můžete upravit definici nalézt v souboru, který jste zkopírovali:
sudo vi /etc/firewalld/services/example.xml
Pro spuštění, soubor bude obsahovat SSH definice, které jste zkopírovali:
<?xml version="1.0" encoding="utf-8"?><service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/></service>
většina této definice je ve skutečnosti metadata. Budete chtít změnit krátký název služby ve značkách <short>
. Toto je pro vaši službu čitelné jméno. Měli byste také přidat popis, abyste měli více informací, pokud budete někdy potřebovat audit služby. Jedinou konfigurací, kterou musíte provést, která skutečně ovlivňuje funkčnost služby, bude pravděpodobně definice portu, kde identifikujete číslo portu a protokol, který chcete otevřít. To lze zadat vícekrát.
pro naši“ příkladovou “ službu si představte, že potřebujeme otevřít port 7777 pro TCP a 8888 pro UDP. Vstupem do režimu vložení stisknutím i
můžeme stávající definici upravit takto:
<?xml version="1.0" encoding="utf-8"?><service> <short>Example Service</short> <description>This is just an example service. It probably shouldn't be used on a real system.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/></service>
stiskněte ESC
a poté zadejte :x
pro uložení a zavření souboru.
Reload firewall získat přístup k nové služby:
- sudo firewall-cmd --reload
můžete vidět, že to je teď mezi seznam dostupných služeb:
- firewall-cmd --get-services
outputRH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch example freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
nyní můžete použít tuto službu ve vašem zón, jak jste normálně by.
vytvoření vlastních zón
zatímco předdefinované zóny budou pro většinu uživatelů pravděpodobně více než dostačující, může být užitečné definovat vlastní zóny, které jsou více popisné jejich funkce.
můžete například vytvořit zónu pro váš webový server nazvanou „publicweb“. Možná však budete chtít nakonfigurovat jinou zónu pro službu DNS, kterou poskytujete ve své soukromé síti. K tomu byste mohli chtít zónu zvanou „privateDNS“.
při přidávání zóny ji musíte přidat do trvalé konfigurace brány firewall. Poté můžete znovu načíst konfiguraci do spuštěné relace. Například, můžeme vytvořit dvě zóny, které jsme diskutovali nad zadáním:
- sudo firewall-cmd --permanent --new-zone=publicweb
- sudo firewall-cmd --permanent --new-zone=privateDNS
můžete Si ověřit, že jsou přítomny ve vašem trvalé konfigurace zadáním:
- sudo firewall-cmd --permanent --get-zones
outputblock dmz drop external home internal privateDNS public publicweb trusted work
Jak bylo uvedeno dříve, tyto nebudou k dispozici v aktuální instanci firewall ještě:
- firewall-cmd --get-zones
outputblock dmz drop external home internal public trusted work
Znovu načtěte bránu firewall, aby tyto nové zóny do aktivní konfigurace:
- sudo firewall-cmd --reload
- firewall-cmd --get-zones
outputblock dmz drop external home internal privateDNS public publicweb trusted work
Nyní, můžete začít přiřazení příslušné služby a porty pro vaše zóny. Obvykle je vhodné upravit aktivní instanci a po testování tyto změny přenést do trvalé konfigurace. Například, pro „publicweb“ zóny, možná budete chtít přidat SSH, HTTP a HTTPS služby:
- sudo firewall-cmd --zone=publicweb --add-service=ssh
- sudo firewall-cmd --zone=publicweb --add-service=http
- sudo firewall-cmd --zone=publicweb --add-service=https
- sudo firewall-cmd --zone=publicweb --list-all
outputpublicweb target: default icmp-block-inversion: no interfaces: sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Stejně tak můžeme přidat službu DNS, aby naše „privateDNS“ zóny:
- sudo firewall-cmd --zone=privateDNS --add-service=dns
- sudo firewall-cmd --zone=privateDNS --list-all
outputprivateDNS interfaces: sources: services: dns ports: masquerade: no forward-ports: icmp-blocks: rich rules:
Můžeme pak změnit naše rozhraní do těchto nových oblastí, aby je otestovali:
- sudo firewall-cmd --zone=publicweb --change-interface=eth0
- sudo firewall-cmd --zone=privateDNS --change-interface=eth1
V tomto bodě, budete mít možnost vyzkoušet své konfigurace. Pokud tyto hodnoty fungují pro vás, budete chtít přidat stejná pravidla do trvalé konfigurace. Můžete to udělat tím, re-použití pravidla s --permanent
vlajky:
- sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
- sudo firewall-cmd --zone=publicweb --permanent --add-service=http
- sudo firewall-cmd --zone=publicweb --permanent --add-service=https
- sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns
Po trvale uplatňování těchto pravidel, můžete restartovat vaši síť a reload firewall service:
- sudo systemctl restart network
- sudo systemctl reload firewalld
Ověřit, že správné zóny byly přiřazeny:
- firewall-cmd --get-active-zones
outputprivateDNS interfaces: eth1publicweb interfaces: eth0
A ověřit, že příslušné služby jsou k dispozici pro obě zóny:
- sudo firewall-cmd --zone=publicweb --list-services
outputhttp https ssh
- sudo firewall-cmd --zone=privateDNS --list-services
outputdns
úspěšně Jste nastavit vlastní zóny! Pokud chcete, aby se jeden z těchto zón výchozí pro další rozhraní, nezapomeňte nastavit, že chování s --set-default-zone=
parametr:
sudo firewall-cmd --set-default-zone=publicweb
Závěr
nyní Byste měli mít docela dobrou představu o tom, jak spravovat firewalld služby na vašem systému CentOS pro den-to-denní použití.
služba firewalld umožňuje konfigurovat udržovatelná pravidla a sady pravidel, které berou v úvahu vaše síťové prostředí. To umožňuje bezproblémový přechod mezi různými zásady brány firewall pomocí zón a dává administrátorům schopnost abstraktní řízení přístavu do více přátelské služby, definice. Získání pracovních znalostí o tomto systému vám umožní využít flexibilitu a sílu, kterou tento nástroj poskytuje.