淺談linux網絡防火牆

1️⃣ iptables/netfilter網絡防火牆

  • 充當網關
  • 使用filter表的FORWARD鏈
  • 注意的問題:
    • 請求-響應報文均會經由FORWARD鏈,要注意規則的方向性
    • 如果要啓用conntrack機制,建議將雙方向的狀態爲ESTABLISHED的報文直接放行

2️⃣ 實驗:模擬網絡防火牆實現內外網分離

▶ 環境搭配

  • 1號內網機器配置
ip route flush dev eth0
ipconfig eth0 192.168.39.14                       / 指定內網地址
ip route add 192.168.39.0/24 dev eth0             / 創建路由表
ip route add default via 192.168.39.39 dev eth0   / 網關指向防火牆機器
yum -y install httpd
systemctl start httpd
echo "welcome to lanserver" > /var/www/html/index.html

在這裏插入圖片描述

  • 配置2號防火牆機器
/ 查看路由轉發是否開啓
[root@centos7 ~]#sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0

/ 永久開啓寫入文件
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
/ 加載生效
[root@centos7 ~]#sysctl -p
net.ipv4.ip_forward = 1
  • 配置3號互聯網機器
yum -y install vsftpd httpd
systemctl start vsftpd httpd
echo "weclome to netserver" > /var/www/html/index.html
vim /etc/sysconfig/netwerk-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO=static
DEFROUTE="yes"
NAME=eth0
DEVICE=eth0
ONBOOT="yes"
PREFIX=16
IPADDR=172.20.1.248
GATEWAY=172.20.1.247                 / 網關指向firewall
DNS1=180.76.76.76

/ 加載啓用網卡配置
nmcli con reload
nmcli con up eth0

/ 測試是否訪問內網機器
[root@netserver ~]#ping -c3 192.168.39.14
PING 192.168.39.14 (192.168.39.14) 56(84) bytes of data.
64 bytes from 192.168.39.14: icmp_seq=1 ttl=63 time=1.71 ms
64 bytes from 192.168.39.14: icmp_seq=2 ttl=63 time=5.63 ms
64 bytes from 192.168.39.14: icmp_seq=3 ttl=63 time=1.50 ms

--- 192.168.39.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.503/2.951/5.635/1.899 ms

▶ 開始配置防火牆規則

  • 允許內網(192.168.39.0/24)的主機訪問外網(172.20.0.0/16)的ftp, ssh服務,但外網的主機不允許訪問內網主機的所有服務
/ 加載ftp模塊
lsmod | grep ftp
modprobe nf_conntrack_ftp

/ 定義要求所需要的規則
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.39.0/24 -p tcp --dport 21:22 -j ACCEPT
iptables -A FORWARD -j REJECT
  • 內網訪問互聯網ftp,ssh服務,均成功
    在這裏插入圖片描述

  • 外網訪問內網任何服務,全部拒絕
    在這裏插入圖片描述

  • 增加外網訪問內網的httpd服務,其他服務拒絕

/ 定義要求所需要的規則

iptables -I FORWARD 2 -p tcp --dport 80 -j ACCEPT

在這裏插入圖片描述

3️⃣ NAT表

▶1 NAT基本概念

  • NAT:network address translation
    支持鏈:PREROUTING,INPUT,OUTPUT,POSTROUTING
    請求報文:修改源/目標IP,由定義如何修改
    響應報文:修改源/目標IP,根據跟蹤機制自動實現

  • SNAT:source NAT
    支持鏈:POSTROUTING, INPUT
    讓本地網絡中的主機通過某一特定地址訪問外部網絡,實現地址僞裝
    請求報文:修改源IP

  • DNAT:destination NAT
    支持鏈:PREROUTING, OUTPUT
    把本地網絡中的主機上的某服務開放給外部網絡訪問(發佈服務和端口映射),但隱藏真實IP
    請求報文:修改目標IP

  • PNAT:port NAT,端口和IP都進行修改,發生在多臺本地網絡主機的端口衝突時

▶2 SNAT配置:通過net表的target配置

  • SNAT:基於nat表的target,適用於固定的公網IP
  • SNAT選項:
    --to-source [ipaddr[-ipaddr]][:port[-port]]
    --random
  • MASQUERADE:動態IP,如撥號網絡

🌐 實驗:通過SNAT實現本地網絡主機訪問外網,而不會暴露本地網絡主機IP

  • 當外網IP爲固定IP時,就是防火牆連接互聯網的地址
    iptables -t nat -A POSTROUTING -s 192.168.39.0/24 -j SNAT --to-source 172.20.1.247
  • 當外網IP爲動態IP時
    iptables -t nat -A POSTROUTING -s 192.268.39.0/24 -j MASQUERADE
  • 內網訪問外網httpd
    curl 172.20.1.248
    外網服務器httpd服務日誌顯示源地址爲172.20.1.247,實現了SNAT功能
    在這裏插入圖片描述

▶3 DNAT配置:通過net表的target配置

  • DNAT:nat表的target,適用於端口映射
  • 格式:DNAT --to-destination [ipaddr[-ipaddr]][:port[-port]]

🌐 實驗:實現本地網絡主機通過外網的指定網址提供http服務

  • 環境搭配:
    外網指定IP:172.20.1.247,內網主機IP:192.168.39.14
    外網IP端口80指向內網主機的80端口,外網IP端口8080指向內網主機的8000端口
  • 配置內網主機多端口httpd服務
/ 創建目錄生成訪問頁面
mkdir -p /data/website2
echo "welcome to LAN1" > /data/website1/index.html
echo "welcome to LAN2" > /data/website2/index.html
/ 編寫配置文件
vim /etc/httpd/conf.d/test.conf
listen 8080
<virtualhost *:8080>
documentroot /data/website2/
<directory /data/website2>
allow from all                / httpd2.2的寫法
</directory>
</virtualhost>

httpd -t
service httpd restart
  • 修改防火牆規則
/ 開放tcp 8080端口
iptables -I FORWARD 3 -p tcp --dport 8080 -j ACCEPT

/ 定義DNAT表
 iptables -t nat -A PREROUTING -d 172.20.1.247 -p tcp --dport 80 -j DNAT --to-destination 192.168.39.14:80
 iptables -t nat -A PREROUTING -d 172.20.1.247 -p tcp --dport 8080 -j DNAT --to-destination 192.168.39.14:8080
  • 外網主機訪問內網不同的端口,打開不同的web網頁
    在這裏插入圖片描述
  • 內網主機httpd的訪問日誌
    在這裏插入圖片描述

▶4 轉發REDIRECT

  • REDIRECT,是NAT表的target,
  • 通過改變目標IP和端口,將接受的包轉發至同一個主機的不同端口
  • 可用於PREROUTING OUTPUT鏈
  • 格式:REDIRECT --to-ports port[-port]
  • 實驗:實現將對主機80,8080端口的訪問轉發至主機的8081端口
/ 修改配置文件,增加一個8081端口主機
listen 8081
<virtualhost *:8081>
documentroot /data/website1/
<directory /data/website1>
allow from all              / 注意:我這裏用的是httpd2.2版本
</directory>
</virtualhost>
/ 製作訪問頁面
echo "welcome to lanserver 8081" > /data/website1/index.html
service httpd restart

/ 定義要求所需要的防火牆策略,注意這個是內網主機的端口轉發
iptables -t nat -A PREROUTING -d 192.168.39.14 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 8081
  • 外網訪問測試
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章