一段時間以來,我一直在思考關於iptables的兩件事:大多數正在尋找這些教程的人是初學者,其次,許多人已經在尋找相當簡單且已經詳細闡述的東西。
此示例適用於Web服務器,但是您可以輕鬆添加更多規則並使其適應您的需求。
當您看到ip的“ x”更改時
#!/bin/bash
#我們清理iptables表-F iptables -X#我們清理NAT iptables -t nat -F iptables -t nat -X#修改PPPoE,PPP和ATM iptables的表-t mangle -F iptables -t mangle -X #策略我認為這對初學者來說是最好的方法,並且#仍然不錯,我將解釋所有輸出,因為它們是傳出的連接#輸入我們會丟棄所有內容,並且任何服務器都不應轉發。 iptables -P輸入下降iptables -P輸出接受iptables -P轉發下降#Intranet LAN intranet = eth0 #Extranet wan Extranet = eth1#保持狀態。 已連接(建立)的所有內容都像這樣:iptables -A INPUT -m state --state ESTABLISHED,相關-j ACCEPT#循環設備。 iptables -A INPUT -i lo -j ACCEPT#http,https,我們未指定接口,因為#我們希望它適用於所有iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp-dport 443 -j ACCEPT#僅在內部以及ip iptables範圍內的ssh -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT#監控例如它們是否具有zabbix或其他一些snmp服務iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet -dport 10050 -j ACCEPT#icmp,ping iptables -A INPUT -p icmp -s 192.168。 xx / 24-i $ intranet -j ACCEPT #mysql with postgres是端口5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh如果要發送一些郵件#iptables -A輸出-p tcp --dport 25 -j接受#防欺騙09年07月2014日#SERVER_IP =“ 190.xxx”#服務器IP-服務器的真實局域網IP LAN_RANGE =“ 192.168.xx /您的網絡或VLAN的21“#LAN範圍#IP永遠不要進入Extranet,如果我們有一個純WAN接口,則將使用#邏輯,它永遠不應通過該接口輸入#LAN類型的流量SPOOF_IPS =“ 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 .16 / XNUMX“#默認操作-在任何規則與ACTION =” DROP“匹配時執行。#通過wan iptables與我的服務器的IP相同的數據包-A INPUT -i $ Extranet -s $ SERVER_IP -j $ ACTION# iptables -A OUTPUT -o $ Extranet -s $ SERVER_IP -j $ ACTION#與WAN的LAN範圍有關的數據包,如果您有#任何特定的網絡,我就這樣說,但這是多餘的,其中包含以下#規則iptables -A INPUT -i $ Extranet -s $ LAN_RANGE -j $ ACTION的iptables -A OUTPUT -o $ Extranet -s $ LAN_RANGE -j $ ACTION ##的所有SPOOF網絡都是廣域網不允許ip輸入的$ SPOOF_IPS做iptables -A輸入-i $ Extranet -s $ ip -j $操作iptables -A輸出-o $ Extranet -s $ ip -j $操作完成
一如既往,我一直在等待您的評論,請繼續關注此博客,謝謝
它幫助我繼續學習多一點的感謝。
不用客氣,很高興能為您提供幫助
真的很抱歉,但是我有兩個問題(和禮物😉):
您是否打算使用此配置來運行Apache並關閉除SSH以外的其餘部分?
#我們清理桌子
的iptables-F
的iptables-X
我們清理NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
僅在內部和此IP範圍內使用ssh
iptables -A輸入-p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j接受
第二個問題:在此示例中,SSH是否使用7659端口?
第三,也是最後一個:此配置應保存在哪個文件中?
非常感謝您的教程,可惜您是這樣的新手,不能很好地利用它。
這是您從apache獲取http的規則
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
但您還需要聲明刪除默認策略(在腳本中)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P轉發掉
這是因為如果您偏遠,它將把您扔掉。
iptables -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT
如果7659是示例中該ssh的端口,默認情況下為22,儘管我建議您將端口更改為“不知名”
伙計,我不知道,如您所願... firewall.sh並將其放置在rc.local(sh firewall.sh)中,以便它自動運行,這取決於您所使用的操作系統,在哪裡有文件您可以直接放置規則。
嘿,您的腳本很好分析,……。您知道我如何拒絕用戶對特定網站的所有請求嗎?…。 但是這個網站有很多服務器…。
我建議其他選擇:
1)您可以在您的DNS中創建一個假區域...
2)您可以使用acl放置代理
但是
對於iptables來說,您可能會喜歡...並非總是最好的選擇(有更多方法)
iptables -A INPUT -s 部落格。desdelinux.ne -j 刪除
iptables -A 輸出 -d 部落格。desdelinux.net -j 刪除
告訴我是否有效
感謝您的回答,一切都清除了。 我之所以問這個端口,是因為我對使用7659感到驚訝,因為專用端口始於49152,它可能會干擾某些服務或某些功能。
再次感謝您所做的一切,太好了!
問候。
BrodyDalle,我該如何與您聯繫? 您的腳本非常有趣。
Soulofmarionet_1@hotmail.com
前一行“ iptables -A OUTPUT -o $ Extranet -s $ ip -j $ ACTION”是為了防止您自己的計算機進行欺騙? 還是有一些中毒的數據包進入並可能隨該中毒源一起離開,這就是為什麼該規則也包含在OUTPUT中的原因?
非常感謝您的澄清!!!
這是我自己的iptables腳本,非常完整:
#franes.iptables.airoso
#doc.iptables.airoso:舊版和nft的iptables
#
#防火牆端口
##########################
#!/斌/慶典
#
#清除屏幕
##############################開始/etc/f-iptables/default.cfg |||||
明確
#將行留空
錯過
出口是=»»否=»迴聲»
#您可以更改以允許訪問的變量
######################變量用$ yes或$ no修改
出口hayexcepciones =»$否»
#有例外:$ yes允許例外主機,$ no禁用
出口乾草= = $否»
#hayping:$是允許對第三方執行ping操作,$ no拒絕
出口haylogserver =»$否»
#haylogeosserver:$是,可以記錄tcp $否,不能記錄tcp
######
######################變量以添加«,»或«:»範圍進行修改
導出例外=»baldras.wesnoth.org»
#例外允許來自防火牆的單個或多個主機或沒有值
導出日誌服務器=丟棄,ipp,dict,ssh
#數據包進入時記錄的tcp服務器端口
導出redserver = 0/0
#redserver:服務器端口的網絡最好是本地網絡或幾個ips
導出客戶端紅色= 0/0
#clientnet:客戶端端口的網絡優於所有網絡
出口servidortcp =丟棄,ipp,字典,6771
#servidortcp:指定的tcp服務器端口
導出serverudp =丟棄
#udpserver:指定的udp服務器端口
導出clientudp =域,bootpc,bootps,ntp,20000:45000
#udp客戶端:指定的udp客戶端端口
導出clienttcp =域,http,https,ipp,git,dict,14999:15002
#tcp client:指定的tcp客戶端端口
/etc/f-iptables/default.cfg的##############################結尾
##############################變量結尾
導出防火牆= $ 1變量= $ 2
if [“ $變量” =“ $ NULL”]; 然後獲取/etc/f-iptables/default.cfg;
else source / etc / f-iptables / $ 2; 科幻
#############################,否則您將使用.cfg文件覆蓋變量
############################################### ########################################
導出防火牆= $ 1導出變量= $ 2
########################################自動系統變量
如果[“ $防火牆” =“已斷開”]; 然後回顯防火牆斷開;
導出activateserver =»$ no»activateclient =»$ no»濕=»$ no»;
elif [“ $防火牆” =“客戶端”];然後回顯防火牆客戶端;
導出activateserver =»$ no»activateclient =»»濕=»$ no»;
elif [“ $防火牆” =“服務器”]; 然後回顯防火牆服務器;
導出activateserver =»»activateclient =»$ no»濕=»$ no»;
elif [“ $防火牆” =“客戶端和服務器”]; 然後回顯防火牆客戶端和服務器;
導出激活服務器=»»; 出口activateclient =»»;出口濕== $$»;
elif [“ $ firewall” =“ permissive”]; 然後回顯PERMISSIVE FIREWALL;
導出activateserver =»$否»activateclient =»$否»濕=»»;
其他
$檢查sudo echo iptables-legacy:
$檢查sudo iptables-legacy -v -L INPUT
$檢查sudo iptables-legacy -v -L OUTPUT
$檢查sudo echo iptables-nft:
$檢查sudo iptables-nft -v -L INPUT
$檢查sudo iptables-nft -v -L輸出
回波_____參數____ $ 0 $ 1 $ 2
echo“不帶參數的廣播就是列出iptables。”
echo“第一個參數(啟用iptables):斷開連接或客戶端或服務器或客戶端和服務器或允許的。”
echo“第二個參數:(可選):默認的.cfg文件選擇/etc/f-iptables/default.cfg”
迴聲“變量設置:” $(ls / etc / f-iptables /)
出口0; 科幻
#################
錯過
echo拋出$ 0斷開連接或客戶端或服務器或客戶端和服務器或許可或變量,或者不使用參數列出iptables。
echo $ 0文件內部包含一些可編輯變量。
###############################以上變量已激活
###############################
迴聲設置iptables變量
迴聲激活變量
錯過
############################ iptables規則
echo設置iptables-legacy
sudo / usr / sbin / iptables-legacy -t過濾器-F
須藤/ usr / sbin / iptables-legacy -t nat -F
須藤/ usr / sbin / iptables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -t filter -F
須藤/ usr / sbin / ip6tables-legacy -t nat -F
須藤/ usr / sbin / ip6tables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $例外情況-j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state-狀態已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state建立狀態-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-legacy -A輸出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $例外情況-j ACCEPT> / dev / null
$激活sudo服務器/ usr / sbin / iptables-legacy -A輸出-p udp -m多端口–體育$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-legacy -A輸出-p tcp -m多端口–體育$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A輸出-p udp -m多端口–dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
echo iptables-legacy已啟用
錯過
迴聲設置iptables-nft
sudo / usr / sbin / iptables-nft -t過濾器-F
須藤/ usr / sbin / iptables-nft -t nat -F
須藤/ usr / sbin / iptables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -t過濾器-F
須藤/ usr / sbin / ip6tables-nft -t nat -F
須藤/ usr / sbin / ip6tables-nft -t mangle -F
須藤/ usr / sbin / ip6tables-nft -A輸入-j DROP
須藤/ usr / sbin / ip6tables-nft -A輸出-j DROP
sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
sudo / usr / sbin / iptables-nft -A輸入-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $例外情況-j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-nft -A輸入-p udp -m多端口–dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-nft -A輸入-p tcp -m多端口-dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state-狀態已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state建立狀態-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp類型的echo-reply -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-nft -A輸出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $例外-j ACCEPT> / dev / null
$激活sudo服務器/ usr / sbin / iptables-nft -A輸出-p udp -m多端口–體育$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$激活服務器sudo / usr / sbin / iptables-nft -A輸出-p tcp -m多端口–運動$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ enable client sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A輸出-p tcp -m多端口–dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A輸出-p icmp –icmp類型的echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A輸出-j DROP
sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
echo iptables-nft已啟用
錯過
$濕sudo / usr / sbin / iptables-legacy -F> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state -state建立狀態-j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
$濕sudo / usr / sbin / iptables-nft -F> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -m狀態–狀態已建立-j ACCEPT> / dev / null
$濕sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
$濕sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
#########################
回顯您拋出的錯誤$ 0 $ 1 $ 2
#退出腳本
退出0
如果該防火牆將其用於我的網關並且在局域網中有一個烏賊,我將如何設置規則?