為什么防火墻如此重要?開放 Internet 上的安全性每天都變得越來越重要。隨著互聯網和互聯網素養的增長,現在全世界都可以感受到專用/虛擬服務器的好處。
對于許多人來說,個人數據和 Web 服務的可訪問性已成為日常生活中不可或缺的一部分。具有可訪問性的好處意味著該服務是面向公眾的,這使得該服務容易受到不良和看似隨機的連接的影響。
通常使用機器人和欺騙性 IP 地址進行,在開放的 Internet 上體驗登錄嘗試、端口掃描和其他侵入性活動的情況并不少見。有一些基本的安全和防火墻實踐可以幫助防止這些活動變成更令人擔憂的問題。
如果沒有防火墻,您的開放端口如下所示:
首先,為了幫助掌握這些連接背后的動機,我們使用了一臺新安裝的服務器來記錄 2 天內的傳入連接。在沒有防火墻阻止與服務器的連接的情況下,可以分析日志數據以查明集中區域。
技術信息
操作系統:CentOS 7 + cPanel
(禁用 cPHulk)
– 使用 iptables 記錄連接,并記錄到以下目錄 –
/etc/rsyslog.d/my_iptables.conf
:msg,contains,"[netfilter] " /var/log/iptables.log
以下 iptables 規則用于將 NEW(state) 入站數據包記錄到 eth0
iptables -A INPUT -i eth0 -m state --state NEW -j LOG --log-prefix='[netfilter] '
示例日志條目?
Jun 15 08:02:27 gigenet kernel: [netfilter] IN=eth0 OUT= MAC=d6:f4:8e:aa:a7:94:00:25:90:0a:ad:1c:08:00 SRC=<remote IP> DST=<server IP> LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=24288 PROTO=TCP SPT=54102 DPT=1433 WINDOW=1024 RES=0x00 SYN URGP=0
(IP 地址已被刪除)
SRC – 源 IP 地址
DST – 目標 IP 地址
SPT——源端口
DPT – 目標端口
PROTO——互聯網協議
創建了一個腳本來分析和格式化日志數據
[root@gigenet ~]# ./analyze-iptableslog.sh
日志文件:iptables-1.log
記錄日期
# awk 'NR==1{print "Start Date: " $1, $2, $3;}; END{print "End Date: " $1, $2, $3;}' iptables-1.log
開始日期:6月13日08:02:21
結束日期:6月15日08:02:27
記錄的新連接總數
# wc -l iptables-1.log
?16299 iptables-1.log
每個協議的連接數
# awk '{for (i=1;i<=NF;i++) if( ~/PROTO=/) print $i}' iptables-1.log | sort | uniq -c | sort -rn
15900 PROTO=TCP
366 PROTO=UDP
33 PROTO=ICMP
唯一 SRC IP 地址數
# awk '{for (i=1;i<=NF;i++) if( ~/SRC=/) print $i}' iptables-1.log | sort -n | uniq | wc -l
2886 IP Addresses
具有 DPT 的實體數(Total-ICMP)
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-1.log | wc -l
16266 DPT Connections
唯一 DPT 命中數
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-1.log | sort -n | uniq | wc -l
1531 Unique DPT
每個 DPT 的連接數,前 15 名
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-1.log | sort -n | uniq -c | sort -rn | head -n 15
9595 DPT=22
1309 DPT=80
885 DPT=445
742 DPT=23
188 DPT=8000
157 DPT=1433
153 DPT=5060
111 DPT=8080
90 DPT=8545
90 DPT=3389
83 DPT=81
80 DPT=3306
73 DPT=443
67 DPT=2323
44 DPT=8888
如何使用防火墻緩解端口
數據顯示了主要的聯系目的地港口。正如預期的那樣,具有最大連接量的端口對于 Linux 和 Windows Web 服務很常見。
端口 22 – Secure Shell(SSH)
端口 23 – telnet
端口 80 – Http
端口 445 – SMB(Windows 網絡文件共享)
端口 1433 – MSSQL
端口 3306 – MYSQL
端口 3389 – RDP
根據正在運行的服務,這些端口可能需要對遠程服務可用。注意的端口是 SSH 端口 22、telnet 端口 23 和 RDP 端口 3389。
理想情況下,系統防火墻應將這些連接僅限于特定 IP 地址。此外,機器人通常被編程為以默認端口為目標。因此,更改默認 SSH 和 RDP 端口將有助于防止入侵。
- 更改 SSH 端口(Linux、Freebsd)
- SSH 配置文件:
/etc/ssh/sshd_config
修改不常用端口(0-65535)的行
- 端口 22
重啟 SSHD:
- CentOS:服務 sshd 重啟
- Debian:服務 ssh 重啟
- FreeBSD:/etc/rc.d/sshd 重啟
更改 RDP 端口(Windows)
- Windows RDP 永遠不應向公眾開放。如有必要,應更改 RPD 端口以最小化匿名連接。
打開注冊表編輯器
- 找到以下注冊表子項:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber
將 Decimal 值修改為未使用的端口,單擊 OK。重啟。
基本防火墻設置
有許多防火墻服務可以作為主要的安全模式。提供了一些幫助入門的基本規則命令。
1.添加iptables規則
iptables 是最常見、最熟悉的 Linux 防火墻。CentOS <=6 的默認防火墻,iptables 經常被用作 Linux 的基線防火墻。
基本規則
- 允許已建立的連接:iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
- 允許輸入策略:iptables -P INPUT ACCEPT
- 允許IP:iptables -A INPUT -s 120.0.0.1/32 -j ACCEPT
- 允許 IP/端口:iptables -A INPUT -s 120.0.0.1/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
- 允許 lo(localhost) 接口:iptables -A INPUT -i lo -j ACCEPT
- 允許 Ping:iptables -A INPUT -p icmp -j ACCEPT
- 允許端口:iptables -A INPUT -p tcp –dport 22 -j ACCEPT
- 插入允許 IP(位置 5):iptables -I INPUT 5 -s 120.0.0.1/32 -j ACCEPT
- 插入允許 IP/多端口:iptables -I INPUT 5 -s 127.0.0.1/32 -p tcp -m state –state NEW -m multiport –dport port#1,port#2 -j ACCEPT
(或者,將“ACCEPT”替換為“DROP”以拒絕)
使用 -D 選項刪除現有規則:
- ?刪除允許IP:iptables -D INPUT -s 120.0.0.1/32 -j ACCEPT
拒絕其余的,拒絕(阻止)之前規則中未定義的所有連接。
- iptables -A -j REJECT –reject-with icmp-host-prohibited
沖洗規則
- iptables -F
2. 基本的 firewalld 命令
Firewalld 在 CentOS 7 中具有突出的特點。Firewalld 本質上提供了更多人類可讀的命令來提交 iptables 規則。
可操作,打印當前狀態信息
- 狀態:firewall-cmd –state
- 啟動/停止:systemctl start/stop firewalld.service
- 開機啟動:systemctl enable firewalld
區域信息,pinrt 區域參數
- 默認區域:firewall-cmd –get-default-zone
- 默認區域信息:firewall-cmd –list-all
- 列出區域:firewall-cmd –get-zones
- 區域信息:firewall-cmd –zone=public –list-all
修改區域
- 創建新區域:firewall-cmd –permanent –new-zone=new_zone – 更改默認區域:firewall-cmd –set-default-zone=public
- 更改接口:firewall-cmd –zone=public –change-interface=eth0
修改規則,區域的子網
- 允許服務:firewall-cmd –zone=public –add-service=http
- 允許端口:firewall-cmd –zone=public –add-port=22/tcp
- 列出服務:firewall-cmd –get-services
- 列出允許的服務:firewall-cmd –zone=public –list-services
- 列出允許的端口:firewall-cmd –list-ports
- 允許 IP/Port/Proto 使用富規則、顯式規則
- firewall-cmd –permanent –zone=public –add-rich-rule='rule family=”ipv4″ source address=”127.0.0.1/32″ port protocol=”tcp” port=”22″ accept'
(使用 –permanent 選項為重新啟動創建持久規則)
3.基本的ufw規則
作為 ufw(UncomplicatedFirewall) 引入,在 Ubuntu 8.04+ 中受支持,它作為 Ubuntu 系統的默認防火墻提供。
操作
- 啟用/禁用:ufw 啟用/禁用
- 打印規則:ufw status verbose
允許規則
- 允許端口:ufw allow 22
- 允許 IP:ufw 允許來自 127.0.0.1
- Allow IP/Port/TCP: ufw allow from 127.0.0.1 to any port 22 proto tcp
- (或者,用“允許”代替“拒絕”來代替拒絕規則)
刪除現有規則
- ufw 從 127.0.0.1 刪除允許
4. Windows 防火墻(Windows Server 2008 a newer)
控制面板 >> Windows 防火墻 >> 高級設置 >> 入站/出站 >> 新規則
獎勵:cPanel 工具 – cpHulk(?)
作為測試用例,WHM 的 cPHulk Bruteforce Protection 使用默認設置啟用。在記錄的 24 小時內,iptables 記錄的新連接明顯減少。
[root@gigenet ~]# ./analyze-iptableslog.sh
日志文件:iptables-cphulk.log
記錄日期
# awk 'NR==1{print "Start Date: " $1, $2, $3;}; END{print "End Date: " $1, $2, $3;}' iptables-cphulk.log
開始日期:6月19日04:31:43
結束日期:6月20日04:53:53
記錄的新連接總數
# wc -l iptables-cphulk.log
3223 iptables-cphulk.log
每個協議的連接數
# awk '{for (i=1;i<=NF;i++) if( ~/PROTO=/) print $i}' iptables-cphulk.log | sort | uniq -c | sort -rn
2974 PROTO=TCP
213 PROTO=UDP
36 PROTO=ICMP
唯一 SRC IP 地址數
# awk '{for (i=1;i<=NF;i++) if( ~/SRC=/) print $i}' iptables-cphulk.log | sort -n | uniq | wc -l
1432 IP Addresses
具有 DPT 的實體數(Total-ICMP)
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-cphulk.log | wc -l
3187 DPT Connections
唯一 DPT 命中數
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-cphulk.log | sort -n | uniq | wc -l
943 Unique DP
每個 DPT 的連接數,前 15 名
# awk '{for (i=1;i<=NF;i++) if( ~/DPT=/) print $i}' iptables-cphulk.log | sort -n | uniq -c | sort -rn | head -n 15
415 DPT=445
270 DPT=23
257 DPT=22
233 DPT=80
97 DPT=5060
72 DPT=1433
59 DPT=8545
53 DPT=8000
50 DPT=81
49 DPT=8080
46 DPT=443
41 DPT=3389
34 DPT=25
33 DPT=3306
27 DPT=2323