天天看點

linux防火牆簡單應用整理

入侵某台電腦有很多種途徑,其中通過端口進行入侵比較普遍,而且一經成功危害比較大。特别是作為伺服器的計算機,把不必要的端口關閉,這是常用的做法。

對端口的處理 常用的做法:

關閉所有端口,隻打開要對外使用的端口。 

例如:作為web伺服器 我們可以關閉所有端口,隻打開80端口。

修改預設設定

# iptables -L -n

看到 INPUT ACCEPT, FORWARD ACCEPT , OUTPUT ACCEPT

我們可以這樣了解,iptables 由3個部分組成INPUT, FORWARD 和 OUTPUT,我們先看 INPUT 和 OUTPUT(policy ACCEPT) 表示是完全接受 所有的資料,也就是說現在的iptables 防火牆 沒有起到任何作用。

修改防火牆的預設設定:

# iptables -P INPUT DROP

# iptables -P INPUT ACCEPT

隻允許某個端口通路

配置伺服器時往往是隻打開某個端口,其他的端口全部關閉來提高我們伺服器的安全性。

下面我就用端口22來舉個例子如何實作,隻允許端口22的通路 其他端口全部都不能通路的, 端口22就是我們通過ssh來進行遠端通路Linux預設端口。

關閉所有端口

看我現在伺服器的情況:

通過指令 netstat -tnl 可以檢視目前伺服器打開了哪些端口

[root@localhost ~]# netstat -tnl

下面我們關閉所有的端口

]# iptables -P INPUT DROP

]# iptables -P FORWARD DROP

]# iptables -P OUTPUT DROP

再檢視一下 iptables -L -n

好成功關閉了所有端口。

打開22端口

下面我隻打開22端口,就是下面2個語句

]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

]# service iptables save

* 打開53端口(原始檔案沒有)

下面我隻打開53端口,就是下面2個語句

針對本地服務的設定

]# iptables -A INPUT -p tcp --sport 53 -j ACCEPT

]# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

針對DNS伺服器的設定

]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

]# iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT

再檢視下 iptables -L -n 是否添加上去, 看到添加了

針對這2條指令進行一些講解吧

-A 參數就看成是添加一條 INPUT 的規則

-p 指定是什麼協定 我們常用的tcp 協定,當然也有udp 例如53端口的DNS

到時我們要配置DNS用到53端口 大家就會發現使用udp協定的

而 --dport 就是目标端口 當資料從外部進入伺服器為目标端口

反之 資料從伺服器出去 則為資料源端口 使用 --sport

-j 就是指定是 ACCEPT 接收 或者 DROP 不接收

禁止、允許 某個IP通路

很多時候我們出于安全的角度需要禁止某個ip通路本伺服器,或者隻能接受某個ip通路。

例如發現伺服器受到某個ip攻擊,就可以拒絕該ip的通路。

還有就是我這台伺服器裡面很多保密資料,不允許任何ip通路,就隻允許給某一個ip可以通路。

1. 首先第一種情況  禁止某個ip通路我的網站

要禁止 192.168.1.1 通路

]# iptables -A INPUT -p tcp -s 192.168.1.1 -j DROP

2. 隻允許某台電腦通路

隻允許 ip為 192.168.1.2 的電腦通路, 隻設定 INPUT 通過還是不行;還要設定 OUTPUT 才行。

[root@localhost ~]# iptables -A INPUT -p tcp -s 192.168.1.2 -j ACCEPT

[root@localhost ~]# iptables -A OUTPUT -p tcp -d 192.168.1.2 -j ACCEPT

[root@localhost ~]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  192.168.1.2          0.0.0.0/0

Chain FORWARD (policy DROP)

Chain OUTPUT (policy DROP)

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.2

3. 删除規則

删除一些規則

我們經常會添加一些規則,但是當我們不再使用了其中一條規則,就要删除。或者添加寫錯了一些資料,也需要删除。

我們都知道 iptables -L -n 可以檢視iptables 的設定情況

通過 iptables -L -n --line-number 可以顯示規則和相對應的編号,多了 num 這一列, 這樣就可以用規則對應的 編号進行删除了

iptables -D INPUT 2

删除INPUT鍊編号為2的規則。

下面我把其餘的 也删除掉。 删除完了。

]# netstat -nltp

]# iptables -L -n

]# iptables -L -n --line-number

]# iptables -D INPUT 2

]# iptables -D OUTPUT 2

]# iptables -D FORWARD 2

再 iptables -L -n 檢視一下 已經被清除了。

過濾無效的資料包

