一、現(xiàn)狀說明
在上一節(jié)中,我們將兩個網(wǎng)段的機(jī)器,通過中間機(jī)器的網(wǎng)絡(luò)轉(zhuǎn)發(fā),能達(dá)到互通。再來回顧一下這個網(wǎng)絡(luò)連接的圖
這一節(jié),我們將通過設(shè)置機(jī)器B的iptables規(guī)則,來做一些防火墻實驗
機(jī)器A模擬公網(wǎng)的一臺服務(wù)器,機(jī)器C模擬我們內(nèi)網(wǎng)的一臺機(jī)器。機(jī)器B充當(dāng)路由器的角色
二、前置條件
2.1 三臺機(jī)器的firewalld關(guān)閉,以免影響實驗
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
2.2 為了不影響實驗效果,我們先把機(jī)器B的iptables規(guī)則全清空
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 239 packets, 29542 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 6 packets, 504 bytes)
pkts bytes target prot opt in out source destination
2.3 機(jī)器A安裝httpd
由于開始我們的主機(jī)C設(shè)置的是一個hostOnly網(wǎng)絡(luò),是連不上互聯(lián)網(wǎng)的,所以我們先連上互聯(lián)網(wǎng)。把httpd安裝上。先把主機(jī)A關(guān)機(jī)。添加一個nat網(wǎng)卡
這里的enp0s3就是nat網(wǎng)卡,通過啟用enp0s3,就可以連上外網(wǎng)了
可以用瀏覽器試著訪問百度,發(fā)現(xiàn)網(wǎng)絡(luò)已經(jīng)通了
安裝httpd
[root@localhost ~]# yum install httpd
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl -X GET http://localhost
安裝好httpd以后,禁用enp0s3的網(wǎng)卡
2.4 啟動主機(jī)C的網(wǎng)絡(luò)服務(wù)
由于重啟了主機(jī),所以重新把C->A的路由再設(shè)置一下
route add -net 192.168.56.0/24 gw 10.1.0.11
把主機(jī)B的iptables先清空,避免存在的規(guī)則影響實驗
[root@localhost ~]# iptables -F
清空B的規(guī)則后,可以嘗試用主機(jī)C ping A,可以發(fā)現(xiàn),其實是通的
三、連通性實驗
先試一下,A和C,互ping是不是通的,保證網(wǎng)絡(luò)通暢的前提下,執(zhí)行下面的操作
3.1 先拒絕所有轉(zhuǎn)發(fā)
在主機(jī)B中FORWARD鏈的末端添加一條默認(rèn)拒絕的規(guī)則,然后將”放行規(guī)則”設(shè)置在這條”默認(rèn)拒絕規(guī)則”之前即可
[root@localhost ~]# iptables -A FORWARD -j REJECT
這時候,主機(jī)A和主機(jī)C已經(jīng)不能互通了
A->C,ping 不通,A->B 能ping通(因為有交換機(jī)直連)
C->A,ping 不通,C->B 能ping通(因為有交換機(jī)直連)
3.2 設(shè)置主機(jī)B轉(zhuǎn)發(fā)流量
如果我們想要使內(nèi)部的主機(jī)C能夠訪問外部主機(jī)A(10.1.0.10)的web服務(wù),我們應(yīng)該怎樣做呢?沒錯,我們需要在FORWARD鏈中放行內(nèi)部主機(jī)對外部主機(jī)的web請求,只需如下配置即可文章來源:http://www.zghlxwxcb.cn/news/detail-728204.html
iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
從主機(jī)C(10.1.0.10)訪問主機(jī)A(192.168.56.104)
curl -X GET http://192.168.56.104:80
通了文章來源地址http://www.zghlxwxcb.cn/news/detail-728204.html
四、總結(jié)
#如果想要iptables作為網(wǎng)絡(luò)防火墻,iptables所在主機(jī)開啟核心轉(zhuǎn)發(fā)功能,以便能夠轉(zhuǎn)發(fā)報文。
#使用如下命令查看當(dāng)前主機(jī)是否已經(jīng)開啟了核心轉(zhuǎn)發(fā),0表示未開啟,1表示已開啟
cat /proc/sys/net/ipv4/ip_forward
#使用如下兩種方法均可臨時開啟核心轉(zhuǎn)發(fā),立即生效,但是重啟網(wǎng)絡(luò)配置后會失效。
方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:sysctl -w net.ipv4.ip_forward=1
#使用如下方法開啟核心轉(zhuǎn)發(fā)功能,重啟網(wǎng)絡(luò)服務(wù)后永久生效。
配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中將 net.ipv4.ip_forward設(shè)置為1
#由于iptables此時的角色為"網(wǎng)絡(luò)防火墻",所以需要在filter表中的FORWARD鏈中設(shè)置規(guī)則。
#可以使用"白名單機(jī)制",先添加一條默認(rèn)拒絕的規(guī)則,然后再為需要放行的報文設(shè)置規(guī)則。
#配置規(guī)則時需要考慮"方向問題",針對請求報文與回應(yīng)報文,考慮報文的源地址與目標(biāo)地址,源端口與目標(biāo)端口等。
#示例為允許網(wǎng)絡(luò)內(nèi)主機(jī)訪問網(wǎng)絡(luò)外主機(jī)的web服務(wù)與sshd服務(wù)。
iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 22 -j ACCEPT
#可以使用state擴(kuò)展模塊,對上述規(guī)則進(jìn)行優(yōu)化,使用如下配置可以省略許多"回應(yīng)報文放行規(guī)則"。
iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
到了這里,關(guān)于【iptables 實戰(zhàn)】06 iptables網(wǎng)絡(luò)防火墻實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!