V následujícím článku vám ukážeme, jak můžete zabezpečit a chránit svůj virtuální server založený na Ubuntu nebo Debianu pomocí firewallu aplikace s názvem iptables.
Co je to iptables?
Jedná se o aplikační program pro uživatelský prostor, který umožňuje správci systému konfigurovat tabulky poskytované firewallem jádra Linuxu (implementované jako různé moduly Netfilter ) a řetězce a pravidla, která ukládá.
Chcete-li snížit počet pokusů o vloupání a filtrovat porty otevřené na vašem virtuálním serveru, je nutné správně nakonfigurovat firewall .
Abychom vám usnadnili správu pravidel brány firewall vašeho serveru, poskytneme jednoduchý skript Shell, který vám pomůže se správou pravidel brány firewall. V podstatě vždy, když potřebujete změnit pravidla brány firewall, použijete tento skript k přidání/odebrání požadovaných pravidel.
NASTAVENÍ PRAVIDEL FIREWALL
Než pravidla zabalíte do skriptu, rozdělíme jej do sekcí, abyste věděli, jak vypadá firewall a jaká pravidla budou platit.
PROPLACHNĚTE STARÁ PRAVIDLA
Pravidla brány firewall lze vyprázdnit pomocí následujících příkazů:
## iptables --flush ## iptables --delete-chain ## iptables --table nat --flush ## iptables --table nat --delete-chain
URČENÍ SERVISNÍCH PORTŮ
Musíte vědět, jaké služby jste zpřístupnili veřejnosti, abyste pro ně mohli nastavit vhodná pravidla. Jedním ze způsobů, jak zjistit, které služby naslouchají na jakých portech, je použít netstat
nebo ss
příkazy jako v:
## netstat -tunlp or ## ss -tunlp
například používáme jeden z našich virtuálních serverů Ubuntu 12.04 LTS a následující je výstup netstat
příkaz:
## netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 296/mysqld tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 209.135.140.77:53 0.0.0.0:* LISTEN 353/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 173/vsftpd tcp 0 0 0.0.0.0:5622 0.0.0.0:* LISTEN 630/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 261/dovecot udp 0 0 209.135.140.77:53 0.0.0.0:* 353/named udp 0 0 127.0.0.1:53 0.0.0.0:* 353/named
takže to znamená, že máme následující porty otevřené pro veřejnost:
- 25 (smtp)
- 587 (odeslání smtp)
- 110 (pop3)
- 143 (imap)
- 993 (imap ssl)
- 995 (pop3 ssl)
- 80 (http)
- 443 (https)
- 53 (dns)
- 21 (ftp)
- 5622 (ssh)
NASTAVTE VÝCHOZÍ ZÁSADY
dobře, takže teď můžeme nastavit zásady našeho firewallu na DROP vše v INPUT a Vpřed řetězců a povolit provoz na OUTPUT řetěz.
výchozí tabulka filter
obsahuje tři vestavěné řetězce:
- Příchozí provoz adresovaný samotnému počítači narazí na řetězec INPUT.
- Odchozí, místně generovaný provoz zasáhne OUTPUT řetězec.
- Směrovaný provoz, který by neměl být doručován místně, zasáhne řetězec FORWARD.
zkontrolujte man 8 iptables
pro více informací o tomto
výchozí zásady lze použít pomocí následujících příkazů:
## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out ## iptables -P FORWARD DROP ## iptables -P OUTPUT ACCEPT
NASTAVENÍ PRAVIDEL FIREWALL
Další věc, kterou musíte udělat, je skutečně nastavit pravidla brány firewall pro naše služby. Vzhledem k tomu, že řetězec INPUT je VYPNUTÝ, budeme muset přidat na seznam povolených služeb, které naslouchají na veřejných portech, takže:
první věcí je umožnit bezplatné používání loopback interfaces
, aby bylo zajištěno, že všechny relace TCP by měly začínat SYN a aby byly povoleny vytvořené a související pakety:
## iptables -A INPUT -i lo -j ACCEPT ## iptables -A OUTPUT -o lo -j ACCEPT ## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
dále otevřeme porty našich služeb pomocí pravidel brány firewall jako:
### SSH ## iptables -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT ### HTTP ## iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT ### SMTP ## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
a tak dále. Jakmile jsou všechny služby na seznamu povolených, je dobré povolit pakety ICMP a vše ostatní v řetězci INPUT LOGOVAT a DROP.
## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT ## iptables -A INPUT -j LOG ## iptables -A INPUT -j DROP
ULOŽTE/OBNOVTE PRAVIDLA FIREWALL
Pravidla brány firewall nejsou ve výchozím nastavení trvalá, což znamená, že budou ztracena, pokud například restartujete virtuální server. Chcete-li uložit aktuální firewall do /etc/fwall.rules
použili byste něco jako:
## iptables-save > /etc/fwall.rules
a k obnovení uložených pravidel byste použili něco jako:
## iptables-restore -c /etc/fwall.rules
aby se pravidla automaticky obnovila při startu systému, museli byste buď použít balíček s názvem iptables-persistent
nebo můžete jednoduše vytvořit skript v /etc/network/if-pre-up.d
který načte pravidla uložená v /etc/fwall.rules
, například:
## vim /etc/network/if-pre-up.d/iptables #!/bin/bash test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules ## chmod +x /etc/network/if-pre-up.d/iptables
SCRIPT FIREWALL
uložte skript do /usr/local/bin/fwall-rules
a udělejte jej spustitelný
#!/bin/bash IPTABLES=/sbin/iptables echo " * flushing old rules" ${IPTABLES} --flush ${IPTABLES} --delete-chain ${IPTABLES} --table nat --flush ${IPTABLES} --table nat --delete-chain echo " * setting default policies" ${IPTABLES} -P INPUT DROP ${IPTABLES} -P FORWARD DROP ${IPTABLES} -P OUTPUT ACCEPT echo " * allowing loopback devices" ${IPTABLES} -A INPUT -i lo -j ACCEPT ${IPTABLES} -A OUTPUT -o lo -j ACCEPT ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## BLOCK ABUSING IPs HERE ## #echo " * BLACKLIST" #${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP #${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP echo " * allowing ssh on port 5622" ${IPTABLES} -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT echo " * allowing ftp on port 21" ${IPTABLES} -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT echo " * allowing dns on port 53 udp" ${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT echo " * allowing dns on port 53 tcp" ${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT echo " * allowing http on port 80" ${IPTABLES} -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT echo " * allowing https on port 443" ${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT echo " * allowing smtp on port 25" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT echo " * allowing submission on port 587" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT echo " * allowing imaps on port 993" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT echo " * allowing pop3s on port 995" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT echo " * allowing imap on port 143" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT echo " * allowing pop3 on port 110" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT echo " * allowing ping responses" ${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT # DROP everything else and Log it ${IPTABLES} -A INPUT -j LOG ${IPTABLES} -A INPUT -j DROP # # Save settings # echo " * SAVING RULES" if [[ -d /etc/network/if-pre-up.d ]]; then if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables chmod +x /etc/network/if-pre-up.d/iptables fi fi iptables-save > /etc/fwall.rules iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules
pro aktivaci pravidel, která jste připravili ve skriptu, stačí provést
## fwall-rules
z příkazového řádku. Chcete-li přidat nebo odebrat pravidlo, stačí otevřít skript, přidat nebo odebrat požadované pravidlo, uložit a znovu spustit, například:
## fwall-rules * flushing old rules * setting default policies * allowing loopback devices * allowing ssh on port 5622 * allowing ftp on port 21 * allowing dns on port 53 udp * allowing dns on port 53 tcp * allowing http on port 80 * allowing https on port 443 * allowing smtp on port 25 * allowing submission on port 587 * allowing imaps on port 993 * allowing pop3s on port 995 * allowing imap on port 143 * allowing pop3 on port 110 * allowing ping responses * SAVING RULES
Samozřejmě nemusíte nic z toho dělat, pokud používáte některou z našich hostingových služeb Linux VPS, v takovém případě můžete jednoduše požádat naše odborné linuxové administrátory, aby to udělali za vás. Jsou k dispozici 24×7 a okamžitě se postarají o váš požadavek.
PS. Pokud se vám tento příspěvek líbil, sdílejte jej se svými přáteli na sociálních sítích pomocí tlačítek vlevo nebo jednoduše zanechte odpověď níže. Děkuji.