iptables/netfilter網絡防火牆實現及實戰分析

前提知識html

  • 任何主機若要與非同網絡中的主機通訊,則必須將報文發送到默認網關;bash

  • 對Linux而言,IP地址是屬於主機(內核中)的,不屬於網卡,只要屬於當前主機的IP地址間,均可直接響應,不稱爲轉發服務器

  • 私有地址在路由器上是不容許被路由的網絡


防火牆的類型與做用的鏈架構

  • 主機防火牆:通常使用INPUT,OUTPUT鏈來過濾進入和發出的報文tcp

  • 網絡防火牆:通常使用PREROUTING,FORWARD,POSTROUTING鏈來轉發通過的報文ide


不一樣網絡間主機通訊的方式學習

路由測試

對於Linux主機,設定/proc/sys/net/ipv4/ip_forward的值爲1,即開啓了路由功能,能夠做爲模擬路由器使用spa

wKioL1M2qJDgtWVJAAGspjiVuW0909.jpg

注:但真實的路由器還應該存在生成路由表的機制,通常是基於路由協議(如RIP2,OSPF)動態學習的,在此不做討論

NAT

工做於網絡層和傳輸層,也可分爲靜態NAT和動態NAT

  • Basic NAT:靜態NAT;NAT服務器上有一個外網地址池,內網鏈接時直接分配一個外網IP使用,很不靈活

  • NAPT:動態NAT,Network Address Port Translation,即網絡端口地址轉換,也可分爲SNAT和DNAT

    • SNAT:源地址轉換;適用於內網主機訪問互聯網,原理圖以下:

      wKioL1M2qQjDPBwNAAS9qCPdMFQ935.jpg

    • DNAT:目標地址轉換;適用於讓互聯網主機訪問本地內網中的某主機上的服務,原理圖以下:

      wKiom1M2qVPD1SQIAAVaGmF2b-Y863.jpg


iptables/netfilter基於SNAT和DNAT原理實現報文轉發

  • -j SNAT --to-source SIP

    • 規則添加:在POSTROUTING鏈上

  • -j MASQUERADE

    • 用於外網IP是ADSL撥號上網時生成的動態IP,MASQUERADE模式能自行查找能訪問互聯網的外網IP,並完成SNAT

  • -j DNAT --to-destination DIP[:Port]

    • 支持端口映射

    • 規則添加:在PREROUTING鏈上

實例:

# 將外網對172.16.100.7:22022的訪問轉發至內網的192.168.20.12.22
iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 22022 -j DNAT --to-destination 192.168.20.12.22



iptables/netfilter實戰解析

需求分析

wKiom1M26zqSprGfAAMmc447Atg647.jpg

架構設計

wKioL1M26y_ASnyuAALkUgZwIyc755.jpg

配置部署

DNS Server配置

網絡配置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.178
NETMASK=255.255.0.0
GATEWAY=172.16.251.236

DNS主配置文件:/etc/named.conf

# named.conf中需修改的部分
listen-on port 53 { 127.0.0.1; 172.16.251.178;};
allow-query     { any; };
recursion no;
#zone "." IN {
#   type hint;
#   file "named.ca";
#};

DNS輔助配置文件:/etc/named.rfc1912.zones

acl inter_net {
172.16.251.0/24;
};
view inter_net {
match-clients { inter_net; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
zone "jason.com" IN {
type master;
file "jason.com.inter_net";
};
};
view outer_net {
match-clients { any; };
zone "jason.com" IN {
type master;
file "jason.com.outer_net";
};
};

區域數據文件

# vi /var/named/jason.com.inter_net
$TTL 1D
jason.com. IN SOA dns.jason.com. admin.jason.com (
2014032920 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns
dns A 172.16.251.178
www A 172.16.251.182
# vi /var/named/jason.com.outer_net
$TTL 1D
jason.com. IN SOA dns.jason.com. admin.jason.com (
2014032920 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns
dns A 172.16.251.178
www A 3.3.3.1

啓動named服務

chown root.named jason.com.inter_net
chown root.named jason.com.outer_net
service named restart

Web Server配置

配置一個虛擬主機,監聽端口8080
在DocumentRoot目錄下建立一簡單的測試文件test.html,內容隨意,如
「Hello Mageedu」
啓動httpd服務便可

Firewall配置

網絡配置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.236
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=3.3.3.1
NETMASK=255.255.255.0
DNS1=3.3.3.1

注:由於3.3.3.1和3.3.3.3都是模擬的外網IP地址,故對應的網卡應處於同一信道內,且不能和內網的通訊信道一致,故在用虛擬機測試時,可將對應內網IP的網卡的網絡方式改成橋接,而對應外網IP的網卡的網絡方式改成自定義,如vmnet2

添加iptables規則

iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p udp --dport 53 -j DNAT --to-destination 172.16.251.178
iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p tcp --dport 8080 -j DNAT --to-destination 172.16.251.182

Inter Client配置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.176
NETMASK=255.255.255.0
GATEWAY=172.16.251.236
DNS1=172.16.251.178
# vi /etc/resolv.conf
nameserver 172.16.251.178

Outer Client配置

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=3.3.3.3
NETMASK=255.255.255.0
GATEWAY=3.3.3.1
DNS1=3.3.3.1
# vi /etc/resolv.conf
nameserver 3.3.3.1

DNS解析測試

wKioL1M27yeguPY3AAEmn_6VUto674.jpg

HTTP訪問測試

wKiom1M273CAf5rlAAQtUHrZog8122.jpg

大功告成,哦也!


上一篇:iptables規則基本用法

相關文章
相關標籤/搜索