之前我們配置過iptables隻開放某些端口,但是想安全點的話,還需要過濾一些無效的資料包,怎樣才算無效? 不是正常請求回應的資料包。

為什麼這樣說呢? 例如,現在有台Linux伺服器,隻開放22和80端口,也就是 INPUT和OUTPUT都是開放的,這個2個端口。

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:80

情況就像現在這樣。為什麼說不夠安全呢 ??

假設有人進入了伺服器,或者有病毒木馬程式,它可以通過22,80端口向伺服器外傳送資料。它的這種方式就和我們正常通路22,80端口有差別。它發向外發的資料不是我們通過通路網頁請求而回應的資料包。

下面我們要禁止這些沒有通過請求回應的資料包,統統把它們堵住掉。iptables 提供了一個參數 是檢查狀态的,下面我們來配置下 22 和 80 端口,防止無效的資料包。

]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

可以看到和我們以前使用的:

多了一個狀态判斷。

同樣80端口也一樣, 現在删掉原來的2條規則,iptables -L -n --line-number這個是檢視規則而且帶上編号。我們看到編号就可以删除對應的規則了。

這樣就可以防止别人利用22和80端口,随意發出沒有經過請求的資料包了。

DNS端口53

上幾次視訊我們做了端口方面的設定, 如果你發現不能解析一些域名,說明DNS不可用,而DNS不能用了,有幾種可能性,其中一種就是防火牆把DNS端口給關閉了。

如何設定iptables來打開DNS端口,DNS端口對應的是53

ping 一下域名也是不通(iptables限制了域名解析請求)

[root@localhost ~]# ping www.google.com

ping: unknown host www.google.com

下面示範下如何使用 iptables 來設定DNS 53這個端口,如果你不知道 域名服務端口号,你

可以用指令 : grep domain /etc/services

[root@localhost ~]# grep domain /etc/services

domain          53/tcp                          # name-domain server

domain          53/udp

domaintime      9909/tcp                        # domaintime

domaintime      9909/udp                        # domaintime

同時還要設定

]# iptables -A INPUT -p udp --dport 53 -j ACCEPT

]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

ping 方面可能還要設定些東西。

用 nslookup 看看吧

[root@localhost ~]# nslookup

> www.google.com

Server:         192.168.1.1

Address:        192.168.1.1#53

Non-authoritative answer:

www.google.com  canonical name = www.l.google.com.

www.l.google.com        canonical name = www-china.l.google.com.

Name:   www-china.l.google.com

Address: 64.233.189.147

Address: 64.233.189.99

Address: 64.233.189.104

說明本機DNS正常, iptables 允許53這個端口的通路。

FTP服務設定

我之前也做過iptables允許某個端口通路的視訊,為什麼還要做ftp端口這個示範?因為ftp端口真的比較特殊,并不像80,22這些端口。

FTP服務使用了兩個端口20,21

[root@localhost root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@localhost root]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

這樣就添加完了,我們用浏覽器通路一下ftp,出現逾時。是以我剛才說 ftp 是比較特殊的端口,它還有一些端口是資料傳輸端口,例如目錄清單, 上傳 ,下載下傳 檔案都要用到這些端口。而這些端口是任意端口。這個任意真的比較特殊。

如果不指定什麼一個端口範圍, iptables 很難對任意端口開放的,如果iptables允許任意端口通路, 那和不設定防火牆沒什麼差別,是以不現實的。那麼我們的解決辦法就是指定這個資料傳輸端口的一個範圍。

下面我們修改一下ftp配置檔案。

我這裡使用vsftpd來修改示範。

[root@localhost root]# vi /etc/vsftpd.conf

在配置檔案的最下面 加入

pasv_min_port=30001

pasv_max_port=31000

然後儲存退出。

這兩句話的意思告訴vsftpd, 要傳輸資料的端口範圍就在30001到31000 這個範圍内傳送。這樣我們使用 iptables 就好辦多了,我們就打開 30001到31000 這些端口。

[root@localhost root]# iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT

[root@localhost root]# iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT

[root@localhost root]# service iptables save

最後進行儲存, 然後我們再用浏覽器範圍下 ftp。可以正常通路

上傳和下載下傳都正常。。 再檢視下 iptables 的設定

[root@localhost root]# iptables -L -n

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:21

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpt:20

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp dpts:30001:31000

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:21

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spt:20

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0          tcp spts:30001:31000

可以添加一些對資料包的驗證例如 -m state --state ESTABLISHED,RELATED  等等要求更加高的驗證

繼續閱讀