iptables 包过虚例子

来源:互联网 发布:笔记本的mac地址在哪里 编辑:程序博客网 时间:2024/04/29 04:26

刚从网上看到一段规则,

 

并根据己的理解将其进行了一些改进,

 

主要适用与一般的WEB服务器,只开通了SSH/WEB未开通FTP等其它服务,

 

如需开放其它服务再加上相应的端口即可

 

另外没有对来源地址进行限制,主要是现在一般连服务器都是动态地址,要限制只有限制IP地址段了。不太好。

 


还有很多不明白的方,记下以后慢慢了解吧。

 

#!/bin/bash

## 设置是否响应icmp
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


echo 0 >/proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 >/proc/sys/net/ipv4/conf/all/accept_redirects

## 监控icmp包
echo 1 >/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#开启syn泛洪攻击保护(syn cook flood)
#syn攻击利用tcp协议缺陷,发送大量伪造的tcp连接请求,使被攻击方资源耗尽,导致拒绝服务
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians

## 初始化及记数清0
## F:说明 删除所有规则链中的所有规则。
## X:说明 删除所有规则链
## Z:说明 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
iptables -F
iptables -X
iptables -Z


#iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
#iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

## RELATED:该包是属于某个已经建立的连接所建立的新连接 ESTABLISHED:该包属于某个已经建立的连接  --如查没有装FTP服务,是不是这句可以DROP掉?
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## INVALID:该包不匹配于任何连接,通常这些包被DROP。
iptables -A INPUT -m state --state INVALID -j DROP

## Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

## SYN-Flooding
iptables -N syn-flood
iptables -A INPUT -i eth0 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 30/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP

## Make sure that new TCP connections are SYN packets NEW: 该包想要开始一个新的连接(重新连接或连接重定向)
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP

## HTTP
iptables -A INPUT -i eth0 -p tcp -d 0/0 --dport 80 -j ACCEPT

## CVS
## iptables -A INPUT -i eth0 -p tcp -d 0/0 --dport 2401 -j ACCEPT

## IP packets limit  防IP包攻击-这个很重要,作限制
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 5 -j ACCEPT

## LOG --log-level INFO --log-prefix "IPT INPUT packet died: " 防ICMP包,同样做限制、
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT

## FTP service 仅对开启FTP 服务的机器
##iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
##iptables -A INPUT -i eth0 -p tcp --dport 20 -j ACCEPT
##iptables -A INPUT -p tcp --dport 30001:50000 -j ACCEPT
 
## SSH login  -下面这两句不是很明白,为什么少一个-m tcp就拒绝?
## 如果有固定地址进行SSH登录的话,可以配合源地址的方式来让只有指定的IP才能进行SSH登录!
iptables -A INPUT -i eth0 -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP


## Anything else not allowed
iptables -A INPUT -i eth0 -j DROP