是否可以在 linux 机器上设置系统邮件以通过不同的 smtp 服务器发送 - 甚至可以进行身份验证?如果是这样,我该怎么做?
如果这还不清楚,让我们举个例子。如果我在命令行并输入:
cat body.txt | mail -s "just a test" myfriend@hisdomain.com
Run Code Online (Sandbox Code Playgroud)
是否可以通过外部 SMTP 服务器(例如 G-mail)发送?
我不是在寻找“一种从命令行从 gmail 发送邮件的方法”,而是一种将整个系统配置为使用特定 SMTP 服务器的选项,或者可能是 SMTP 服务器上的一个帐户(可能会覆盖发件人地址) .
您使用什么作为仅用于外发电子邮件的轻量级 SMTP?
我正在运行一个应用程序,它会在事件偶尔发生时通过 SMTP 发送电子邮件,而且我不需要功能齐全的电子邮件服务器。
编辑:如果这是最好的选择,我很乐意使用 postfix 之类的东西(并且这样做)。我在想可能有更简单的东西,用完盒子。
几天前,我开始非常关心我的数据安全,结果我nmap
自己:nmap 127.0.0.1
惊喜,惊喜,我有很多活跃的服务监听本地主机:
$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
Run Code Online (Sandbox Code Playgroud)
我可能会使用的唯一一个是ssh
(虽然它可能没有很好地配置,但我会将这个问题留到另一个问题中去)。
据我所知ipp
,CUPS 使用协议来共享我的打印机,我不需要共享它们,只需从服务器访问打印机。 …
当我尝试发送邮件时,出现以下错误:
gnutls_handshake:收到了意外的 TLS 数据包。
这是我的 .muttrc(myname、myaddress 和 mymail 是占位符):
# Automatically log in to this mailbox at startup
set imap_user="myname"
set imap_pass=""
set spoolfile="imaps://imap.myaddress/Inbox"
set folder="imaps://imap.myaddress/Inbox"
set record="=Sent"
set postponed="=Drafts"
# define how to send mails
set smtp_url="smtps://$imap_user:$imap_pass@smtp.myaddress:587"
# activate TLS if available on the server
set ssl_starttls=yes
# always use SSL when connecting to a server
set ssl_force_tls=yes
# wait to enter mailbox manually
set imap_passive
# Automatically poll subscribed mailboxes for new mail (new in 1.5.11)
set imap_check_subscribed …
Run Code Online (Sandbox Code Playgroud) 如果我选择允许 OUTPUT 链上的所有流量 ( iptables -P OUTPUT ACCEPT
) 邮件发送正常。一旦我用这些规则锁定我的服务器,外发邮件就会停止工作。不过,其他一切都有效,这很奇怪。
有没有人看到这里有任何东西可以阻止我的外发邮件发送?我很难过,一遍又一遍地查看这些规则并尝试了很多不同的版本。
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT …
Run Code Online (Sandbox Code Playgroud) 在邮件服务器上使用Postfix
和IMAP
时,通常至少打开 3 个端口
25 smtp : incoming emails from anybody (whole internet)
465 smtps : outgoing emails from authorized users (to the whole intenet)
993 imap : imap for authorized users
Run Code Online (Sandbox Code Playgroud)
我想配置postfix,让授权用户只能通过465发送邮件。默认情况下不是这样。用户还可以通过端口 25 使用 STARTTLS。我想禁用它。
我的计划是使用端口 25 为公众发送电子邮件
为我的用户使用端口 465(我可以使用防火墙来允许特定的 IP 范围,或使用自定义端口)
这将防止端口 25 被暴力攻击利用,黑客试图猜测用户/密码。端口 25 根本不会接受用户/密码,即使它是有效的。由于 465 端口被防火墙限制,黑客也无法利用 465。
这在 Postfix 中可能吗?
我在 Debian Wheezy 上使用 Postfix 2.9.6-2
我正在尝试确定服务器上的端口 25 是否可用。我尝试使用nc
和telnet
进行连接,但每个都无法连接。
我还能做其他测试来确定该端口上是否有任何东西在监听吗?
我的邮件服务器在垃圾邮件的黑名单中。我重新配置了 postfix。之后我的客户收到此错误,他们无法发送电子邮件。
404 4.5.2 <PLLAMNAZIFE>: Helo command rejected: need fully-qualified hostname
Run Code Online (Sandbox Code Playgroud)
在 Mail.log 中:
postfix/smtpd[9853]: NOQUEUE: reject: RCPT from unknown[xx.xx.xx.xx]:
404 4.5.2 <PLLAMNAZIFE>: Helo command rejected: need fully-qualified hostname;
from=<info@domain.com> to=<mail@mail.com> proto=ESMTP helo=<PLLAMNAZIFE>
Run Code Online (Sandbox Code Playgroud)
在我的 main.cf 中:
# rules restrictions
smtpd_client_restrictions =
permit_sasl_authenticated
smtpd_helo_restrictions =
permit_mynetworks,
reject_non_fqdn_helo_hostname,
reject_invalid_helo_hostname,
permit
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_rhsbl_client blackhole.securitysage.com,
reject_rhsbl_sender blackhole.securitysage.com,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client blackholes.easynet.nl,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client dnsbl.njabl.org
smtpd_helo_required = yes …
Run Code Online (Sandbox Code Playgroud) 我使用mutt作为我的电子邮件阅读器,使用nbSMTP作为我的 SMTP 客户端。我检查来自六个帐户的电子邮件,并将它们分类到我的邮件目录中的各种文件夹中。有些文件夹是特定于帐户的,但有些文件夹在一个文件夹中包含来自多个帐户的电子邮件
许多帐户是通过Gmail 进行的,不幸的是,它具有防止用户从不属于他们的地址发送邮件的安全功能。因此,如果我告诉 nbSTMP 进行身份验证user1@gmail.com
并发送带有From: user2@gmail.com
标题的电子邮件,Gmail 会将标题重写为From: user1@gmail.com
.
我通过为特定于帐户的文件夹添加文件夹挂钩来解决这个问题;当我切换到这些文件夹之一时,钩子会更改我的 sendmail 命令以向 nbSMTP 传递适当的命令行参数:
folder-hook =work 'set from="work@example.com"'
folder-hook =work 'set sendmail="/usr/bin/nbsmtp -f work@example.com -U work -P password"'
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于保存来自多个帐户的邮件的文件夹,并且如果我尝试work@example.com
从未切换到该work
文件夹时发送电子邮件(因为文件夹钩子没有跑)。有没有办法根据From
外发电子邮件中的标头控制 nbSMTP 如何进行身份验证?我不认为 nbSMTP 具有处理它本身的灵活性,所以我很确定它必须是某种mutt
配置,就像folder-hook
我目前使用的方法一样,但我还没有想出如何去做。如果有必要,我可以切换 SMTP 客户端,如果有另一个确实提供了必要的功能
lsof
是一个很棒的实用程序,现在才开始使用它。
lsof -i | grep smtp
=> 这给出了以下结果。
httpd.pl 212548 global 3u IPv4 893092369 0t0 TCP server07.host...blah...
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,httpd.pl
是 perl 脚本,它发送垃圾邮件。
我怎么知道命令的完整路径。即在上面的结果中,我想知道的完整路径httpd.pl
我尝试在主目录中搜索,该文件httpd.pl
不存在。而且,我尝试过lsof -p PID
,这也没有给出它的路径。
有什么办法,我可以得到那个文件的完整路径吗?
注意:这种问题在共享主机环境中很常见。因此,它对于共享主机或任何 Web 服务器管理员都非常有用。