iptables防火墙
1.实现防火墙功能需要软件来调用内核中的netfilter模块
2.linux.2.6的内核中使用的软件是iptables
iptables实现的功能有过滤,地址转换.
1.iptables中对于同一服务的不同规则的匹配顺序是至上往下,一旦匹配到规则则不再往下匹配,若都没有匹配上,则匹配默认规则.
2.iptables中有3张表和5条链路。其中filter用于过滤,其链有INPUT,OUTPUT,FORWARD.其中nat表用于地址转换,对应的链路是
POSTROUTING PREPOSTROUTING.
为了说明表和链路的作用,用网络拓扑图讲解。
10.0.0.1
|
主机A
10.0.0.1<-| fw |->192.168.1.1 192.168.1.2<-|主机C
主机B | |
| eth0 eth1
10.0.0.3
注*
1.主机A和B模拟的是内网,fw为防火墙,存在俩张网卡,其中eth0与内网相连,eth1是公网地址,主机C模拟外网。
iptables实现的功能
1.主机C向fw发送数据包,判断其是否能够进入,运用的是filter表中的INPUT链
2.fw向外网的主机C发送数据包,判断是否能够出去,运用的是filter表中的OUTPUT链路.
3.内网中的主机A想访问外网,(fw开启路由转发)发送的数据包由FORWARD链过滤.
4.内网中的主机B想ping通外外网中的主机C,需要运用nat表中的POSTROUTING链通过SNAT动作将私有地址转换为公网地址.
10.0.0.3->|nat-postrouting-snat|->192.168.1.1
5.外网中的主机C想访问内网中的主机B私有地址,需要运用nat表中的PREPOSTROUTING链通过DNAT动作将公网地址转换为私有地址.
10.0.0.3<-|nat-preposrouting-dnat|<-192.168.1.2
6.防火墙不能给自己做DNAT,此时需要nat表中的OUTPUT链,这条链为防火墙自身做DNAT.
iptables语法及常用的命令
filter表
iptabls -t filter -[A|D|I] [INPUT|OUTPUT|FORWARD] {n} -P [udp|tcp|icmp] {!} -s 192.168.30.0/24 --sport m:n --dport x:y -j \
[ACCEPT|REJECT|DROP|LOG]
注*
1.A->追加 I->插入 D->删除
2.n为条目数且仅选项为I时可用,!为取反,动作为LOG时意为将匹配到的项记录到日志中.
iptables -L -n --line-numbers 不做反解的按序号显示默认的filter表规则
demo:为sshd服务配置iptables策略
iptables -t filter -I INPUT 1 -p tcp -s 192.168.30.1 --dport 22 -j REJECT
此时ip为192.168.30.1的主机将不能远程此主机.
通过MAC地址设置iptables策略
iptables -I INPUT 1 -p tcp -m mac --mac=00:0C:29:03:0C:10 --dport 22 -j REJECT
此时mac地址为00:0C:29:03:0C:10将不能远程该主机
更改默认规则
iptables -t filter -P [ACCEPT|REJECT|DROP]
为保证安全我们需要确保俩条
1.服务端不能主动向客户端发送请求.
2.当客户端向服务端建立连接时,服务器可以向客户端发送数据.
iptables -t filter -I OUTPUT 1 -p tcp -m state --state=RELATED,ESTABLISHED --sport 22 -j ACCEPT
此时服务端不能远程客户端,而客户端可以远程服务端
iptables策略备份与恢复
iptables-save >xx
iptables-restore <xx
为了说明nat表中的各种策略,借用上面的网络拓扑图.
10.0.0.1
|
主机A
10.0.0.1<-| fw |->192.168.1.1 192.168.1.2<-|主机C
主机B | |
| eth0 eth1
10.0.0.3
注*
防火墙fw需要开启路由转发功能.
echo 1 >/proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
利用nat表及其链路实现以下功能
1.内网中的主机A ping通 外网中的主机C
iptables -t nat -I POSTROUTING 1 -s 10.0.0.3/24 -j SNAT --to-source 192.168.1.1
此时fw为主机A转换地址,但是主机A向fw发送数据包时,fw中的filter表中的INPUT链可能阻止.
a.我们可清空策略
b.设置可以通过.
注*
此时内网中的主机访问外网中的主机,我们都是讲内网主机地址转换为fw上固定的公网地址,当此公网地址为动态获取时,为了
SNAT功能实现我们可以利用MASQUERADE.
iptables -t nat -I POSTROUTING 1 -s 10.0.0.0/24 -j MASQUERADE
当我们改变fw的公网地址,此时用tcpdump -i eth0 在主机C上抓的包访问地址会发生改变.
2.外网中的主机C访问内网中主机A的web服务.
为主机A配置web服务.
#yum -y install http\*
...
iptables -t nat -I PREPOSTROUTING -p tcp --dport 80 -j DNAT --to dest 10.0.0.2
此时fw为主机C做了DNAT,使其可以访问内网中的主机A的web服务,但是它自己却不能访问。
为了让其也能访问web服务
iptables -t nat -I OUTPUT -p tcp --dport 80 -j DNAT --to dest 10.0.0.2