为什么我不能在debian 6上使用iptables阻止ip地址?

时间:2013-04-22 08:20:34

标签: debian firewall iptables

我相信我已正确设置防火墙:

#!/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

但是,当我尝试阻止IP地址访问我的网络服务器时,它无效,用户仍然可以访问服务器。

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

我错过了什么?

1 个答案:

答案 0 :(得分: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来插入第一个位置。