SSH 访问白名单
http://www.zhixing123.cn/ubuntu/25502.html
这篇文章中讲了如何通过iptables进行ssh白名单的设定
FTP或者MySQL同理可得。
/var/log/nginx 查看nginx日志
/var/log/auth.log 查看系统日志
sshd会给每个连接fork一个进程,所以当被大量攻击的时候,ssh的进程会变得很多
为了对付这种攻击,网上查了有关于限制IP、用户连接数的,也有关于取消root账户密码登录,采用证书认证的,之前写过一篇文章免口令登录远程SSH服务就是使用证书登录的。但是我觉得最有效的方法就是在防火墙里设置IP白名单了。这样既避免了产生大量的流量,也不会产生sshd的连接进程。
添加两个信任的IP段,其他网段的数据包都DROP了,而不是REJECT(REJECT还要发送ICMP回应包给连接方)。
# iptables -A INPUT -p tcp --dport 22 -s 120.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 183.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
第一和第二行表示接收指定IP段的端口访问请求。
第三行表示drop其余ip段的访问。
尝试在另外一个机子连接这个ssh服务,数据包被成功DROP了。
iptables -L -n
==============以下ubuntu下默认缺少相应服务=====================
将iptables设置成系统服务,开机自启:
chkconfig --level 345 iptables on
对重新设置过的iptables规则使用命令:
service iptables save
保存,重启后才可重用。
iptables重启:
service iptables restart
iptables配置文件:
/etc/sysconfig/iptables
修改SSH的端口很大程度上能杜绝被黑客扫描,增加系统的安全系数,最近有客户修改完端口没有设置防火墙开启修改后的端口导致修改后链接不上VPS,下面教大家如何修改并在iptables里开启相应的端口:
1.修改SSH配置文件:
vi /etc/ssh/sshd_config
找到#Port 22一段,这里是标识默认使用22端口,修改为如下:
Port 22
Port 1234
保存退出
重启SSH
/etc/init.d/sshd restart
这样SSH端口将同时工作与22和1234上
2.修改iptables配置文件:vi /etc/sysconfig/iptables添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT
重启iptalbes服务:
service iptables restart (ubuntu在这里提示没有iptables服务)
然后使用SSH工具测试你所设置的端口是否能正常使用
如果能正常使用返回到第一步,删除原来的22端口,以及修改防火墙配置文件
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上的状况。
当然,你也可以直接关闭防火墙(不推荐):
重启后生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
service iptables save
之后你所有加的规则就会保存在/etc/sysconfig/iptables里面了;
如果不执行该命令,那么规则只保存在内存内,重新启动服务或者机器就会没有了;
==============以上ubuntu下默认缺少相应服务====================
/*****************这个ubuntu可以!********************/
将这些规则都配置成开机启动。
首先将配置好的规则保存:
sudo iptables-save > /etc/iptables-rules
然后编辑/etc/network/interface文件,在文件的末端插入:
pre-up iptables-restore < /etc/iptables-rules
这样重启以后就可以自动加载了。
如果iptables经常变化,可以在interface中再次添加以下:
post-down iptables-save > /etc/iptables-rules
这样,每次重启或down up网络interface时,都会先保存规则,重启后再恢复规则。
当然,如果突然掉电,那是保存不了上次的规则的。
===============================================
iptables -L INPUT --line-numbers 列出INPUT 链所有的规则
删除规则的方法:
语法是: iptables -D chain rulenum [options]
其中: chain 是链的意思,就是INPUT FORWARD 之类的
rulenum 是规则的编号。从1 开始。可以使用 --line-numbers 列出规则的编号
所以,例如上面要删除一个INPUT链的规则的话可以这样:iptables -D INPUT 3
意思是删除第3条规则。
还有第二种方法。第二种办法是 -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables -A.... 语句定义了一个规则,则删除此规则时就用 -D 来代替- A 其余的都不变即可。