这个防火墙阻止输入链吗?

这个防火墙阻止输入链吗?

我使用在线工具创建了 iptables 防火墙。基本上我只需要向外界开放端口 22 和 1194。但我注意到这个 bash 脚本默认将输入、转发和输出链作为接受。它是否阻止了除这两个端口之外的所有流量?谢谢。

IPTABLES=/sbin/iptables

# Flush, Init and Zero the 'built-in' chains

$IPTABLES -F INPUT; $IPTABLES -P INPUT ACCEPT; $IPTABLES -Z INPUT
$IPTABLES -F FORWARD; $IPTABLES -P FORWARD ACCEPT; $IPTABLES -Z FORWARD
$IPTABLES -F OUTPUT; $IPTABLES -P OUTPUT ACCEPT; $IPTABLES -Z OUTPUT
$IPTABLES -F -t nat;

# Setup user-defined chains

$IPTABLES -X
$IPTABLES -N LINWIZ-INPUT;
$IPTABLES -N REJECT-PKT;
$IPTABLES -N SYN-FLOOD;

$IPTABLES -A INPUT -j LINWIZ-INPUT

######################################################################
# Allow all loopback interface traffic

$IPTABLES -A LINWIZ-INPUT -i lo -j ACCEPT

# Block all attempts to spoof the loopback address

$IPTABLES -A LINWIZ-INPUT -s 127.0.0.0/8 -j LOG --log-prefix "SPOOFED-LOOPBACK: "
$IPTABLES -A LINWIZ-INPUT -s 127.0.0.0/8 -j DROP
$IPTABLES -A LINWIZ-INPUT -d 127.0.0.0/8 -j LOG --log-prefix "SPOOFED-LOOPBACK: "
$IPTABLES -A LINWIZ-INPUT -d 127.0.0.0/8 -j DROP

# Block all attempts to spoof the local IP address

$IPTABLES -A LINWIZ-INPUT -s 192.73.244.224 -j LOG --log-prefix "SPOOFED-IP: "
$IPTABLES -A LINWIZ-INPUT -s 192.73.244.224 -j DROP

# Block Syn Flood attacks

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --syn -j SYN-FLOOD

# Ensure that TCP connections start with syn packets

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp ! --syn -m state --state NEW -j LOG --log- prefix "SYN-EXPECTED: "
$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP

# Allow session continuation traffic

$IPTABLES -A LINWIZ-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow selected TCP/IP and/or UDP services

$IPTABLES -A LINWIZ-INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPTABLES -A LINWIZ-INPUT -p udp -m udp --dport 1194 -j ACCEPT

# Block all other TCP/IP and UDP traffic

$IPTABLES -A LINWIZ-INPUT -j REJECT-PKT

######################################################################
# Syn flood filtering chain

$IPTABLES -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A SYN-FLOOD -j LOG --log-prefix "SYN-FLOOD: "
$IPTABLES -A SYN-FLOOD -j DROP

######################################################################
# Chain used to reject all TCP/IP, UDP and ICMP/PING packets

$IPTABLES -A REJECT-PKT -p tcp -m tcp -j LOG
$IPTABLES -A REJECT-PKT -p tcp -m tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A REJECT-PKT -p udp -m udp -j LOG
$IPTABLES -A REJECT-PKT -p udp -m udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A REJECT-PKT -p icmp -m icmp --icmp-type ping -j LOG
$IPTABLES -A REJECT-PKT -p icmp -m icmp --icmp-type ping -j REJECT --reject-with icmp-host-unreachable

######################################################################
# Forward, NAT and routing

$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -s 10.8.0.0/24 -j ACCEPT    
$IPTABLES -A FORWARD -j REJECT
$IPTABLES -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to 192.73.244.224
$IPTABLES -t nat -A PREROUTING -p udp --dport 1004:65535 -j REDIRECT --to-port 1194
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -L -nv

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1    18455 2290K LINWIZ-INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1    40199   31M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2      736 42865 ACCEPT     all  --  *      *       10.8.0.0/24          0.0.0.0/0           
3        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable 

