0

我相信我已经像这样正确设置了防火墙:

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

我错过了什么?

4

1 回答 1

10

在所有 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来插入第一个位置。

于 2013-04-22T12:19:13.243 回答