基礎(chǔ)知識(shí)
iptables命令是Linux上常用的防火墻軟件,是netfilter項(xiàng)目的一部分羽资【可以直接配置,也可以通過許多前端和圖形界面配置仪搔。
iptables是按照規(guī)則來辦事的瘾婿,我們就來說說規(guī)則(rules),規(guī)則其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件烤咧,規(guī)則一般的定義為”如果數(shù)據(jù)包頭符合這樣的條件偏陪,就這樣處理這個(gè)數(shù)據(jù)包”。規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過濾表中髓削,這些規(guī)則分別指定了源地址竹挡、目的地址、傳輸協(xié)議(如TCP立膛、UDP揪罕、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等宝泵。當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí)好啰,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)儿奶、拒絕(reject)和丟棄(drop)等框往。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則闯捎。
數(shù)據(jù)包流程
數(shù)據(jù)經(jīng)過防火墻的流程
兩種方式的代理
1椰弊、本機(jī)端口代理
# 數(shù)據(jù)從端口80轉(zhuǎn)發(fā)8080
$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
2、外部數(shù)據(jù)轉(zhuǎn)發(fā)
$ sudo nano /etc/sysctl.conf
# net.ipv4.ip_forward=1
# 打開代理轉(zhuǎn)發(fā)功能瓤鼻,從上圖可以看出秉版,需要經(jīng)過FORWORD
# 設(shè)置net.ipv4.ip_forward=1后需要重啟系統(tǒng)才能生效
# 如果不想重啟系統(tǒng),也可以如下設(shè)置
$ sudo sysctl -w net.ipv4.ip_forward=1
# 數(shù)據(jù)從代理機(jī)器123.206.219.160:80 轉(zhuǎn)發(fā)到 123.206.219.164:8080
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 123.206.219.164:8080
$ sudo iptables -t nat -A POSTROUTING -d 123.206.219.164 -p tcp --dport 8080 -j SNAT --to-source 123.206.219.160
# 如果【代理機(jī)器】位于內(nèi)部局域內(nèi)茬祷,--to-source 需要指向【代理機(jī)器】局域網(wǎng)地址【192.168.1.233】清焕,如下所示:
$ sudo iptables -t nat -A POSTROUTING -d 123.206.219.164 -p tcp --dport 8080 -j SNAT --to-source 192.168.1.233