為了加強集團服務器的安全性,近期啟用了堡壘機,同時就需要對所有業務服務器的ssh進行訪問限制,僅允許指定IP訪問(堡壘機),其他IP來源則不允許放行。
修改配置文件,實現允許指定用戶/用戶組或者IP登錄
允許指定用戶進行登錄(白名單)
在/etc/ssh/sshd_config 配置文件中設置AllowUsers選項,
在配置文件末尾添加行格式如下(例如允許用戶jituan01通過192.168.1.11登錄)。
AllowUsers?jituan01@192.168.1.11
配置了指定用戶或者用戶組允許登錄后,默認拒絕其他所有用戶或者用戶組。
禁止指定用戶登錄(黑名單)
在 /etc/ssh/sshd_config 配置文件中設置DenyUsers選項,
在配置文件末尾添加行格式如下(例如禁止用戶jituan01登錄)。
DenyUsers?jituan01
上述修改需要重啟sshd服務。
#?service?sshd?restart
Centos 7/EulerOS系列執行以下命令進行重啟:
#?systemctl?restart?sshd
使用DenyHosts允許或者禁止指定IP通過SSH登錄
linux 服務器通過設置 /etc/hosts.allow 和 /etc/hosts.deny 這個兩個文件,
可以限制或者允許某個或者某段IP地址遠程SSH登錄服務器.方法比較簡單,具體如下:
允許192.168.1.10 這個IP地址ssh登錄,打開/etc/hosts.allow,添加如下行:
sshd:?192.168.1.10
禁止所有ip通過ssh登錄,打開/etc/hosts.deny,添加如下行:
sshd:ALL
hosts.allow 和hosts.deny 兩個文件同時設置規則的時候,hosts.allow 文件中的規則優先級高,假設按照上述方法設置后服務器只允許192.168.1.10這個IP地址的SSH登錄,其它的 IP 都會拒絕。
開啟iptable防火墻,禁止指定IP訪問
配置允許訪問的端口
例如默認SSH端口為22,我們可以通過命名:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-A?input?-p?tcp?--dport?22?-j?ACCEPT
開放22端口。我們通過-L -n 就可看到新增加的規則了:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-L?-n Chain?INPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination????????? ACCEPT?????all??--??0.0.0.0/0????????????0.0.0.0/0??????????? ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:22 Chain?FORWARD?(policy?ACCEPT) target?????prot?opt?source???????????????destination???????? Chain?OUTPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination
如果,你想刪除該端口配置。那么可以通過:iptables -D INPUT 2 進行刪除。
ps:每一條規則是按照順序從1開始進行排序的。我們如果想刪除哪條。就選擇刪除哪個就可以了。
如果想刪除OUTPUT或FORWARD,可以設置為:
iptables?-D?OUTPUT?1?或?iptables?-D?FORWARD1
我們如果SSH端口 不是22,可以改為指定的端口。
還可以配置允許 443端口(https請求),80端口(http請求)
[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT?-p?tcp?--dport?80?-j?ACCEPT[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT -p?tcp?--dport?443?-j?ACCEPT
允許已建立的或相關連的通行
[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT?-m?state?--state?ESTABLISHED,RELATED?-j?ACCEPT
上面這個也是必須的,它是允許所有對外請求的返回包。例如在服務器上執行下載或者安裝命令,那么服務器就需要訪問外網數據,那得到的返回數據包對于我們本地服務器來說,就是一個INPUT事件了。
添加成功后在規則中的展示效果如下:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-L?-n Chain?INPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination???????? ACCEPT????all??--??0.0.0.0/0????????????0.0.0.0/0??????????? ACCEPT????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:22 ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:443 ACCEPT?????all??--??0.0.0.0/0????????????0.0.0.0/0????????????state?ESTABLISHED
過濾其他規則
當我們配置完畢允許開放的規則之后,添加過濾規則。有兩種添加方式:
過濾所有非以上規則的請求:iptables -P INPUT DROP。
其他訪問規則禁止訪問:iptables -A INPUT -j REJECT。
上面兩個命令,執行其中一個都可以了。執行第一個命名后的效果:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-L?-n Chain?INPUT?(policy?DROP) target?????prot?opt?source???????????????destination????????? ACCEPT?????all??--??0.0.0.0/0????????????0.0.0.0/0?? ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:22 ACCEPT????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:443 ACCEPT????all??--??0.0.0.0/0????????????0.0.0.0/0????????????state?ESTABLISHED ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:80
我們會看到Chain INPUT (policy ACCEPT) 變成了Chain INPUT (policy DROP)
而如果執行的第二條命名就會:
Chain?INPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination???????? ACCEPT?????all??--??0.0.0.0/0????????????0.0.0.0/0?? ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:22 ACCEPT?????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:443 ACCEPT????all??--??0.0.0.0/0????????????0.0.0.0/0????????????state?ESTABLISHED ACCEPT????tcp??--??0.0.0.0/0????????????0.0.0.0/0????????????tcp?dpt:80????? ?REJECT?????all??--??0.0.0.0/0????????????0.0.0.0/0????????????reject-with?icmp-port-unreachable
到這里,我們的端口開放就配置完畢了。也就是說只有這三個端口才能訪問服務器,如果是其他端口。就會直接被拒絕。
PS:我們可以通過開放和關閉80端口,來驗證一下防火墻是否正常攔截。
注意:你如果是使用的阿里云服務器,在阿里云后臺中的安全組中也要開放相關的端口。否則仍然無法訪問。
屏蔽IP
我們上面指定了固定開放的端口。其他端口全部禁止訪問。如果有攻擊的ip地址,例如通過lastb 命令查詢到的大量工具訪問的ip。我們如何添加到防火墻配置中呢?很簡單,直接指定IP禁止訪問即可:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-I?INPUT?-s?85.31.46.0/24?-j?DROP[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-I?INPUT? -s?170.64.130.0/24?-j?DROP
0/24 代表屏蔽了:
170.64.130.0~170.64.130.255 之間的全部ip。
保存iptables 配置
當我們配置完畢后,需要執行保存操作。否則重啟系統后。規則會丟失。因為當前操作只是存儲在了內存中。
關鍵命令為:service iptables save。具體示例如下所示:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?service?iptables?save iptables:?Saving?firewall?rules?to?/etc/sysconfig/iptables:[??OK??]
就代表保存成功了。我們還可以將iptables添加到自啟動chkconfig中,示例如下:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?chkconfig?iptables?on Note:?Forwarding?request?to?'systemctl?enable?iptables.service'.?Created?symlink?/etc/systemd/system/multi- user.target.wants/iptables.service?→?/usr/lib/systemd/system/iptables.service.?[root@iZuf63tu3fn1swasqa62h8Z?~]#
好了,今天的小知識你學會了嗎?