拓?fù)鋱D下來一個一般情況下公司內(nèi)網(wǎng)和外網(wǎng)的拓?fù)鋱D 一、概要1、防火墻分類 ①包過濾防火墻(pack filtering)在網(wǎng)絡(luò)層對數(shù)據(jù)包進(jìn)行選擇過濾,采用訪問控制列表(Access control table-ACL)檢查數(shù)據(jù)流的源地址,目的地址,源和目的端口,IP等信息。 ②代理服務(wù)器型防火墻 2、iptables基礎(chǔ) ①規(guī)則(rules):網(wǎng)絡(luò)管理員預(yù)定義的條件 ②鏈(chains): 是數(shù)據(jù)包傳播的路徑 ③表(tables):內(nèi)置3個表filter表,nat表,mangle表分別用于實現(xiàn)包過濾網(wǎng)絡(luò)地址轉(zhuǎn)換和包重構(gòu)的功能 ④filter表是系統(tǒng)默認(rèn)的,INPUT表(進(jìn)入的包),F(xiàn)ORWORD(轉(zhuǎn)發(fā)的包),OUTPUT(處理本地生成的包),filter表只能對包進(jìn)行授受和丟棄的操作。 ⑤nat表(網(wǎng)絡(luò)地址轉(zhuǎn)換),PREROUTING(修改即將到來的數(shù)據(jù)包),OUTPUT(修改在路由之前本地生成的數(shù)據(jù)包),POSTROUTING(修改即將出去的數(shù)據(jù)包) ⑥mangle表,PREROUTING,OUTPUT,F(xiàn)ORWORD,POSTROUTING,INPUT 3、其它 iptables是按照順序讀取規(guī)則 防火墻規(guī)則的配置建議 Ⅰ 規(guī)則力求簡單 Ⅱ 規(guī)則的順序很重要 Ⅲ 盡量優(yōu)化規(guī)則 Ⅳ 做好筆記 二、配置1、iptables命令格式 iptables [-t 表] -命令 匹配 操作 (大小寫敏感) 動作選項 ACCEPT 接收數(shù)據(jù)包 DROP 丟棄數(shù)據(jù)包 REDIRECT 將數(shù)據(jù)包重新轉(zhuǎn)向到本機(jī)或另一臺主機(jī)的某一個端口,通常功能實現(xiàn)透明代理或?qū)ν忾_放內(nèi)網(wǎng)的某些服務(wù) SNAT 源地址轉(zhuǎn)換 DNAT 目的地址轉(zhuǎn)換 MASQUERADE IP偽裝 LOG 日志功能 2、定義規(guī)則 ①先拒絕所有的數(shù)據(jù)包,然后再允許需要的數(shù)據(jù)包 iptalbes -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ②查看nat表所有鏈的規(guī)則列表 iptables -t nat -L ③增加,插入,刪除和替換規(guī)則 iptables [-t 表名] <-A|I|D|R> 鏈名 [規(guī)則編號] [-i|o 網(wǎng)卡名稱] [-p 協(xié)議類型] [-s 源ip|源子網(wǎng)] [--sport 源端口號] [-d 目的IP|目標(biāo)子網(wǎng)] [--dport 目標(biāo)端口號] [-j 動作] 參數(shù):-A 增加 -I 插入 -D 刪除 -R 替換 三、例子①iptables -t filter -A INPUT -s 192.168.1.5 -i eth0 -j DROP 禁止IP為192.168.1.5的主機(jī)從eth0訪問本機(jī)②iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp --dport 80 -j DROP 禁止子網(wǎng)192.168.5.0訪問web服務(wù)③iptables -t filter -I INPUT 2 -s 192.168.7.9 -p tcp --dport ftp -j DROP 禁止IP為192.168.7.9訪問FTP服務(wù) ④iptables -t filter -L INPUT 查看filter表中INPUT鏈的規(guī)則 ⑤iptables -t nat -F 刪除nat表中的所有規(guī)則 ⑥iptables -I FORWARD -d wwww. -j DROP 禁止訪問www.網(wǎng)站 ⑦iptables -I FORWARD -s 192.168.5.23 -j DROP 禁止192.168.5.23上網(wǎng) 下面詳細(xì)介紹一下iptables的配置 一 :從一臺機(jī)到另一臺機(jī)端口轉(zhuǎn)發(fā)啟用網(wǎng)卡轉(zhuǎn)發(fā)功能 #echo 1 > /proc/sys/net/ipv4/ip_forward
舉例:從192.168.0.132:21521(新端口)訪問192.168.0.211:1521端口 a.同一端口轉(zhuǎn)發(fā)
(192.168.0.132上開通1521端口訪問 iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT) iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211 iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE
b.不同端口轉(zhuǎn)發(fā) (192.168.0.132上開通21521端口訪問 iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT) iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521 iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132
以上兩條等價配置(更簡單[指定網(wǎng)卡]): iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521 iptables -t nat -A POSTROUTING -j MASQUERADE
保存iptables #service iptables save #service iptables restart 二 用iptables做本機(jī)端口轉(zhuǎn)發(fā)代碼如下: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
估計適當(dāng)增加其它的參數(shù)也可以做不同IP的端口轉(zhuǎn)發(fā)。
如果需要本機(jī)也可以訪問,則需要配置OUTPUT鏈(********特別注意:本機(jī)訪問外網(wǎng)的端口會轉(zhuǎn)發(fā)到本地,導(dǎo)致訪不到外網(wǎng),如訪問yown.com,實際上是訪問到本地,建議不做80端口的轉(zhuǎn)發(fā)或者指定目的 -d localhost): iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
原因: 外網(wǎng)訪問需要經(jīng)過PREROUTING鏈,但是localhost不經(jīng)過該鏈,因此需要用OUTPUT。 例子1:概述: 有一些核心MYSQL服務(wù)器位于核心機(jī)房的內(nèi)網(wǎng)段,經(jīng)常需要去連接這些服務(wù)器,因無法直接通過外網(wǎng)訪問,給管理造成了不便。 思路: 雖然解決此問題的方法及思路有很多,但當(dāng)下想使用IPTABLES的端口重定向功能解決此問題,比較簡單易用,而且擴(kuò)展性也比較好,依次類推,可以運(yùn)用到其他的端口轉(zhuǎn)發(fā)方面的應(yīng)用。 網(wǎng)絡(luò)環(huán)境: 公網(wǎng)服務(wù)器 :eth0:公網(wǎng)IP eth1:內(nèi)網(wǎng)IP - 192.168.1.1 MYSQL服務(wù)器:eth1:內(nèi)網(wǎng)IP - 192.168.1.2 實現(xiàn)方法:通過訪問公網(wǎng)IP的63306端口來實現(xiàn)到內(nèi)網(wǎng)MYSQL服務(wù)器的3306端口的訪問 在公網(wǎng)服務(wù)器上: 配置腳本: iptables -t nat -A PREROUTING -p tcp --dport 63306 -j DNAT --to-destination 192.168.1.2:3306 iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 3306 -j SNAT --to 192.168.1.1 允許服務(wù)器的IP轉(zhuǎn)發(fā)功能: echo 1 > /proc/sys/net/ipv4/ip_forward 使用方法: mysql -h 公網(wǎng)IP -p 63306 -uroot -p 例子2: 由于業(yè)務(wù)需要,服務(wù)器越來越多,內(nèi)網(wǎng)服務(wù)器無外網(wǎng)環(huán)境管理甚是不便,所以折騰了一下外網(wǎng)到內(nèi)網(wǎng)的端口轉(zhuǎn)發(fā)以達(dá)到輕松管理的目的,貼一下心得。
S1: eth0 10.0.0.1 eth1 x.x.x.x
S2: eth0 10.0.0.2
S1 8082端口轉(zhuǎn)發(fā)到內(nèi)網(wǎng)機(jī)器22端口
iptables規(guī)則配置如下:
iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 8082 -j DNAT --to-destination 10.0.0.2:22
iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp --dport 22 -j SNAT --to-source x.x.x.x 說明: iptables -t nat -A PREROUTING -d "對外公網(wǎng)ip" -p tcp --dport "對外端口" -j DNAT --to "內(nèi)部實際提供服務(wù)的ip":"實際提供服務(wù)的端口"
iptables -t nat -A POSTROUTING -d "內(nèi)部實際提供服務(wù)的ip"-p tcp --dport "實際提供服務(wù)的端口" -j SNAT --to-source "運(yùn)行iptables機(jī)器的內(nèi)網(wǎng)ip" 另外,網(wǎng)上看到一篇很好的文章,這里轉(zhuǎn)發(fā)一下:https:///post/25-iptables-policy.html 25個最常用的iptables策略1、清空存在的策略當(dāng)你開始創(chuàng)建新的策略,你可能想清除所有的默認(rèn)策略,和存在的策略,可以這么做: 2、設(shè)置默認(rèn)策略默認(rèn)鏈策略是ACCEPT,改變所有的鏈策略為DROP: iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
3、阻止一個指定的ipBLOCK_THIS_IP=“x.x.x.x"
iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4、允許SSH允許所有通過eth0接口使用ssh協(xié)議連接本機(jī): iptables -A INPUT -i eth0 -p tcp -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT
5、允許某個網(wǎng)段通過ssh連接iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 –dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 22 -m state –state ESTABLISHED -j ACCEPT
6、允許SSH連接指定的網(wǎng)段iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT
7、允許http和https允許所有進(jìn)來的web流量:http協(xié)議80端口,https協(xié)議是443端口 iptables -A INPUT -i eth0 -p tcp -dport 80 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 80 -m state -state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -dport 443 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 443 -m state -state ESTABLISHED -j ACCEPT
8、多個策略聯(lián)合一起允許ssh,http,https: iptables -A INPUT -i eth0 -p tcp -m multiport -dports 22,80,443 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport -sports 22,80,443 -m state -state ESTABLISHED -j ACCEPT
9、允許SSH連接其他主機(jī)iptables -A OUTPUT -o eth0 -p tcp -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT
10、允許https出去iptables -A OUTPUT -o eth0 -p tcp -dport 443 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -sport 443 -m state -state ESTABLISHED -j ACCEPT
11、對web請求做負(fù)載均衡(每三個包,均衡到指定服務(wù)器,需要擴(kuò)展iptables)iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 0 -j DNAT -to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 1 -j DNAT -to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 2 -j DNAT -to-destination 192.168.1.103:443
12、允許ping13、允許ping遠(yuǎn)程14、允許本地回環(huán)15、允許內(nèi)網(wǎng)訪問外部網(wǎng)絡(luò)這個例子eth1 連接外部網(wǎng)絡(luò),eth0連接內(nèi)部網(wǎng)絡(luò) 16、允許DNS出去17、允許NIS連接NIS端口是動態(tài)的,當(dāng)ypbind啟動時它分配端口。 首先運(yùn)行 rpcinfo -p 顯示得到端口號,這個例子使用端口850,853。 iptables -A INPUT -p tcp -dport 111 -j ACCEPT
iptables -A INPUT -p udp -dport 111 -j ACCEPT
iptables -A INPUT -p tcp -dport 853 -j ACCEPT
iptables -A INPUT -p udp -dport 853 -j ACCEPT
iptables -A INPUT -p tcp -dport 850 -j ACCEPT
iptables -A INPUT -p udp -dport 850 -j ACCEPT
上面的例子當(dāng)ypbind重新啟動時將失效,有2種解決方案: (1) 分配nis服務(wù)靜態(tài)ip (2) 使用精妙的腳本 18、允許指定網(wǎng)段連接Rsynciptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 -dport 873 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 873 -m state -state ESTABLISHED -j ACCEPT
19、允許mysql從指定的網(wǎng)段連接iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 -dport 3306 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 3306 -m state -state ESTABLISHED -j ACCEPT
20、允許sendmail或者postfixiptables -A INPUT -i eth0 -p tcp -dport 25 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 25 -m state -state ESTABLISHED -j ACCEPT
21、允許IMAP和IMAPSiptables -A INPUT -i eth0 -p tcp -dport 143 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 143 -m state -state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -dport 993 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 993 -m state -state ESTABLISHED -j ACCEPT
22、允許POP3和POP3Siptables -A INPUT -i eth0 -p tcp -dport 110 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 110 -m state -state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -dport 995 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 995 -m state -state ESTABLISHED -j ACCEPT
23、預(yù)防DDOS攻擊iptables -A INPUT -p tcp -dport 80 -m limit -limit 25/minute -limit-burst 100 -j ACCEPT
-m :使用iptables擴(kuò)展
–limit 25/minute : 限制分鐘連接請求數(shù)
–limit-burst:觸發(fā)閥值,一次涌入數(shù)據(jù)包數(shù)量
24、端口轉(zhuǎn)發(fā)來自442的都轉(zhuǎn)到22端口 你還必須明確允許442端口 iptables -A INPUT -i eth0 -p tcp -dport 422 -m state -state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -sport 422 -m state -state ESTABLISHED -j ACCEPT
25、包丟棄日志你也許想查看所有丟棄包的日志。首先創(chuàng)建一個新鏈叫 LOGGING 確保所有的連接跳到LOGGING 記錄這些包通過自定義名字 "log-prefix" 最后丟棄這些數(shù)據(jù)包 參考
https:///post/25-iptables-policy.html https://www.jianshu.com/p/fd0e5ce233a7
|