我注意到我的一个服务器被黑客入侵并感染了一个已知的中国僵尸网络。
这是一个原型/测试虚拟机,有自己的静态 IP(美国地址),所以没有造成任何伤害(我花了一段时间才弄明白)。
现在我想知道入侵使用的是什么IP/s,以了解攻击是否来自中国。
有没有办法在服务器上的 ssh 上查看接收连接的历史记录?
编辑:系统是 Linux Debian 7
查看/proc/$mypid/fd/,我看到这些文件
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]
Run Code Online (Sandbox Code Playgroud)
因为我可以访问代码,所以我知道这些套接字与 TCP 连接相关(一个是连接到某台机器上的端口 5672,另一个连接到其他机器上的端口 3306),但我想知道哪个套接字是绑定到哪个连接。我怎样才能做到这一点?
更一般地说,我如何向操作系统询问套接字的另一端是什么?
我已经对 Debian 或 Ubuntu 等 Linux 发行版有点熟悉(是的,非常相似),但我想尝试基于 Red Hat 的 CentOS 6.2。我已经将它安装在我的 Windows 7 主机上的 VirtualBox 并尝试使用它。
我遇到了一个小问题,即:默认eth0界面默认关闭。我使用带有 NAT 的选项(虚拟机在主机“后面”)。即使我用 调出界面ifconfig eth0 up,它也不能立即工作。启动界面后我得到了这个:
eth0 Link encap:Ethernet HWaddr 08:00:27:0F:00:8A
inet6 addr: fe80::a00:27ff:fe0f:8a/64 Scope:Link
UP BROADCAST RUNNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carriers:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
Interrupt:19 Base address:0xd020
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK …Run Code Online (Sandbox Code Playgroud) 如何使用 qemu 设置从主机到来宾的 ssh?我可以在没有任何特殊参数的情况下启动 VM 时使用端口重定向,如下所示:
/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下内容启动时:
/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp:7777::8001
Run Code Online (Sandbox Code Playgroud)
我收到以下错误并且 VM 无法启动:
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: invalid host
forwarding rule 'tcp:7777::8001'
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: Device 'user'
could not be initialized
Run Code Online (Sandbox Code Playgroud)
请注意,我可以在没有-net参数的情况下启动 VM,没有任何问题,但是,我想设置从主机到来宾的 ssh。从来宾到主机的 ssh 按预期工作正常。
我试过使用
-net user,hostfwd=tcp::7777-:8001
Run Code Online (Sandbox Code Playgroud)
也
-net user,hostfwd=tcp::7777:8001
Run Code Online (Sandbox Code Playgroud)
但错误仍然存在并且虚拟机无法启动。
我有一台 CentOS 5.7 服务器,它将每晚备份其文件。我担心当备份通过网络传输时,服务器托管的各个站点的访问者会遇到性能下降。
是否可以将进程的最大允许吞吐量限制为网络接口?我想将基于 SSH 的文件传输限制为我可用带宽的一半。这可能在服务器端或客户端;也就是说,我很乐意在发起连接的客户端或接收连接的服务器上执行此操作。
(不幸的是,我无法添加专门用于备份的接口。我可以增加可用吞吐量,但这仅意味着网络传输将完成得更快,但在执行此操作时仍能最大限度地提高连接的总容量。)
也许一些背景是有序的。退一步说,我遇到了没有足够的本地空间来创建备份本身的问题。进入SSHFS!备份被保存到表面上是本地驱动器的地方,这样网络服务器本身就没有备份位。
为什么这很重要?因为那似乎会使尊者的使用无效rsync --bwlimit。rsync实际上不是这样的转移,也可以,因为我甚至无法腾出空间来保存备份文件。
我可以听到你问:“等等,为什么你甚至需要制作备份文件?为什么不只是rsync源文件和文件夹?” 因为一个叫“Plesk”的烦人的东西混在了一起!这是我的面向客户端的 Web 主机,为了方便使用 Plesk。因此,我使用 Plesk 来启动备份,因为 Plesk 为备份添加了各种额外的魔法,这使得在恢复过程中使用它非常安全。
悲伤的脸
有没有一种简单的方法来以编程方式提取 IP 地址,而无需繁琐的解析ifconfig?我不介意使用简单的命令输出处理sed来执行它,但不介意从/etc某个地方处理多行文件。我想要做的是修改 my.bashrc以在问候消息中显示主机的 IP 地址。我正在使用Ubuntu 12.04但决定在这里而不是 Ubuntu 论坛发帖,因为我认为这不是特定于发行版的。
我们正在本地主机上提供一个端口,如果该端口可用,我们希望检查另一个进程。由于我们代码中的一个错误,它实际上是在尝试连接到 IP 0.0.0.0:<port>,并且由于某种原因它成功了——正如 strace 所证明的那样:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Run Code Online (Sandbox Code Playgroud)
这是什么意思?为什么有效?
在故障排除和调整过程中,我经常发现自己在考虑以下 Linux 内核设置:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Run Code Online (Sandbox Code Playgroud)
除了fs.file-max, net.ipv4.ip_local_port_range, net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, 和 之外net.ipv4.tcp_wmem,当您为高并发性调整一个盒子时,它们似乎是要弄乱的重要旋钮。
我的问题:如何检查每个队列中有多少项目?通常人们只是将它们设置得非常高,但我想记录这些队列大小以帮助预测未来的故障并在问题以用户明显的方式表现出来之前捕获它们。
例如,我们希望看到:
PROCESS IF TX RX FILE(regular) R/W
prog1 eth0 200kB/s 12kB/s -- --
wlan0 12kB/s 100kB/s -- --
-- -- -- file1 R
-- -- -- file2 R
-- -- -- file3 W
prog2 eth0 0kB/s 200kB/s -- --
-- -- -- file4 W
-- -- -- file5 W
Run Code Online (Sandbox Code Playgroud)
这可能吗?nethogs 只显示 TX/RX,而 lsof 只显示文件访问。
我目前正在做一个像这样的两步过程:
sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
Linux 接口名称是什么意思?
我目前的假设是,当我们通过 LAN 电缆连接到 Internet 时,它是 eth0 或 eth1,而当我们通过 WiFi 连接到 Internet 时,它是 wlan0。