一.什麼是防火牆?
防火牆是不同網絡之間信息的唯一出入口,能根據我們制定的策略來控制(允許、拒絕)進出的數量流,並且本身具有抗***能力,能有效保證我們內部 網絡的安全。
二.防火牆 的作用?
防火牆 的作用是防止不希望 的,未經授權 的信息進出被保護的網絡,迫使一個組織強化 自己的網絡安全策略,被認爲是一個可信的內部網絡和不那麼安全可信的外部網絡之間提供的一個封鎖工具。
三.默認的四張表
1、filter:用於防火牆,默認有INPUT/OUTPUT/FORWARD三條鏈
2、nat:網絡地址轉換,PREROUTING/POSTROUTING/OUTPUT三條鏈
3、mangle:流量整形,五條鏈
4、raw:用於狀態跟蹤
四.默認的五條規則鏈
1、INPUT: 如果一個數據包的目的地址是LINUX本身,則進入INPUT鏈
2、OUTPUT: 源地址是LINUX本身
3、FORWARD: 數據包從一塊網卡接收,從另一塊網卡發出,經過LINUX的包,進入這條鏈
4、PREROUTING: 路由前
5、POSTROUTING: 路由後
五.編寫規則
添加規則 -A 在鏈的末尾追加一條規則
-I 在鏈的開頭(或指定序號)插入一條規則
查看規則 -L 列出所有的規則條目
-n 以數字形式顯示地址、端口等信息
--line-numbers 查看規則時,顯示規則的序號
刪除規則 -D 刪除鏈內指定 序號(或內容)的一條規則
-F 清空所有的規則
默認規則 -P 爲指定的鏈設置默認規則
六.規則的基本匹配條件
通用匹配 協議匹配 -p 協議名
地址匹配 -s 源地址 -d 目的地址
接口匹配 -i 收數據的網卡 -o 發數據的網卡
隱含匹配 ICMP類型匹配 --icmp-type ICMP類型
TCP標記匹配 --tcp-flags 檢查哪些位 哪些位被設置
七.IPtables的應用,配置主機型防火牆
1.清空防火牆的規則
2.允許SSH
3.設置默認規則
4.設置允許http
5.拒絕 ping防火牆本身,客戶端訪問可以ping通
在服務器上設置策略,客戶端ping服務器的包丟棄
在客戶端進行測試,客戶端沒有任何信息
在服務器上設置策略,客戶端ping服務器的包拒絕
在客戶端進行測試,顯示路由不可達
允許指定IP(192.168.1.40)地址的主機PING防火牆
在192.168.1.40上測試,是否可以ping通
在192.168.1.20上測試,是否可以ping通
6.查看防火牆規則,每個規則註明序號
7.刪除防火牆的INPUT鏈中第二條規則查看防火牆規則,每個規則註明序號
8.允許特定IP地址訪問LINUX的telnet服務
允許192.168.1.40訪問Telnet服務
在192.168.1.40上測試查看是否允許Telnet
在192.168.1.20上測試查看是否允許Telnet
向INPUT鏈插入規則,作爲第一條。從eth1網卡收到的、訪問telnet服務的數據包,拒絕
在192.168.1.40上測試
八.配置網絡型防火牆
實驗環境:有三臺主機
第一臺主機: IP地址爲:192.168.1.40 網關爲:192.168.1.254 主機名爲:fanxiaohui
第二臺主機:IP地址爲:192.168.1.254 IP地址爲:1.1.1.254 主機名爲:waiwang
第三臺主機:IP地址 爲:1.1.1.1 網關爲:1.1.1.254 主機名爲fanlj
在第二臺主機上開啓路由轉發功能,使192.168.1.40可以ping通1.1.1.1
打開LINUX路由功能(轉發功能)
IS: 中間系統,路由器。
ES: 終端系統,主機系統。
1、臨時打開路由功能
[root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
2、永久打開轉發功能
[root@localhost ~]# echo ‘echo 1 > /proc/sys/net/ipv4/ip_forward’ >> /etc/rc.local
或
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
3.在第二臺服務器上關閉iptables後1.1.1.1可以Telnet到192.168.1.40
拒絕1.1.1.0/24網段訪問192.168.1.0/24網段的telnet服務
在第二臺服務器上配置iptables
[root@fanlj ~]# iptables -A FORWARD -s 1.1.1.0/24 -d 192.168.1.0/24 -p tcp --dport 23 -i eth0 -o eth1 -j REJECT
[root@fanlj ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 1.1.1.0/24 192.168.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
在1.1.1.1上測試是否可以Telnet 192.168.1.40上
怎麼測試是防火牆策略起作用呢?
在第二臺服務器上查看防火牆策略
[root@fanlj ~]# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 60 REJECT tcp -- eth1 eth0 192.168.1.0/24 1.1.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
4.從拒絕SSH協議通過防火牆
在192.168.1.40上ssh到1.1.1.1上
[root@fanxiaohui ~]# ssh 1.1.1.1
The authenticity of host '1.1.1.1 (1.1.1.1)' can't be established.
RSA key fingerprint is 77:0d:65:ee:8d:e6:98:0f:1e:32:3a:2a:a7:ea:43:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '1.1.1.1' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Sat Oct 24 22:30:28 2015
[root@waiwang ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:9D:CB:9C
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
在192.168.1.254上拒絕192.168.1.40ssh到1.1.1.1上
[root@fanlj ~]# iptables -I FORWARD -p tcp --dport 22 -j REJECT
[root@fanlj ~]# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:23 reject-with icmp-port-unreachable
1 60 REJECT tcp -- eth1 eth0 192.168.1.0/24 1.1.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
在192.168.1.40上測試
[root@fanxiaohui ~]# ssh 1.1.1.1
ssh: connect to host 1.1.1.1 port 22: Connection refused
在1.1.1.1上測試,查看是不能可以ssh192.168.1.40
不是192.168.1.0/24網段的主機可以訪問SSH服務
[root@fanlj ~]# iptables -I FORWARD ! -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
在1.1.1.1上測試,查看是可以ssh192.168.1.40
5.在1.1.1.1上搭建ftp服務,並且input和output全部拒絕,允許遠程主機可以訪問1.1.1.1上的ftp服務。
在遠程主機192.168.1.40上訪問1.1.1.1上的ftp服務,可以訪問。
[root@fanxiaohui ~]# ftp 1.1.1.1
Connected to 1.1.1.1 (1.1.1.1).
220 (vsFTPd 2.2.2)
Name (1.1.1.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
在1.1.1.1上自己訪問ftp服務,遠程主機可以訪問1.1.1.1上ftp服務,但是自己不能訪問自己的ftp服務,怎麼設置可以自己訪問自己的ftp服務。
自己發給自己的包目標端口也是自己,所有output鏈的dport也是20:21
6.防火牆拒絕icmp通過
[root@fanlj ~]# iptables -A FORWARD -p icmp -j REJECT
僅允許192.168.1.0/24能ping通1.1.1.0/24
[root@fanlj ~]# iptables -I FORWARD -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
[root@fanlj ~]# iptables -I FORWARD -d 192.168.1.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
九.擴展匹配
1、網絡連接的五種狀態
NEW,請求建立連接的包、完全陌生的包
ESTABLISHED,將要或已經建立連接的包
RELATED,與已知某個連接相關聯的包
INVALID,無對應連接,以及連接無效的包
UNTRACKED,未跟蹤狀態的包
2、192.168.1.0/24作爲內網,1.1.1.0/24作爲外網。從內到外的訪問不受限制,從外到內的主動連接全部拒絕。
[root@fanlj ~]# iptables -P FORWARD DROP
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -m state --state ESTABLISHED -j ACCEPT
3.允許ftp連接(主被動模式),192.168.1.0/24作爲內網,1.1.1.0/24作爲外網,從內到外可以主動連接,也可以被動連接,但是不允許外網主機連接內網。
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 20:21 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 20:21 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -m state --state NEW,ESTABLISH,RELATED -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -m state --state ESTABLISH,RELATED -j ACCEPT