為了加強(qiáng)集團(tuán)服務(wù)器的安全性,近期啟用了堡壘機(jī),同時(shí)就需要對(duì)所有業(yè)務(wù)服務(wù)器的ssh進(jìn)行訪問限制,僅允許指定IP訪問(堡壘機(jī)),其他IP來源則不允許放行。
修改配置文件,實(shí)現(xiàn)允許指定用戶/用戶組或者IP登錄
允許指定用戶進(jìn)行登錄(白名單)
在/etc/ssh/sshd_config 配置文件中設(shè)置AllowUsers選項(xiàng),
在配置文件末尾添加行格式如下(例如允許用戶jituan01通過192.168.1.11登錄)。
配置了指定用戶或者用戶組允許登錄后,默認(rèn)拒絕其他所有用戶或者用戶組。
禁止指定用戶登錄(黑名單)
在 /etc/ssh/sshd_config 配置文件中設(shè)置DenyUsers選項(xiàng),
在配置文件末尾添加行格式如下(例如禁止用戶jituan01登錄)。
DenyUsers?jituan01
上述修改需要重啟sshd服務(wù)。
centos 6系列執(zhí)行以下命令進(jìn)行重啟:
#?service?sshd?restart
Centos 7/EulerOS系列執(zhí)行以下命令進(jìn)行重啟:
#?systemctl?restart?sshd
使用DenyHosts允許或者禁止指定IP通過SSH登錄
linux 服務(wù)器通過設(shè)置 /etc/hosts.allow 和 /etc/hosts.deny 這個(gè)兩個(gè)文件,
可以限制或者允許某個(gè)或者某段IP地址遠(yuǎn)程SSH登錄服務(wù)器.方法比較簡(jiǎn)單,具體如下:
允許192.168.1.10 這個(gè)IP地址ssh登錄,打開/etc/hosts.allow,添加如下行:
sshd:?192.168.1.10
禁止所有ip通過ssh登錄,打開/etc/hosts.deny,添加如下行:
sshd:ALL
hosts.allow 和hosts.deny 兩個(gè)文件同時(shí)設(shè)置規(guī)則的時(shí)候,hosts.allow 文件中的規(guī)則優(yōu)先級(jí)高,假設(shè)按照上述方法設(shè)置后服務(wù)器只允許192.168.1.10這個(gè)IP地址的SSH登錄,其它的 IP 都會(huì)拒絕。
開啟iptable防火墻,禁止指定IP訪問
配置允許訪問的端口
例如默認(rèn)SSH端口為22,我們可以通過命名:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?iptables?-A?input?-p?tcp?--dport?22?-j?ACCEPT
開放22端口。我們通過-L -n 就可看到新增加的規(guī)則了:
[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 進(jìn)行刪除。
ps:每一條規(guī)則是按照順序從1開始進(jìn)行排序的。我們?nèi)绻雱h除哪條。就選擇刪除哪個(gè)就可以了。
如果想刪除OUTPUT或FORWARD,可以設(shè)置為:
iptables?-D?OUTPUT?1?或?iptables?-D?FORWARD1
我們?nèi)绻鸖SH端口 不是22,可以改為指定的端口。
還可以配置允許 443端口(https請(qǐng)求),80端口(http請(qǐng)求)
[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT?-p?tcp?--dport?80?-j?ACCEPT[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT -p?tcp?--dport?443?-j?ACCEPT
允許已建立的或相關(guān)連的通行
[root@iZuf63tu3fn1swasqa62h8Z?~]#iptables?-A?INPUT?-m?state?--state?ESTABLISHED,RELATED?-j?ACCEPT
上面這個(gè)也是必須的,它是允許所有對(duì)外請(qǐng)求的返回包。例如在服務(wù)器上執(zhí)行下載或者安裝命令,那么服務(wù)器就需要訪問外網(wǎng)數(shù)據(jù),那得到的返回?cái)?shù)據(jù)包對(duì)于我們本地服務(wù)器來說,就是一個(gè)INPUT事件了。
添加成功后在規(guī)則中的展示效果如下:
[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
過濾其他規(guī)則
當(dāng)我們配置完畢允許開放的規(guī)則之后,添加過濾規(guī)則。有兩種添加方式:
過濾所有非以上規(guī)則的請(qǐng)求:iptables -P INPUT DROP。
其他訪問規(guī)則禁止訪問:iptables -A INPUT -j REJECT。
上面兩個(gè)命令,執(zhí)行其中一個(gè)都可以了。執(zhí)行第一個(gè)命名后的效果:
[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
我們會(huì)看到Chain INPUT (policy ACCEPT) 變成了Chain INPUT (policy DROP)
而如果執(zhí)行的第二條命名就會(huì):
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
到這里,我們的端口開放就配置完畢了。也就是說只有這三個(gè)端口才能訪問服務(wù)器,如果是其他端口。就會(huì)直接被拒絕。
PS:我們可以通過開放和關(guān)閉80端口,來驗(yàn)證一下防火墻是否正常攔截。
注意:你如果是使用的阿里云服務(wù)器,在阿里云后臺(tái)中的安全組中也要開放相關(guān)的端口。否則仍然無法訪問。
屏蔽IP
我們上面指定了固定開放的端口。其他端口全部禁止訪問。如果有攻擊的ip地址,例如通過lastb 命令查詢到的大量工具訪問的ip。我們?nèi)绾翁砑拥椒阑饓ε渲弥心??很?jiǎn)單,直接指定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 配置
當(dāng)我們配置完畢后,需要執(zhí)行保存操作。否則重啟系統(tǒng)后。規(guī)則會(huì)丟失。因?yàn)楫?dāng)前操作只是存儲(chǔ)在了內(nèi)存中。
關(guān)鍵命令為:service iptables save。具體示例如下所示:
[root@iZuf63tu3fn1swasqa62h8Z?~]#?service?iptables?save iptables:?Saving?firewall?rules?to?/etc/sysconfig/iptables:[??OK??]
就代表保存成功了。我們還可以將iptables添加到自啟動(dòng)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?~]#
好了,今天的小知識(shí)你學(xué)會(huì)了嗎?