我一周前安装了 Ubuntu Server 64 位 14.04。它工作了一到几天,然后突然之间,iptables 变得毫无意义(我注意到 FTP 等都关闭了)。只有端口 22、25 和 80 是开放的。iptables -S
看起来不错,但由于某种原因不再受到尊重。刷新和所有端口都没有打开,只有 22、25 和 80。没有安装网络管理器(我也验证过)。我没有任何其他防火墙...我不明白?
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto em1
iface em1 inet static
address XX.15.191.XXX
netmask 255.255.255.240
gateway XX.15.191.XXX
dns-nameservers XX.105.28.XX
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-restore > /etc/iptables.downrules
Run Code Online (Sandbox Code Playgroud)
/etc/hosts
127.0.0.1 localhost
127.0.1.1 MY-SERVER.ph.cox.net MY-SERVER
XX.15.191.XXX mysite.com
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Run Code Online (Sandbox Code Playgroud)
/etc/hostname
:
MY-SERVER
Run Code Online (Sandbox Code Playgroud)
/etc/resolv.conf
(未设置为我的,如果我理解正确则自动设置):
nameserver XX.105.28.XX
Run Code Online (Sandbox Code Playgroud)
/etc/iptables.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [19969:30829963]# <--- not sure where this came from?
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --mask 255.255.255.255 --rsource
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH --mask 255.255.255.255 --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
#-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -d 0/0 -s 0/0 --dport 5900 -j ACCEPT
#-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
#-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
Run Code Online (Sandbox Code Playgroud)
这是dmesg
启动后唯一明显的,但它似乎没有关系,因为我在 IP4 上,此外,它可以工作 1 到 3 天。
IPv6: ADDRCONF(NETDEV_UP): em1: link is not ready
Run Code Online (Sandbox Code Playgroud)
dmesg | grep eth0
:
[ 3.787227] e1000e 0000:00:19.0 eth0: registered PHC clock
[ 3.787228] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) c8:60:00:24:ea:cc
[ 3.787229] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection
[ 3.787281] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
[ 5.219089] systemd-udevd[157]: renamed network interface eth0 to em1
Run Code Online (Sandbox Code Playgroud)
sudo lsof -i -s tcp:listen (按要求输出)
sshd 960 root 3u IPv4 564 0t0 TCP *:ssh (LISTEN)
sshd 960 root 4u IPv6 566 0t0 TCP *:ssh (LISTEN)
mysqld 1011 mysql 12u IPv4 602 0t0 TCP localhost:mysql (LISTEN)
exim4 2001 Debian-exim 3u IPv4 11966 0t0 TCP localhost:smtp (LISTEN)
exim4 2001 Debian-exim 4u IPv6 11967 0t0 TCP localhost:smtp (LISTEN)
exim4 2001 Debian-exim 5u IPv4 11968 0t0 TCP mysite.com:smtp (LISTEN)
searchd 2025 root 7u IPv4 14510 0t0 TCP *:9312 (LISTEN)
proftpd 2041 proftpd 2u IPv6 11974 0t0 TCP *:ftp (LISTEN)
apache2 2103 root 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 3882 www-data 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 4230 www-data 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 etc, etc...
Run Code Online (Sandbox Code Playgroud)
sudo lsof -i -s tcp:listen(ftp 工作正常后 1 周,端口突然被阻塞)
sshd 960 root 3u IPv4 564 0t0 TCP *:ssh (LISTEN)
sshd 960 root 4u IPv6 566 0t0 TCP *:ssh (LISTEN)
mysqld 1011 mysql 12u IPv4 602 0t0 TCP localhost:mysql (LISTEN)
exim4 2001 Debian-exim 3u IPv4 11966 0t0 TCP localhost:smtp (LISTEN)
exim4 2001 Debian-exim 4u IPv6 11967 0t0 TCP localhost:smtp (LISTEN)
exim4 2001 Debian-exim 5u IPv4 11968 0t0 TCP mysite.com:smtp (LISTEN)
searchd 2025 root 7u IPv4 14510 0t0 TCP *:9312 (LISTEN)
apache2 2103 root 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 4151 www-data 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 4710 www-data 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 etc, etc...
Run Code Online (Sandbox Code Playgroud)
sudo nmap -O mysite.com(ftp 工作正常后 1 周,端口突然被阻塞)
20/tcp closed ftp-data
21/tcp closed ftp
22/tcp open ssh
25/tcp open smtp
53/tcp closed domain
80/tcp open http
143/tcp closed imap
443/tcp closed https
993/tcp closed imaps
3306/tcp closed mysql
4444/tcp closed krb524
5900/tcp closed vnc
Run Code Online (Sandbox Code Playgroud)
sudo iptables-save(按要求输出)
# Generated by iptables-save v1.4.21 on Tue May 27 20:39:05 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17351423:29122270850]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --mask 255.255.255.255 --rsource
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH --mask 255.255.255.255 --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Tue May 27 20:39:05 2014
Run Code Online (Sandbox Code Playgroud)
ifconfig(按要求输出)
em1 Link encap:Ethernet HWaddr c8:60:00:24:ea:cc
inet addr:XX.15.191.XXX Bcast:XX.15.191.XXX Mask:255.255.255.240
inet6 addr: fe80::ca60:ff:fe24:eacc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19212799 errors:0 dropped:0 overruns:0 frame:0
TX packets:24791186 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6488896548 (6.4 GB) TX bytes:29719279878 (29.7 GB)
Interrupt:20 Memory:f7d00000-f7d20000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:4415657 errors:0 dropped:0 overruns:0 frame:0
TX packets:4415657 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:573695629 (573.6 MB) TX bytes:573695629 (573.6 MB)
Run Code Online (Sandbox Code Playgroud)
好吧,我想我们不可能一次性解决这个问题。因此,我将随时编辑我的答案。到目前为止的数据表明没有理由iptables
不起作用。查看lsof
我要求您提供和您提供的输出的(可能)相关行,您应该只看到您提到的端口:
仅开放特定端口,例如 22、25 和 80
打开,其他关闭。但是,您应该看到打开的 21、22、80 和 9312。没有服务在侦听其他端口(输出的精简版本sudo lsof -i -s tcp:listen
):
sshd 960 root 3u IPv4 564 0t0 TCP *:ssh (LISTEN)
sshd 960 root 4u IPv6 566 0t0 TCP *:ssh (LISTEN)
exim4 2001 Debian-exim 5u IPv4 11968 0t0 TCP mysite.com:smtp (LISTEN)
searchd 2025 root 7u IPv4 14510 0t0 TCP *:9312 (LISTEN)
proftpd 2041 proftpd 2u IPv6 11974 0t0 TCP *:ftp (LISTEN)
apache2 2103 root 4u IPv6 11992 0t0 TCP *:http (LISTEN)
apache2 ???? www-data 4u IPv6 11992 0t0 TCP *:http (LISTEN)
Run Code Online (Sandbox Code Playgroud)
好吧,已经建立了(即它们是开放的,但没有人在监听)。我们应该研究您如何尝试确定端口是否打开。正常的方法是逃离nmap
外界。Nmap 还能够根据具体情况区分开放、过滤和关闭。
我想到的一件事是,如果你使用tcpwrappers,/etc/hosts.deny
也会/etc/hosts.allow
发挥作用而不会受到iptables
干扰。
此外,您的规则可以简化。
代替:
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
经过:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
除非您打算在以后使用连接跟踪。
所有OUTPUT
( filter
) 规则都可以删除,因为只要该链的策略设置为 ,它们就不会执行任何操作ACCEPT
。
您可能想要在 UDP 上添加DNS 规则,因为 UDP 是默认设置。它看起来像这样:
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
现在,通过使用来自 的名称,可以将所有端口名称放入更易读的形式,/etc/services
因此
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9312 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT # <-- added this one
-A INPUT -p udp -m udp --dport 5900 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
可以压缩为更具可读性的两行代码:
-A INPUT -p tcp -m multiport --dports ftp-data,ftp,ssh,smtp,domain,www,imap2,https,imaps,mysql,4444,5900,9312
-A INPUT -p udp -m multiport --dports domain,5900
Run Code Online (Sandbox Code Playgroud)
multiport
在模块的帮助下
适合格式的所有规则iptables-restore
则变为:
*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A INPUT -m recent --update --seconds 90 --hitcount 4 --rttl --name SSH -j DROP
-A INPUT -p tcp -m multiport --dports ftp-data,ftp,ssh,smtp,domain,www,imap2,https,imaps,mysql,4444,5900,9312
-A INPUT -p udp -m multiport --dports domain,5900
-A INPUT -p icmp -m limit --limit 10/sec -j ACCEPT
-A INPUT -j DROP
-A FORWARD -p icmp -m limit --limit 10/sec -j ACCEPT
COMMIT
Run Code Online (Sandbox Code Playgroud)
iptables-restore --test
顺便说一句,将这些规则通过管道传递到 的调用中将会显示任何语法错误。这通常对于您将规则输入适合iptables-restore
或 的格式的所有情况都非常有用iptables-apply
。
您也可以使用ipset(8)
( ) 来维护端口列表。apt-get install ipset
这也可以用于其他事情,例如锁定整个地理区域,如果您有一组针对这些区域的 (CIDR) 网络规范。看到这个。
当然,您还可以将 IP 集作为源或目标地址以及地址/端口组合进行匹配。有关更多信息,请参阅手册 ( man ipset
) 并查看中set
的模块和SET
目标(比之前的低很多)描述man iptables-extensions
。
最后但并非最不重要的一点是:如果您有 IPv6 连接,您可能需要在给出协议特定规则的行之前分别添加前缀-6
和。-4
这样您就可以使用单个文件来存储ip6tables-restore
和的规则iptables-restore
。两者之间共享的规则不应带有前缀。
例如,撰写本文时的精简规则可用于 IPv4 和 IPv6。通常只有地址、网络掩码等内容需要您在 IPv4 和 IPv6 之间拆分规则。另外:IP 集只能是 IPv4(默认)或 IPv6 ( ipset create foo family inet6
),这意味着此类集由于名称不同,也需要拆分规则。
你还含蓄地问:
:OUTPUT ACCEPT [19969:30829963]# <--- not sure where this came from?
Run Code Online (Sandbox Code Playgroud)
括号之间的数字是链的计数器。使用iptables-restore
(或其 IPv6 对应项)时,这些是可选的。冒号之前是数据包数,冒号之后是字节数。如果您iptables-save
使用-c
开关运行,您将获得每个规则相应的计数器。
归档时间: |
|
查看次数: |
4430 次 |
最近记录: |