iptables限制连接迸发连接数

由于遇到了迸发连接数太多导致服务器服务器出现问题的案例,这里记录一下使用iptables限制迸发连接数。
这里使用connlimit模块
–connlimit-above n 限制为多少个
–connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.也可以是24,16,8这样。
例如:
限制一个IP访问80,443端口最大连接数为16个连接

限制一个段访问80,443端口最大为16个连接

Ubuntu下安装使用Spamassassin对Postfix的邮件进行邮件过滤-spampd

系统我这里用的是Ubuntu 16.04 LTS
网上大部分使用spamassassin的说明都是通过调用spamc来完成邮件过滤的,但是如果邮件数量比较多调用spamc需要大量的fork,这个开销比较大,所以这里介绍另一种使用spampd的过滤方法。
如有疑问可参考wiki http://wiki.apache.org/spamassassin/IntegratePostfixViaSpampd
apt-get install spamassassin spamc
添加用户组
groupadd spamd
useradd -g spamd -s /bin/false -d /opt/spamassassin spamd
创建目录修改权限
mkdir /opt/spamassassin
chown spamd:spamd /opt/spamassassin

修改启动配置可以修改
/etc/default/spamassassin
创建SAHOME变量
SAHOME="/opt/spamassassin/"

修改启动选项,由于我需要处理的邮件数量较多,这里做了一定调整

OPTIONS="–create-prefs \
--min-children=4 --max-children=16 --min-spare=4 --timeout-child=30 \
-–username=spamd \
--helper-home-dir ${SAHOME}"

之后修改spamassassin配置
/etc/spamassassin/local.cf

修改完成后可以service spamassassin restart

安装spampd
apt-get install spampd
如果需要修改启动配置可以修改
/etc/default/spampd
这里默认配置没有什么要修改的所以跳过
如果修改完毕可以service spampd restart重启程序

安装postfix
apt-get install postfix
修改/etc/postfix/master.cf
如果需要高迸发数量注意修改maxproc值

修改完毕后看起来应该是这样

之后再修改
/etc/postfix/main.cf
添加
content_filter =scan:[127.0.0.1]:10025
限制邮件最大大小为20M
message_size_limit = 20971520
由于我这里需要进行邮件中继所以修改了
relayhost = [127.0.0.1]:1250
设置relay_domains
relay_domains = hash:/etc/postfix/relay_domains
创建relay_domains运行命令
touch /etc/postfix/relay_domains
echo “test.com OK” > /etc/postfix/relay_domains
postmap /etc/postfix/relay_domains
如果不需要邮件中继请不要修改
最后看起来效果是这样的

最后service postfix restart即可

Ubuntu下使iptables规则重启继续生效

重启后iptable规则丢失,解决方法很简单,安装iptables-persistent即可
apt-get install iptables-persistent
也可以手动管理iptables规则
保存规则
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4
Debian/Ubuntu: ip6tables-save > /etc/iptables/rules.v6
恢复规则
Debian/Ubuntu: iptables-restore < /etc/iptables/rules.v4

2016/10/15 xmlrpc.php引起的网站瘫痪

说来装上wordpress也有一段时间了,一直没遇到过什么问题,不过今天突然发现blog挂掉了,访问主页显示Error establishing a database connection
粗略一看我想可能是mysql出问题了,于是果断的
service mysql restart
恢复正常后过了很短的时间又出现了同样的情况,所以果断去/var/log/mysql下看了error.log
日记中是这样记录的
161015 18:34:42 InnoDB: Using Linux native AIO
161015 18:34:42 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
161015 18:34:42 InnoDB: Completed initialization of buffer pool
161015 18:34:42 InnoDB: Fatal error: cannot allocate memory for the buffer pool
161015 18:34:42 [ERROR] Plugin ‘InnoDB’ init function returned error.
161015 18:34:42 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
161015 18:34:42 [ERROR] Unknown/unsupported storage engine: InnoDB
161015 18:34:42 [ERROR] Aborting
很显然是内存不够用,导致mysql挂掉了。毕竟blog用的服务器只有512M内存,可加swap的方案我觉得不太好,所以选择修改mysql设置。
Google了一下,修改mysql的配置/etc/mysql/my.cnf,在[mysqld]下面加上一行
innodb_buffer_pool_size =32M
之后service mysql restart,网站恢复正常。
网站正常后通过top我看到apache的负载很高,觉得肯定有问题,就去看了Wordfence的日志
日志显示有来自俄罗斯一个IP的大量访问xmlrpc.php文件
ip是191.96.249.53和 191.96.249.54
想必就是因为大量的访问导致此问题出现。搜索了一下xmlrpc.php,发现这个文件对我用处不大,并且存在一定的安全问题,所以我直接做了以下措施。
1、iptables禁止ip段
iptables -I INPUT -s 191.96.249.0/24 -j DROP
这样一来就缓解了访问情况
2、.htaccess禁止使用xmlrpc.php
修改网站.htaccess加上下面的
# protect xmlrpc

Order Deny,Allow
Deny from all

至此,网站问题解决。记录下来仅供参考