我相信我已正确设置防火墙:
#!/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
我错过了什么?
答案 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
来插入第一个位置。