2013-04-22 79 views
0

我相信,我有安裝在防火牆正確這樣的:爲什麼我不能在debian 6上用iptables阻止ip地址?

#!/bin/sh 

IPT="/sbin/iptables" 

# Flush old rules, old custom tables 
$IPT --flush 
$IPT --delete-chain 

# Set default policies for all three default chains 
$IPT -P INPUT DROP 
$IPT -P FORWARD DROP 
$IPT -P OUTPUT ACCEPT 

# Enable free use of loopback interfaces 
$IPT -A INPUT -i lo -j ACCEPT 
$IPT -A OUTPUT -o lo -j ACCEPT 

# All TCP sessions should begin with SYN 
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP 

# Accept inbound TCP packets 
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT 
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT 
$IPT -A INPUT -p tcp --dport 81 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT 
$IPT -A INPUT -p tcp --dport 8181 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT 

# Accept outbound packets 
$IPT -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT 

但是,當我試圖阻止訪問我的web服務器的IP地址,這是行不通的,並且用戶仍然能夠訪問服務器。

iptables -A INPUT -s xx.xxx.xxx.xxx -j DROP 

我在想什麼?

回答

9

在所有INPUT規則末尾添加過濾規則不起作用,因爲之前會接受端口80上的所有http通信。

第一個數據包會被這條規則被接受: INPUT -p tcp --dport 80 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT 和所有後續數據包通過這一個: INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

爲了確保從你應該把你的XX.XX.XX.XX規則過濾器的所有數據包在INPUT鏈的第一個位置。

要做到這一點,所以你把iptables -A INPUT -s xx.xxx.xxx.xxx -j DROP放在別人之前,要麼你可以使用這個命令:iptables -I INPUT 1 -s xx.xxx.xxx.xxx -j DROP,要插入第一個位置。

+0

StackOverflow是關於編程,你的問題似乎是關於服務器配置...所以它應該張貼在serverFault上以接觸更多的人。 – fred 2013-04-22 12:20:54

+0

'iptables -I INPUT -s xx.xxx.xxx.xxx -j DROP'訣竅,謝謝! – 2013-04-25 19:08:05