我的iptables脚本阻止传入/传出的DNS

这是iptables脚本:

echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/conf/all/log_martians iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -N TCPIN iptables -N UDPIN iptables -N TCPOUT iptables -N UDPOUT iptables -N VALIDTCP iptables -N LOGDROP iptables -A INPUT -p tcp -j VALIDTCP iptables -A INPUT -p tcp -j TCPIN iptables -A INPUT -p udp -j UDPIN iptables -A OUTPUT -p tcp -j VALIDTCP iptables -A OUTPUT -p tcp -j TCPOUT iptables -A OUTPUT -p udp -j UDPOUT iptables -A TCPIN -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A TCPIN -p tcp -m state --state NEW --dport 2122 -j ACCEPT iptables -A TCPIN -p tcp -m state --state NEW --dport 80 -j ACCEPT iptables -A TCPIN -p tcp -m state --state NEW --dport 443 -j ACCEPT iptables -A UDPIN -p udp --dport 53 -j ACCEPT iptables -A TCPIN -p tcp -m state --state NEW --dport 53 -j ACCEPT iptables -A LOGDROP -j LOG --log-ip-options --log-tcp-options --log-level debug --log-prefix IPTABLES: iptables -A LOGDROP -j DROP iptables -A VALIDTCP -p tcp --tcp-flags ALL NONE -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags ACK,FIN FIN -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags ACK,PSH PSH -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags ACK,URG URG -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags SYN,RST SYN,RST -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGDROP iptables -A VALIDTCP -p tcp --tcp-flags FIN,RST FIN,RST -j LOGDROP 

只要我申请,我的DNS查找都失败了…有什么问题吗? :/

iptables -A INPUT -p tcp -j VALIDTCP

iptables -A INPUT -p tcp -j TCPIN

规则按顺序进行比较,而-j表示“跳转到” – 所以没有什么会跳转到TCPIN链上,因为所有的tcp数据包都被redirect到其他地方。

而且,对于这样一个小型的防火墙,这看起来像是一个非常复杂的设置。 把事情简单化 :-)

这是未经testing ,但这不会做基本相同的事情(我放弃了tcp标志检查,但随时重新添加它)

 echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/conf/all/log_martians iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW --dport 2122 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT iptables -A INPUT -j LOG --log-ip-options --log-tcp-options --log-level debug --log-prefix IPTABLES: 

即:允许stream量出站(包括DNS请求) – 然后通过“相关的,build立的”规则允许stream量返回。 并且还允许在端口80,443,2122上的新连接(然后在相同的相关连接上进行匹配)。 其他的一切都被默认的-P DROP规则抛弃。