Chain OUTPUT (policy ACCEPT 27445 packets, 35M bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain LINWIZ-INPUT (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
2        0     0 LOG        all  --  *      *       127.0.0.0/8          0.0.0.0/0           LOG flags 0 level 4 prefix `SPOOFED-LOOPBACK: ' 
3        0     0 DROP       all  --  *      *       127.0.0.0/8          0.0.0.0/0           
4        0     0 LOG        all  --  *      *       0.0.0.0/0            127.0.0.0/8         LOG flags 0 level 4 prefix `SPOOFED-LOOPBACK: ' 
5        0     0 DROP       all  --  *      *       0.0.0.0/0            127.0.0.0/8         
6        0     0 LOG        all  --  *      *       192.73.244.224       0.0.0.0/0           LOG flags 0 level 4 prefix `SPOOFED-IP: ' 
7        0     0 DROP       all  --  *      *       192.73.244.224       0.0.0.0/0           
8     1160 69580 SYN-FLOOD  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 
9        0     0 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 state NEW LOG flags 0 level 4 prefix `SYN-EXPECTED: ' 
10       0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02 state NEW 
11   17245 2216K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
12       3   180 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
13      33  2330 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194 
14     771 47070 REJECT-PKT  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain REJECT-PKT (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1      767 46830 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp LOG flags 0 level 4 
2      767 46830 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp reject-with tcp-reset 
3        0     0 LOG        udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp LOG flags 0 level 4 
4        0     0 REJECT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp reject-with icmp-port-unreachable 
5        4   240 LOG        icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 LOG flags 0 level 4 
6        4   240 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 reject-with icmp-host-unreachable 

Chain SYN-FLOOD (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1      758 45460 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           limit: avg 1/sec burst 4 
2      402 24120 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `SYN-FLOOD: ' 
3      402 24120 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

答案1

这些类型的自动生成系统经常会产生一些非常复杂和可怕的输出。这会导致输出既难以阅读又难以维护。不幸的是,这可能会导致防火墙配置太难维护,导致配置过时,甚至更糟的是,它无法按照你的想法运行应该正在做。

你实际上有一些非常简单的要求,两个端口肯定可以满足不是需要 83 行。因此,为了摆脱程序为您生成的繁琐配置,我的建议是放弃它并手动构建您自己的配置。对于您的目的,iptables 实际上非常简单,并且生成的配置实际上是可以理解的。除了您想要的两个端口之外,我建议允许 ICMP。互联网的设计理念是完全功能的 ICMP。如果您愿意,可以限制 ping,但完全阻止 ICMP 可能会导致其他问题。

您的输出实际上是一个从头开始设置防火墙的 shell 脚本,但为了简单起见,我将使用您可能/etc/sysconfig/iptables在 RedHat 衍生产品中找到的内容。它非常相似,但略有清理。如果您需要它是一个脚本,您应该能够$IPTABLES根据需要添加相关内容。以下是您应该开始的内容。

*filter
:INPUT ACCEPT
:FORWARD DROP
:OUTPUT ACCEPT

# Allow SSH from a couple of different addresses and address blocks.
# Remove '-s XXXXX' to allow access from everywhere
-A INPUT  -s 10.10.1.5 -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT  -s 10.10.50.0/24 -m tcp -p tcp --dport 22 -j ACCEPT

# Allow 1194 from the same hosts 
-A INPUT  -s 10.10.1.5 -m udp -p udp --dport 1194 -j ACCEPT
-A INPUT  -s 10.10.50.0/24 -m udp -p udp --dport 1194 -j ACCEPT

# Now we'll block ICMP echo request (ping) then allow all other ICMP
-A INPUT -p icmp --icmp-type 8 -j DROP  
-A INPUT -p icmp -j ACCEPT  

# Log everything else and drop it with no error code response.
-A INPUT -j LOG --log-level 7 --log-prefix "IPTABLES Dropped: "
-A INPUT -j DROP
COMMIT

那里只有 22 行代码,仍然包含文档注释,并且完全满足您的需要。我可能还会提到一篇关于信息技术安全社区博客IPTables 中的基本规则集

答案2

对于我来说,用 icmp-host-unreachable 来对 ping 做出反应(以被 ping 的 IP 作为源地址……)似乎是愚蠢的。

回答您的问题:此脚本阻止除 tcp(22)、udp(1194) 和 icmp(除 ping 外)之外的所有内容。它还通过转发从给定范围收到的数据包并放置自己的公共 IP 192.73.244.224 来为 10.8.0.0/8 中的机器执行 NAT。此外,该脚本还将所有来自 1024:6535 范围内的 UDP 端口的请求重定向到端口 1194(VPN)。阻止回显请求并让所有其他 ICMP 数据包通过是否有意义是另一个问题...

相关内容