一.什么是防火墙?
防火墙是不同网络之间信息的唯一出入口,能根据我们制定的策略来控制(允许、拒绝)进出的数量流,并且本身具有抗攻击能力,能有效保证我们内部 网络的安全。
二.防火墙 的作用?
防火墙 的作用是防止不希望 的,未经授权 的信息进出被保护的网络,迫使一个组织强化 自己的网络安全策略,被认为是一个可信的内部网络和不那么安全可信的外部网络之间提供的一个封锁工具。
三.默认的四张表
1、filter:用于防火墙,默认有INPUT/OUTPUT/FORWARD三条链
2、nat:网络地址转换,PREROUTING/POSTROUTING/OUTPUT三条链
3、mangle:流量整形,五条链
4、raw:用于状态跟踪
四.默认的五条规则链
1、INPUT: 如果一个数据包的目的地址是LINUX本身,则进入INPUT链
2、OUTPUT: 源地址是LINUX本身
3、FORWARD: 数据包从一块网卡接收,从另一块网卡发出,经过LINUX的包,进入这条链
4、PREROUTING: 路由前
5、POSTROUTING: 路由后
五.编写规则
添加规则 -A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入一条规则
查看规则 -L 列出所有的规则条目
-n 以数字形式显示地址、端口等信息
--line-numbers 查看规则时,显示规则的序号
删除规则 -D 删除链内指定 序号(或内容)的一条规则
-F 清空所有的规则
默认规则 -P 为指定的链设置默认规则
六.规则的基本匹配条件
通用匹配 协议匹配 -p 协议名
地址匹配 -s 源地址 -d 目的地址
接口匹配 -i 收数据的网卡 -o 发数据的网卡
隐含匹配 ICMP类型匹配 --icmp-type ICMP类型
TCP标记匹配 --tcp-flags 检查哪些位 哪些位被设置
七.IPtables的应用,配置主机型防火墙
1.清空防火墙的规则
2.允许SSH
3.设置默认规则
4.设置允许http
5.拒绝 ping防火墙本身,客户端访问可以ping通
在服务器上设置策略,客户端ping服务器的包丢弃
在客户端进行测试,客户端没有任何信息
在服务器上设置策略,客户端ping服务器的包拒绝
在客户端进行测试,显示路由不可达
允许指定IP(192.168.1.40)地址的主机PING防火墙
在192.168.1.40上测试,是否可以ping通
在192.168.1.20上测试,是否可以ping通
6.查看防火墙规则,每个规则注明序号
7.删除防火墙的INPUT链中第二条规则查看防火墙规则,每个规则注明序号
8.允许特定IP地址访问LINUX的telnet服务
允许192.168.1.40访问Telnet服务
在192.168.1.40上测试查看是否允许Telnet
在192.168.1.20上测试查看是否允许Telnet
向INPUT链插入规则,作为第一条。从eth1网卡收到的、访问telnet服务的数据包,拒绝
在192.168.1.40上测试
八.配置网络型防火墙
实验环境:有三台主机
第一台主机: IP地址为:192.168.1.40 网关为:192.168.1.254 主机名为:fanxiaohui
第二台主机:IP地址为:192.168.1.254 IP地址为:1.1.1.254 主机名为:waiwang
第三台主机:IP地址 为:1.1.1.1 网关为:1.1.1.254 主机名为fanlj
在第二台主机上开启路由转发功能,使192.168.1.40可以ping通1.1.1.1
打开LINUX路由功能(转发功能)
IS: 中间系统,路由器。
ES: 终端系统,主机系统。
1、临时打开路由功能
[root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
2、永久打开转发功能
[root@localhost ~]# echo ‘echo 1 > /proc/sys/net/ipv4/ip_forward’ >> /etc/rc.local
或
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
3.在第二台服务器上关闭iptables后1.1.1.1可以Telnet到192.168.1.40
拒绝1.1.1.0/24网段访问192.168.1.0/24网段的telnet服务
在第二台服务器上配置iptables
[root@fanlj ~]# iptables -A FORWARD -s 1.1.1.0/24 -d 192.168.1.0/24 -p tcp --dport 23 -i eth0 -o eth1 -j REJECT
[root@fanlj ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 1.1.1.0/24 192.168.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
在1.1.1.1上测试是否可以Telnet 192.168.1.40上
怎么测试是防火墙策略起作用呢?
在第二台服务器上查看防火墙策略
[root@fanlj ~]# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 60 REJECT tcp -- eth1 eth0 192.168.1.0/24 1.1.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
4.从拒绝SSH协议通过防火墙
在192.168.1.40上ssh到1.1.1.1上
[root@fanxiaohui ~]# ssh 1.1.1.1
The authenticity of host '1.1.1.1 (1.1.1.1)' can't be established.
RSA key fingerprint is 77:0d:65:ee:8d:e6:98:0f:1e:32:3a:2a:a7:ea:43:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '1.1.1.1' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Sat Oct 24 22:30:28 2015
[root@waiwang ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:9D:CB:9C
inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0
在192.168.1.254上拒绝192.168.1.40ssh到1.1.1.1上
[root@fanlj ~]# iptables -I FORWARD -p tcp --dport 22 -j REJECT
[root@fanlj ~]# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:23 reject-with icmp-port-unreachable
1 60 REJECT tcp -- eth1 eth0 192.168.1.0/24 1.1.1.0/24 tcp dpt:23 reject-with icmp-port-unreachable
在192.168.1.40上测试
[root@fanxiaohui ~]# ssh 1.1.1.1
ssh: connect to host 1.1.1.1 port 22: Connection refused
在1.1.1.1上测试,查看是不能可以ssh192.168.1.40
不是192.168.1.0/24网段的主机可以访问SSH服务
[root@fanlj ~]# iptables -I FORWARD ! -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
在1.1.1.1上测试,查看是可以ssh192.168.1.40
5.在1.1.1.1上搭建ftp服务,并且input和output全部拒绝,允许远程主机可以访问1.1.1.1上的ftp服务。
在远程主机192.168.1.40上访问1.1.1.1上的ftp服务,可以访问。
[root@fanxiaohui ~]# ftp 1.1.1.1
Connected to 1.1.1.1 (1.1.1.1).
220 (vsFTPd 2.2.2)
Name (1.1.1.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
在1.1.1.1上自己访问ftp服务,远程主机可以访问1.1.1.1上ftp服务,但是自己不能访问自己的ftp服务,怎么设置可以自己访问自己的ftp服务。
自己发给自己的包目标端口也是自己,所有output链的dport也是20:21
6.防火墙拒绝icmp通过
[root@fanlj ~]# iptables -A FORWARD -p icmp -j REJECT
仅允许192.168.1.0/24能ping通1.1.1.0/24
[root@fanlj ~]# iptables -I FORWARD -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
[root@fanlj ~]# iptables -I FORWARD -d 192.168.1.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
九.扩展匹配
1、网络连接的五种状态
NEW,请求建立连接的包、完全陌生的包
ESTABLISHED,将要或已经建立连接的包
RELATED,与已知某个连接相关联的包
INVALID,无对应连接,以及连接无效的包
UNTRACKED,未跟踪状态的包
2、192.168.1.0/24作为内网,1.1.1.0/24作为外网。从内到外的访问不受限制,从外到内的主动连接全部拒绝。
[root@fanlj ~]# iptables -P FORWARD DROP
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -m state --state ESTABLISHED -j ACCEPT
3.允许ftp连接(主被动模式),192.168.1.0/24作为内网,1.1.1.0/24作为外网,从内到外可以主动连接,也可以被动连接,但是不允许外网主机连接内网。
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 20:21 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 20:21 -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -s 192.168.1.0/24 -m state --state NEW,ESTABLISH,RELATED -j ACCEPT
[root@fanlj ~]# iptables -A FORWARD -d 192.168.1.0/24 -m state --state ESTABLISH,RELATED -j ACCEPT