我想阻止我的两个 DNS 服务器上的所有传入请求,除了某些 IP 地址,例如 1.2.3.4 的 IP 将被允许发出请求,但其他人不会。
你如何用 iptables 做到这一点?
非常感谢。
我rc.local在我的新 Ubuntu 服务器上有这个:
iptables -F
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED …Run Code Online (Sandbox Code Playgroud) 这是我的场景。我有三个主机。
1) GATEWAY 运行 OpenVPN 服务器。它有 1 个 LAN IP (192.168.1.10) 和 1 个 OpenVPN IP (10.8.0.1)。
2)LOCAL-CLIENT,与GATEWAY在同一个局域网内的机器,有1个局域网IP(192.168.1.12)
3) REMOTE-SERVER,一个 MySQL 服务器,它是 OpenVPN 服务器的客户端。它有 1 个公共 IP 和 1 个 OpenVPN IP (10.8.0.51)。
我希望能够通过 VPN 从本地客户端连接到远程服务器上的 MySQL。
到目前为止,我已经启用了 IP 转发并添加了一个端口转发,如下所示:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A OUTPUT -p tcp --dport 3306 -j DNAT --to 10.8.0.51
Run Code Online (Sandbox Code Playgroud)
这适用于 GATEWAY,我可以使用 192.168.1.10 作为主机连接到 MySQL。但是当我从 LOCAL-CLIENT 尝试时,我收到“连接被拒绝”错误(使用 MySQL 客户端或 telnet 到端口 3306)。
我在这里缺少什么?
顺便说一句,我还尝试转发 HTTP 端口以针对也在远程服务器上运行的 Apache 进行测试,我得到了相同的结果,所以这不是 MySQL 问题。
更多信息:
Kernel IP …Run Code Online (Sandbox Code Playgroud) 我在网络世界中相对新手,虽然我做了编码并且知道一些系统管理员背景很长一段时间。在这里,我离目的地只有一步之遥。
整体情况是:在家里我使用一台LinkSys E3000作为网关(不知道这是不是它的名字),无线AP,没有其他路由/交换设备。它为 1 台 PC 和 1 台带 LAN 的 Mac、1 台 Mac Mini + 1 台 iPad + 2 台带 WIFI 的智能手机提供服务。
我的目标是在 E3000 上使用 openvpn 客户端(带有番茄固件)并使我的 iPad 和智能手机的所有 WiFi 流量都通过它,而其他设备的路由保持相同的非 openvpn 路由。
到目前为止,我能够将 E3000 上的 openvpn 客户端连接到 openvpn 服务器,通过该 openvpn 连接隧道传输我所有设备的所有流量。剩下的是如何通过源 IP(至少在我的猜测中)有选择地路由到隧道,同时不打扰其他人。
在过去的几天里,我学习了一些“iptables”和“route”,但运气不佳,所以我的问题来了。这里有一些信息可以帮助您获得结构。
ifconfig -a 输出,把一些无用的线划掉,在web界面中C0:C1:C0:1A:E0:28是WAN,C0:C1:C0:1A:E0:27是LAN,C0:C1:C0:1A :E0:29 是 2.4G wifi AP,C0:C1:C0:1A:E0:2A 是 5G wifi AP。
root@router:/tmp/home/root# ifconfig -a
br0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST0 Metric:15eth0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27 …
我想降低在 linux 系统上成功进行 ssh 攻击的可能性。唯一打开的端口是 22(我对其他所有端口都使用端口转发),当然我确保 ssh 只接受基于密钥对的登录(无密码)。
失败的 ssh 登录尝试(输出last -f /var/log/btmp)的数量相当大(正如任何打开端口 22 的人所期望的那样),因此在过去 2 年多的时间里,我一直依赖基于 iptables 的解决方案的变体,这些解决方案经常被提到阻止ssh 攻击,例如数百次失败的 ssh 登录。
这种方案的一个令人讨厌的缺点是它限制了每段时间内来自一个 ip 地址的新连接数,无论来自该 ip 的先前连接是否成功,无论它们是否尝试以同一用户身份登录或不是。想象一个脚本,它包含六个rsync来自国外的命令,用于更新该服务器上的各个区域:它通常会达到“新连接限制”并在中间某处失败。如果路由器后面的多个用户(显示为相同的 IP 地址)或多或少同时连接到我的服务器上,情况也是如此。
所以,我想知道,如果不诉诸解析/var/log文件,是否可以使用以下策略来实现iptables:
奖励积分:
user@ip而不是每个人@ip。并试图遏制僵尸网络攻击:
直到今天,我使用了一个便宜的路由器,这样我就可以在使用 NAT 的同时共享我的互联网连接并保持网络服务器在线。用户 IP ($_SERVER['REMOTE_ADDR']) 很好,我看到的是用户的 A 类 IP。
但是随着流量每天都在增长,我不得不安装一个 Linux 服务器 (Debian) 来共享我的 Internet 连接,因为我的旧路由器无法再保持流量了。我使用 NAT 通过 IPTABLES 共享互联网,但是现在,在将端口 80 转发到我的网络服务器后,现在我看到的不是真正的用户 IP,而是将我的网关 IP(Linux 内部 IP)视为任何用户 IP 地址。
如何解决这个问题?
我编辑了我的帖子,所以我可以粘贴我当前使用的规则。
#!/bin/sh
#I made a script to set the rules
#I flush everything here.
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -F
iptables -X
# I drop everything as a general rule, but this is disabled under testing
# iptables -P INPUT DROP
# iptables …Run Code Online (Sandbox Code Playgroud) 类似这样的Bugzilla的旧请求的Fedora 8,我希望事情已经从那以后改变或有人知道的另一种方式。
我想手动管理 iptables 规则——一刀切的自动规则根本不适合我。这些规则似乎是在网络启动和销毁时添加和删除的。有没有办法完全阻止添加这些规则,或者将脚本挂接到网络启动中,然后恢复默认规则。
现在,我正在使用一种非常粗糙的方法cron,但我希望有更好的方法:
* * * * * root iptables-restore < /etc/sysconfig/iptables
Run Code Online (Sandbox Code Playgroud) 我一直致力于构建规则集来检测和阻止 DNS 放大攻击。
我被卡住了,希望能在这里找到帮助。
我将在这里发布我所拥有的(bash 脚本,与 DNS 相关的部分):
IPTABLES='/sbin/iptables -v'
SERVERIP=a.b.c.d
echo '################ Previously initiated and accepted exchanges bypass rule checking #'
$IPTABLES --append INPUT -m state --state ESTABLISHED,RELATED --jump ACCEPT
echo '################################################ Allow unlimited outbound traffic #'
$IPTABLES --append OUTPUT -m state --state NEW,ESTABLISHED,RELATED --jump ACCEPT
echo '################################################################## Rules for DNS #'
# DIG ANY ISC.ORG attack preventer.
# QUESTION1: this one does not work, why!?!?
$IPTABLES --append INPUT --proto udp --dport 53 -m string --string "isc.org" --algo bm …Run Code Online (Sandbox Code Playgroud) 这里的软件开发人员,试图通过在 amazon EC2 上设置 OpenVPN 服务器来访问那里的所有内部资源来启动并运行他的 sysadmin-foo。以下是我在全新 Ubuntu 12.04 Canonical AMI 上的设想:
Local network / EC2 Cloud, 10.*.*.*/255.0.0.0
172.16.20.*/ ,'
255.255.255.0 ,' +-----------------+
.' |Amazon DNS server|
| ,'| 172.16.0.23 |
+---------------+ | ,' +-----------------+
| Workstation | | ,'
| XXX | +-------,'------+
| 172.16.20.1 | XXXX | OpenVPN server|
+------`.-------+ \ XX 10.23.45.67 `-. +-------------+
\ '. +---------------+ `-. Second server
+--------`.---+ | | 10.23.45.68 |
|Local server | \ +-------------+
| 172.16.20.2 | \
+-------------+ \
Run Code Online (Sandbox Code Playgroud)
客户端可以连接到 …
亲爱的 Serverfault 社区,
我有以下问题:如果在数据包数据中遇到某个字符串,我需要立即重置(断开)网络两侧的 tcp 连接。我无法控制双方的应用程序,只能使用 linux iptables(或类似工具)来执行连接中止。
我的第一个想法是使用以下 iptables 规则来实现我想要的:
/usr/sbin/iptables -A INPUT -p tcp --dport 1234 -m string --algo bm --string 'BAD STRING' -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
通过向客户端发送 TCP RST 数据包,这将在远程端完美地工作,因此客户端将立即断开连接。不幸的是,在强制断开连接时不会通知本地端,并且服务器进程(连接)永远挂起。
我认为在特定条件下(在这种情况下 IP 数据包中的字符串匹配)立即断开双方已经建立的连接的要求并不少见。所以我进行了谷歌搜索,但令我惊讶的是在合理的时间内找不到任何可用的东西。
有没有办法使用iptables在网络两侧实现tcp断开连接?如果没有,我可以使用哪些其他工具(请记住,我无法控制客户端/服务器应用程序)?
非常感谢您的宝贵回答!
此致,
延斯