Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构 微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

18.3. 防火墙

开启防火墙

		
lokkit --enabled
		
		

18.3.1. 策略

默认INPUT,FORWARD,OUTPUT 三个都是ACCEPT

			
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
			
			

从安全的角度出发,INPUT,FORWARD,OUTPUT 三个都是DROP最安全,但配置的时候会给你带来非常多的不可预料的麻烦。

			
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
			
			

折中的方案,也是打多少硬件防火墙厂商所采用的方案,他们都是采用INPUT默认禁用所有,OUTPUT默认允许所有,你只要关注INPUT规则即可。

			
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
			
			

18.3.2. 防止成为跳板机

跳板机就是用户首先登陆任意一台服务器后,由该服务器在登陆另外一台服务器。

封锁22等端口,避免相互跳转

			
iptables -A OUTPUT -p tcp -m multiport --dports 22,21,873 -j REJECT
/etc/init.d/iptables save
iptables -L -n
			
			

web 服务器禁止使用ssh,作为跳板机

用户将不能使用ssh命令登陆到其他电脑

18.3.3. 端口安全

有一种情况,例如你的服务器被植入了木马,木马将开启一个Socket端口给远程骇客接入进来,通常会启动一个类似telnet服务器,怎样防止未经允许的程序监听一个端口呢?

			
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m state --state INVALID,NEW -j DROP
			
			

用法

  1. systemctl stop iptables

  2. 启动 httpd / nginx

  3. systemctl start iptables

注意必须按照上面的步骤,如果你试图如下尝试将失败

  1. systemctl start iptables

  2. 启动 httpd / nginx

80端口将无法对外提供服务,因为当 -A INPUT -m state --state INVALID,NEW -j DROP 运行以后,任何试图监听端口的程序将被拒绝。

18.3.4. 封锁特定字符串

下面的例子是拒绝爬虫

			
# iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "Spider" -j DROP
# iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "Baidu" -j DROP
# iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "Robat" -j DROP