說明
- 收到下面一封郵件,簡單來說就是需要一個虛擬機(jī),外網(wǎng)能ping同,但端口全封,給他們做滲透用。
- 問了需求 不需要登錄,封死所有端口。
所以 就用下面2個方式雙重封死。
iptables拒絕所有端口放開特定端口方法流程
拒絕所有端口
-
命令:
-
iptables -P INPUT DROP
【我這就執(zhí)行了這個進(jìn)的】 -
iptables -P FORWARD DROP
-
iptables -P OUTPUT DROP
-
注:上面執(zhí)行以后,看不到具體規(guī)則且
iptables -F
是無法清除上面規(guī)則的,同時ping也不能使用。 -
測試
允許所有端口
-
命令:
iptables -P INPUT ACCEPT
注:只有這個端口能放開上面拒絕的所有端口,iptables -F
是不能刪除上面規(guī)則的。 -
驗證
之前默認(rèn)是已經(jīng)封堵了,無法訪問百度,允許以后,百度可以訪問
允許特定端口
-
我這需要放開2個ip段的22端口【這是放開端口,下面hosts是ip策略,分開做的】
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-
更多說明
#允許已建立的連接通過【不執(zhí)行也可以,但有些特定版本不執(zhí)行這個可能下面規(guī)則不會生效】
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許 SSH 連接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允許 HTTP 連接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允許 HTTPS 連接
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
臨時規(guī)則寫入配置文件永久生效
- 上面做的是臨時生效的,重啟以后就沒了,想要永久生效,執(zhí)行下面命令【下面配置文件中的規(guī)則是基于iptables服務(wù)的,如果服務(wù)沒啟動,重啟后下面規(guī)則依然不會生效】
- 命令
iptables-save > /etc/sysconfig/iptables
iptables允許ping和拒絕ping
- 首先,我執(zhí)行
iptables -P INPUT DROP
命令以后,外部就ping不通了,我執(zhí)行iptables -F
以后依然ping不通,折騰許久外部都無法ping通,我以為我網(wǎng)絡(luò)出問題了,但每次重啟就好,后來才發(fā)現(xiàn)這個命令的規(guī)則-F清除不掉,臥槽。
禁止允許ping說明
- 下面內(nèi)容來源網(wǎng)絡(luò)整理,自行測試。
內(nèi)核參數(shù)設(shè)置
禁止
- 臨時禁止ping設(shè)置
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
- 永久禁止ping設(shè)置
echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf
- 使/etc/sysctl.conf 配置文件生效
注意:如果/etc/sysctl.conf
配置文件里已經(jīng)有net.ipv4.icmp_echo_ignore_all
字段了,那么直接用 vim 進(jìn)去直接修改0或1即可。
sysctl -p
允許
- 臨時允許ping設(shè)置
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
- 永久允許ping設(shè)置
echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
- 使/etc/sysctl.conf 配置文件生效
注意:如果/etc/sysctl.conf
配置文件里已經(jīng)有net.ipv4.icmp_echo_ignore_all
字段了,那么直接用 vim 進(jìn)去直接修改0或1即可
sysctl -p
防火墻設(shè)置
- 注:使用以下方法的前提是內(nèi)核配置是默認(rèn)值,也就是內(nèi)核沒有禁ping
禁止
- 禁止PING設(shè)置
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
- 上面代碼參數(shù)說明
--icmp-type 8 echo request 表示回顯請求(ping請求)
0/0 表示所有 IP
允許
- 允許PING設(shè)置 【方式1】
進(jìn)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
- 允許PING設(shè)置 【方式2】
進(jìn)
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
- 允許PING設(shè)置 【方式1】
出
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
- 允許PING設(shè)置 【方式2】
出
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
禁止ping
- 我這用的是這種方式
iptables -P INPUT DROP
【慎用,所以端口都無法進(jìn)出】
允許ping
外部ping通虛擬機(jī)內(nèi)部
- 我執(zhí)行了下面命令以后
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
【這條命令執(zhí)行完外部就通虛擬機(jī)了】iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
【好像這個沒生效?】
外部就可以ping通該虛擬機(jī)ip
虛擬機(jī)內(nèi)部使用ping
- 但我發(fā)現(xiàn),虛擬機(jī)內(nèi)部不能使用ping了。我以為是面中的output沒生效。
- 但我最后發(fā)現(xiàn),換個方式執(zhí)行INPUT以后,虛擬機(jī)內(nèi)部就能使用ping了。
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
- 所以這里的output到底是啥邏輯?
- 但我最后發(fā)現(xiàn),換個方式執(zhí)行INPUT以后,虛擬機(jī)內(nèi)部就能使用ping了。
規(guī)則詳細(xì)
至此未知,現(xiàn)在的規(guī)則詳細(xì)如下:
hosts阻止所有ip指定放開ip方法流程
其實上面的iptables已經(jīng)限制的死死的了,但怕iptables出意外,所以用hosts加固一下
允許需要訪問ip
- 這里以sshd服務(wù)為例,配置完成后,只允許配置允許的IP才能ssh連接本機(jī)服務(wù)器,其他IP拒絕
注:一定要先允許在拒絕所有 - 編輯hosts.allow配置文件
vi /etc/hosts.allow
- 允許1個或多個ip
末尾添加允許的IP遠(yuǎn)程登錄本機(jī)服務(wù)器,如果有多個IP,以逗號隔開連續(xù)寫即可
sshd:111.2.3.4,111.6.7.8.9
- 以段添加
添加允許的111.2.3網(wǎng)段的IP遠(yuǎn)程登錄本機(jī)服務(wù)器
sshd:111.2.3.
內(nèi)網(wǎng)地址出公網(wǎng)hosts放開地址說明
-
假如你現(xiàn)在用的內(nèi)網(wǎng)ip地址訪問的公網(wǎng),你在虛擬機(jī)上放開你現(xiàn)在用的ip地址是沒用的
如,我現(xiàn)在用的內(nèi)網(wǎng)ip綁定的路由器,我把內(nèi)網(wǎng)地址和我路由器地址都放開了,依然無法訪問,放開ALL就能訪問 -
如何看內(nèi)網(wǎng)地址轉(zhuǎn)換后訪問過來的地址?
先放開all,正常登錄上虛擬機(jī),然后虛擬機(jī)里面執(zhí)行lastlog
【這個命令會記錄登錄信息】
如下,可以看到我這公網(wǎng)出口地址是70.92結(jié)尾的ip -
現(xiàn)在回到虛擬機(jī)內(nèi)部,放開這個70.92的ip地址,注釋ALL,即可正常訪問了
文章來源:http://www.zghlxwxcb.cn/news/detail-753733.html
拒絕所有
- 編輯hosts.deny配置文件
vi /etc/hosts.deny
- 拒絕所有所有IP遠(yuǎn)程登錄本機(jī)服務(wù)器
末尾添加下面內(nèi)容即可
sshd:ALL
- 我有控制臺,為了驗證生效,我先做的拒絕,再放開
腳本檢測日志異常并自動執(zhí)行封堵
- 可以動態(tài)封鎖ip的,腳本如下,如果怕死循環(huán)影響虛擬機(jī)性能,可以把死循環(huán)去掉,用定時任務(wù)執(zhí)行,比如每分鐘、每小時執(zhí)行一次這樣。
#!/bin/bash
while true; do
# 讀取系統(tǒng)日志文件進(jìn)行監(jiān)測
grep -E "sgdifi|wa/xzwas|wa/higehfd|wa" /var/log/system.log | while read -r log; do
# 解析日志行,獲取用戶信息和相關(guān)IP地址
username=$(echo "$log" | grep -oE "sgdifi|wa/xzwas|wa/higehfd|wa")
ip_address=$(echo "$log" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b")
# 鎖定用戶賬戶
lock_user_account "$username"
# 實施IP封堵
block_ip_address "$ip_address"
done
sleep 300 # 暫停5分鐘后再次監(jiān)測
done
lock_user_account() {
# 鎖定用戶賬戶的實際操作,這里作為示例,將用戶添加到黑名單
echo "$1" >> /etc/blacklist.txt
}
block_ip_address() {
# 封堵IP地址的實際操作,這里作為示例,使用iptables命令封堵IP
iptables -A INPUT -s "$1" -j DROP
}
- 因為放開了攻擊的ip,根據(jù)需求,還是需要采集用戶和ip,所以就根據(jù)登錄失敗的信息,模擬處理方法
上面代碼是GPT生成的,不好使,而且代碼還有點問題不能直接使用,但思路是好的,我根據(jù)上面的思路,去掉了死循環(huán),每分鐘執(zhí)行了一次
函數(shù)調(diào)用的形式寫一個動態(tài)監(jiān)控secure日志文件的sh腳本、過濾出secure日志異常用戶名的ip并用iptables限制
文章來源地址http://www.zghlxwxcb.cn/news/detail-753733.html
到了這里,關(guān)于iptables拒絕所有端口放開特定端口方法流程,iptables允許ping和拒絕ping、hosts阻止所有ip指定放開ip方法流程、腳本檢測日志異常并自動執(zhí)行封堵的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!