您的位置:首页 > 运维架构 > Linux

linux 防火墙

2015-07-28 18:04 681 查看
linux 防火墙:

netfilter: 框架
iptables: 数据报文过滤,NAT,mangle等规则生成的工具
规则包括匹配标准和处理方法
数据报文过滤:
hook function 钩子函数:
prerouting
input
forward
output
postrouting
规则链:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
filter(过滤表):
INPUT
FORWARD
OUTPUT
Nat(地址转换表):
PREROUTING
POSTROUTING

mangle(拆开,修改,封装 表): INPUT FORWARD OUTPUT raw(): POSTROUTING OUTPUT

iptables由4个表5个链组成能否使用自定义链:
可以使用自定义链,但只在被调用时才能发挥作用,而且如果没有匹配自定义链中的任何规则还应该有返回的机制
可以删除自定义的空链
默认链无法删除
每条规则都有两个内置的计数器:
被匹配的报文个数
被匹配的报文大小之和
规则的匹配标准:
通用匹配
-s, --src:指定源地址
-d, --dst:指定目标地址
-p: 指定协议
-i INTERFACE: 指定数据报文流入的接口
PREROUTING FORWARD INPUT
-o INTERFACE: 指定数据报文流出的接口
PREROUTING FORWARD OUTPUT链
扩展匹配
隐含扩展: 不用特别指明由那个模块进行的扩展,此时使用-p{tcp|udp|icmp}
-p tcp :
--sport port 源端口
--dport port 目标端口
--tcp-flags mask comp 只检查mask指定的标志位,是逗号分隔的标志位列表 comp:此列表中出现的标志位必须为1,comp没有出现而mask出现的标志位必须为0
--tcp-flages SYN,FIN,ACK,RST SYN,ACK tcp三次握手的第一次握手等于--syn
-p icmp :
--icmp-type
0: echo-reply
8: echo-request
-p udp :

--sport port 源端口
--dport port 目标端口 显示扩展: 必须指明由那个模块进行的扩展,使用-m选项完成此功能
使用额外的配置机制
-m extestion --spe-opt
state: 状态扩展
结合ip_conntrack追踪会话的状态
NEW: 新请求
INVALID: 非法请求
ESTABLISHED: 已建立的连接
RELATED: 相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT

multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports
--ports
-m multiport --destination-ports 21,22,80 -j ACCEPT
-m iprange: 指定ip地址的范围
--src-range
--dst-range
iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.7-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-m connlimit: 连接数限制
! --connlimit-above n
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m connlimt ! --connlimt-above 2 -j ACCEPT
-m limit:
--limit rate
--limit-burst 7
iptables -I INPUT -d 172.16.100.7 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT
-m string (要写在OUTPUT链上)
--algo {kmp|bm}

--string "string"
iptables [-t table ] COMMAND CHAIN [num] 匹配标准 -j 处理办法
-j :
TARGET
ACCEPT
DROP
REJECT
命令:
管理规则
-A: 附加一条规则,添加在链的尾部
-I CHAIN [num] : 插入一条规则,插入为对应CHAIN链上的Num条
-D CHAIN [num] : 删除指定CHAIN链中的第num条规则
-R CHAIN [num] : 替换指定CHAIN链中的第num条规则
管理链
-F CHAIN: Flush 清空指定的规则链,如果省略CHAIN,就会删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略
-N: 自定义一个新的空链
-X: 删除一个自定义的空链(必须为空的链)
-Z: 置零指定链中的所有规则的计数器
-E: 重命名自定义的链
查看类
-L: 显示指定表中的所有规则
-n: 以数字格式显示主机地址和端口号
-v: 显示链及规则的详细信息
-vv: 更加详细信息
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
动作(target)
accept: 允许通过
drop: 丢弃
reject: 拒绝
dnat: 目标地址转换
snat: 源地址转换
redirect: 端口重定向
masquerade: 地址伪装
log: 日志
mark: 打标记
iptables不是服务都有服务脚步,其作用为保存和管理规则
修改三条链为drop
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables规则保存在/etc/sysconfig/iptables 文件里
service iptables save 保存规则到指定文件里 /etc/sysconfig/iptables里
或使用iptables-save > /path 保存到任意文件
iptables-restore < /path 读取文件里规则到iptables里
iptables -F 清空规则

iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

sysctl -w net.ipv4.ip_conntrack_max=65536

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

新建自定义链
iptables -N 链名
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP

# iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
# iptables -A clean_in -d 172.16.100.7 -j RETURN

利用iptables的recent模块来抵御DOS攻击
ssh: 远程连接
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。

下面对最后两句做一个说明:
1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/ipt_recent/SSH
也可以使用下面的这句记录日志:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"

在linux系统主机上如果开启了ip_forward功能,那么这是服务器就相当于路由器具有地址转换功能
/proc/sys/net/ipv4/ip_forward=1
或修改/etc/sysctl.con 文件选项

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 123.2.3.2

端口映射
iptables -t nat -R PRERROUTING 1 -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22:8080

本文出自 “珞辰的博客” 博客,请务必保留此出处http://luochen2015.blog.51cto.com/9772274/1679326
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: