iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

Linux in my LIFE系列 第 24

我的Linux生活日記 24.防火牆-iptables

  • 分享至 

  • xImage
  •  

有項需求是這樣的:有一台虛擬機有安裝資料庫 MySQL,在資安規劃上只允許系統 網頁伺服器 及 控制主機 向 資料庫服務 連接,而且禁止該虛擬機連到其他設備。

上述需求要怎麼完成呢?如果是昨天說到的防火牆 firewalld 是可以做到的,但是在維護上會很困難,因為 firewalld的主要原則是網路流向從外進入主機嚴謹,從主機內部到外部網路環境寬鬆,而上述需求剛剛好跟 firewalld 衝突。不同的需求有不同合適工具可以達成,今天就用 iptables 完成這項需求。

需求分析

設定之前必須先規劃防火牆,但是規劃之前做重要的事釐清網路環境。首先必須先知道該虛擬機的網卡IP。

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 7c:2a:31:fa:6b:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0
       valid_lft 85410sec preferred_lft 85410sec
    inet6 2404:0:8038:d3bf:1182:9247:af40:4002/64 scope global dynamic noprefixroute 
       valid_lft 297sec preferred_lft 117sec
    inet6 fe80::3c62:bfc7:cd45:4644/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

然後連線的 網頁伺服器主機IP 有:192.168.56.3、192.168.56.4。控制台主機IP是:192.168.56.90。

另外這台主機操作方式主要是透過 ssh 遠端操控的,所以有一項隱性需求:必須保持 SSH 連線暢通。

還有很重要一項,必須讓其他主機 ping 的到該虛擬機,因為該網路是公共空間,有不同人共同管理。

所以這次範例的防火牆規劃是這樣的:

  1. 允許 port 3306 對 192.168.56.3、192.168.56.4 開放。
  2. 允許 port ssh 對 192.168.56.90 開放。
  3. 允許 ping。
  4. 其餘連線一律丟棄。
  5. 對外連線一律不通。

實做

iptables 設定一有一個原則:開放最小的優先設定,越大越後設定。

  1. 清空 iptables 規則
iptables -F
iptables -X
iptables -Z
  1. INPUT: 新增 lo 網卡
iptables -I INPUT 1 0 -i lo -j ACCEPT
  1. INPUT: 允許 port 3306 對 192.168.56.3、192.168.56.4 開放
iptables -I INPUT 2 -i eth0 -s 192.168.56.3/32 -p tcp -m multiport --destination-port 3306 -j ACCEPT
iptables -I INPUT 3 -i eth0 -s 192.168.56.4/32 -p tcp -m multiport --destination-port 3306 -j ACCEPT
  1. INPUT: 允許 port ssh 對 192.168.56.90 開放。
iptables -I INPUT 4 -i eth0 -s 192.168.56.90/32 -p tcp -m multiport --destination-port 22 -j ACCEPT
  1. INPUT: icmp
iptables -A INPUT -i eth0 -s 0.0.0.0/32 -p icmp --icmp-type 8 -j ACCEPT
  1. INPUT: 其餘連線一律丟棄。
iptables -A INPUT -i eth0 -s 0.0.0.0/0 -j DROP
  1. OUTPUT: 允許 port 3306 對 192.168.56.3、192.168.56.4 開放
iptables -I OUTPUT 1 -i eth0 -s 192.168.56.3/32 -p tcp -m multiport --destination-port 3306 -j ACCEPT
iptables -I OUTPUT 2 -i eth0 -s 192.168.56.4/32 -p tcp -m multiport --destination-port 3306 -j ACCEP
  1. OUTPUT: 允許 port ssh 對 192.168.56.90 開放。
iptables -I OUTPUT 3 -i eth0 -s 192.168.56.90/32 -p tcp -m multiport --destination-port 22 -j ACCEPT
  1. OUTPUT: icmp
iptables -I OUTPUT 4 -i eth0 -s 0.0.0.0/32 -p icmp --icmp-type 8 -j ACCEPT
  1. OUTPUT: 對外連線一律不通。
iptables -A OUTPUT -i eth0 -s 0.0.0.0/0 -j DROP
  1. 儲存連線
  • CentOS6
service iptables save
  • CentOS7
iptables-save > /etc/sysconfig/iptables

設定防火牆有一點必須注意,要竭盡可能離主機近一點,因為總有手臭、恍神的時候,把自己擋在防火牆外。這時候 螢幕、鍵盤、滑鼠 或是 console 就重要了。


上一篇
我的Linux生活日記 23.防火牆-firewalld
下一篇
我的Linux生活日記 25.分享資料夾-nfs Server
系列文
Linux in my LIFE32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言