一.iptables 命令
(1)iptables相關(guān)規(guī)則
任何不允許的訪問(wèn),應(yīng)該在請(qǐng)求到達(dá)時(shí)給予拒絕 規(guī)則在鏈接上的次序即為其檢查時(shí)的生效次序 ?
基于上述嫉你,規(guī)則優(yōu)化 ?
1 安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接
例:ipatbles -A INPUT -m state --state ESTABLISHED -j ACCEPT ?
2 謹(jǐn)慎放行入站的新請(qǐng)求 ?
3 有特殊目的限制訪問(wèn)功能,要在放行規(guī)則之前加以拒絕 ?
4 同類規(guī)則(訪問(wèn)同一應(yīng)用)坑资,匹配范圍小的放在前面邑遏,用于特 殊處理 ?
5 不同類的規(guī)則(訪問(wèn)不同應(yīng)用),匹配范圍大的放在前面 ?
6 應(yīng)該將那些可由一條規(guī)則能夠描述的多個(gè)規(guī)則合并為一條 ?
7 設(shè)置默認(rèn)策略困曙,建議白名單(只放行特定連接)
1) iptables -P表伦,不建議
2) 建議在規(guī)則的最后定義規(guī)則做為默認(rèn)策略
(2)規(guī)則有效期限:
使用iptables命令定義的規(guī)則,手動(dòng)刪除之前慷丽,其生效期限為 kernel存活期限 ?
保存規(guī)則: 保存規(guī)則至指定的文件
-
CentOS 6
service iptables save 將規(guī)則覆蓋保存至/etc/sysconfig/iptables文件中
示例:
iptables -A INPUT -s 1.1.1.1 -j REJECT
image.png
service iptables save ——自動(dòng)保存到/etc/sysconfig/iptables
image.png
iptables -F——清空規(guī)則
service iptables start——將規(guī)則恢復(fù)
iptables -vnL
如果在添加一個(gè)規(guī)則策略蹦哼,但是不保存而去執(zhí)行 service iptables stop后,再次重新啟動(dòng)后要糊,新添加的規(guī)則不會(huì)添加到iptables表中
-
CentOS 7 可用下面方法保存規(guī)則
iptables -S > /PATH/TO/SOME_RULES_FILE
iptables-save > /PATH/TO/SOME_RULES_FILE
例:設(shè)定一個(gè)規(guī)則
iptables -A INPUT -s 192.168.136.134 -j REJECT
iptables -vnL
image.png
ipatbles -S
image.png
iptables-save
image.pngimage.png
如果想要永久保存纲熏,則需要iptables-save > /app/iptables.rules1——存在一個(gè)文件中,那么即使以后通過(guò)ipatbles -F命令清楚了規(guī)則
只要通過(guò)iptables-restore < /app/iptables.rules1即可
image.png - 開(kāi)機(jī)自動(dòng)重載規(guī)則文件中的規(guī)則(在centos7中): ?
(1) 用腳本保存各iptables命令锄俄;
讓此腳本開(kāi)機(jī)后自動(dòng)運(yùn)行 /etc/rc.d/rc.local文件中添加腳本路徑 /PATH/TO/SOME_SCRIPT_FILE ?
(2) 用規(guī)則文件保存各規(guī)則局劲,開(kāi)機(jī)時(shí)自動(dòng)載入此規(guī)則文件中的規(guī)則 /etc/rc.d/rc.local文件添加 iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE ?
(3)自定義Unit File,進(jìn)行iptables-restore
具體實(shí)現(xiàn)步驟:
vim /etc/rc.d/rc.local
設(shè)定一個(gè)規(guī)則:iptables -A INPUT -s 1.1.1.1 -j ACCEPT
iptables-save > /app/iptables.rules1
iptables-restore < /app/iptables.rules1
最后給文件加上執(zhí)行權(quán)限 chmod 755 /etc/rc.d/rc.local
開(kāi)機(jī)后會(huì)自動(dòng)啟動(dòng)
二.網(wǎng)絡(luò)防火墻應(yīng)用
iptables/netfilter網(wǎng)絡(luò)防火墻:
(1) 充當(dāng)網(wǎng)關(guān)
(2) 使用filter表的FORWARD鏈
注意的問(wèn)題:
(1) 請(qǐng)求-響應(yīng)報(bào)文均會(huì)經(jīng)由FORWARD鏈奶赠,要注意規(guī)則 的方向性
(2) 如果要啟用conntrack機(jī)制鱼填,建議將雙方向的狀態(tài)為 ESTABLISHED的報(bào)文直接放行
實(shí)驗(yàn):準(zhǔn)備三臺(tái)虛擬機(jī),配置一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境毅戈,要求苹丸,內(nèi)網(wǎng)可以訪問(wèn)外網(wǎng),但是外網(wǎng)無(wú)法訪問(wèn)內(nèi)網(wǎng)
-
首先設(shè)置網(wǎng)絡(luò)網(wǎng)絡(luò)環(huán)境
a機(jī)器為內(nèi)網(wǎng)(關(guān)掉a的外網(wǎng))苇经,b為路由器赘理,c為外網(wǎng)(關(guān)掉c的內(nèi)網(wǎng))
配置a的網(wǎng)關(guān)指向b的Ip地址(內(nèi)網(wǎng)地址),配置c的網(wǎng)關(guān)指向b的ip地址(外網(wǎng)地址)
image.png
image.png
清空三臺(tái)主機(jī)的防火墻以及selinux策略扇单,開(kāi)啟b機(jī)器的路由功能 echo 1 > /proc/sys/net/ipv4/ip_forward
2.分別先測(cè)試一下網(wǎng)絡(luò)連通性ping命令測(cè)試商模。
3.測(cè)試成功后,開(kāi)始設(shè)置策略使內(nèi)網(wǎng)能夠連接外網(wǎng)但是令花,外網(wǎng)無(wú)法訪問(wèn)內(nèi)網(wǎng)
在b中阻桅,iptables -A FORWARD -s 192.168.136.0./24 -d 172.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT:請(qǐng)求協(xié)議接受
iptables -A FORWAWRD -s 172.18.0.0./16 -d 192.168.136.0/24 -p icmp --icmp-type 0 -j ACCEPT:響應(yīng)協(xié)議接受
iptables -A FORWARD -j REJECT:其他的都拒絕
這樣就實(shí)現(xiàn)了內(nèi)網(wǎng)可以訪問(wèn)外網(wǎng)但是外網(wǎng)無(wú)法訪問(wèn)內(nèi)網(wǎng)的要求
方法二:使用狀態(tài)來(lái)實(shí)現(xiàn)
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT:以前的連接都接受
iptables -A FORWARD -s 192.168.136.0/24 -d 172.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT:請(qǐng)求協(xié)議接受
iptables -A FORWARD -j REJECT:其他的都拒絕
方法三:
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT:以前的連接都接受
iptables -A FORWARD -s 192.168.136.0/24 -d 172.18.0.0/16 -p icmp -m state --state NEW -j ACCEPT
:新建立的協(xié)議接受
iptables -A FORWARD -j REJECT:其他的都拒絕
擴(kuò)展延伸要求:內(nèi)網(wǎng)可以訪問(wèn)外網(wǎng)的ssh和http協(xié)議,但是外網(wǎng)無(wú)法訪問(wèn)內(nèi)網(wǎng)的ssh和httpd協(xié)議
iptables -F FORWARD 清除之前的策略
iptables -A FORWARD -s 192.168.136.0/24 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A FORWARD -d192.168.136.0/24 -p tcp -m multiport --sports 22,80 -j ACCEPT
iptables -A FORWARD -j REJECT
加入ftp協(xié)議
加載ftp協(xié)議模塊
modprobe nf_conntrack_ftp
iptables -R FORWARD 1 -s 192.168.136.0/24 -p tcp -m multiport --dports 21,22,80 -j ACCEPT
iptables -R FORWARD 2 -d 192.168.136.0/24 -p tcp -m multiport --sports 21,22,80 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j REJECT
實(shí)驗(yàn)完成
三.NAT的應(yīng)用
(一)NAT: network address translation
PREROUTING兼都,INPUT,OUTPUT稽寒,POSTROUTING
請(qǐng)求報(bào)文:修改源/目標(biāo)IP扮碧,由定義如何修改
響應(yīng)報(bào)文:修改源/目標(biāo)IP,根據(jù)跟蹤機(jī)制自動(dòng)實(shí)現(xiàn) ?
(1)SNAT:source NAT POSTROUTING, INPUT 讓本地網(wǎng)絡(luò)中的主機(jī)通過(guò)某一特定地址訪問(wèn)外部網(wǎng)絡(luò),實(shí) 現(xiàn)地址偽裝 請(qǐng)求報(bào)文:修改源IP ?
1.SNAT應(yīng)用:固定ip(在路由器上的設(shè)置)
iptables -t nat -A POSTROUTING -s 192.168.136.0/24 -j SNAT --to-source 172.18.254.242
解釋:指定用nat表來(lái)實(shí)現(xiàn)地址轉(zhuǎn)換慎王,實(shí)現(xiàn)局域網(wǎng)用戶訪問(wèn)外網(wǎng)蚓土,規(guī)定源地址,固定具有nat服務(wù)的路由器的Ip地址 赖淤,這樣局域網(wǎng)內(nèi)的用戶通過(guò)將私有地址轉(zhuǎn)換為路由的共有地址蜀漆,去訪問(wèn)外網(wǎng)。這種做法既可以達(dá)到訪問(wèn)的目的也能夠節(jié)省Ip,不用刻意給每個(gè)私有Ip用戶都配置對(duì)應(yīng)的公網(wǎng)ip,節(jié)約成本
2.MASQUERADE:動(dòng)態(tài)IP咱旱,如撥號(hào)網(wǎng)絡(luò)
--to-ports port[-port]
--random
iptables -t nat -A POSTROUTING -s 192.168.136.0/24 -j SNAT MASQUERADE——一定要指定源地址确丢,否則如果路由器上有多個(gè)網(wǎng)卡時(shí),不知道要替代哪個(gè)網(wǎng)段去訪問(wèn)
(2)DNAT:destination NAT PREROUTING , OUTPUT
把本地網(wǎng)絡(luò)中的主機(jī)上的某服務(wù)開(kāi)放給外部網(wǎng)絡(luò)訪問(wèn)(發(fā) 布服務(wù)和端口映射)吐限,但隱藏真實(shí)IP
請(qǐng)求報(bào)文:修改目標(biāo)IP
應(yīng)用:
iptables -t nat -A PREROUTING -d 172.18.254.242 -p tcp --dport 22 -j DNAT --to--destination 192.168.136.134
iptables -t nat -A PREROUTING -d 172.18.254.242 -p tcp --dport 80 -j DNAT --to-destination 192.168.136.134:8080:實(shí)現(xiàn)外網(wǎng)的80端口指向內(nèi)網(wǎng)的8080端口
iptables -t nat -A PREROUTING -d 172.18.254.242 -p tcp --dport 80 -j DNAT --to-destination 192.168.136.134
(3)PNAT: port nat鲜侥,端口和IP都進(jìn)行修改
優(yōu)點(diǎn):用一個(gè)IP地址就可以實(shí)現(xiàn)多用戶訪問(wèn)外部網(wǎng)絡(luò),一個(gè)ip對(duì)應(yīng)不同的端口(在路由器上的設(shè)置)
(4)REDIRECT:
NAT表
可用于:PREROUTING OUTPUT 自定義鏈 通過(guò)改變目標(biāo)IP和端口诸典,將接受的包轉(zhuǎn)發(fā)至不同地址 --to-ports port[-port]
iptables -t nat -A PREROUTING -d 192.168.136.134 -p tcp -m multiport --dports 8000,9527 -j REDIRECT --to-ports 80:實(shí)現(xiàn)端口的轉(zhuǎn)發(fā)描函,無(wú)論外網(wǎng)的哪個(gè)端口進(jìn)行訪問(wèn),都轉(zhuǎn)發(fā)到目標(biāo)地址的的80端口