一、防火墙分类
二、Linux防火墙(Iptables)
netfilter:又称“内核空间”
iptables:又称“用户空间”
1、Iptables默认的四张表
1)filter: 用于防火墙,默认有INPUT/OUTPUT/FORWARD三条链
2)nat: 网络地址转换,默认有PREROUTING/POSTROUTING/OUTPUT三条链
3)mangle: 流量整形,默认有五条链(对数据进行标记)
4)raw: 用于状态跟踪,默认有两条链
iptables -t nat -L //查看iptables里的nat表规则
iptables -t filter -L //查看iptables里的filter表规则
iptables -t mangle -L //查看iptables里的mangle表规则
iptables -t raw -L //查看iptables里的raw表规则
说明:-t 指定表
2、Iptabels默认的五条规则链
1)INPUT: 如果一个数据包的目的地址是LINUX本身,则进入INPUT链
2)OUTPUT: 源地址是LINUX本身
3)FORWARD: 数据包从一块网卡接收,从另一块网卡发出,经过LINUX的包,进入这条链的
4)PREROUTING: 路由前
5)POSTROUTING: 路由后
iptables -N yy //-N 自定义规则链,自己在表里创建一个规则链,名字自己随便写
iptables -X yy //删除自定义规则链
表对应的链如下图:表里面存链,链里又存规则
3、Iptables端口号范围
知名端口号: <254的端口号 保留给UNIX服务端口号: 254~1024之间端口号
自定义端口号: >1024的端口号
三定位:
IP地址 + 协议(TCP/UDP)+ 端口号
如:客户端A用SSH访问服务器B
A在用ssh访问B时,B是用22端口响应,而A的端口是>1024随机生成
发起者的端口号是>1024随机的,接受者是固定的
4、编写规则
规则选项
基本匹配条件
最基本的目标操作
*ACCEPT : 允许通过/旅行
*DROP : 直接丢弃,不给出任何回应
*REJECP : 拒绝通过,必要时会给出提示
*LOG :记录日志,然后传给下一条规则(匹配即停止,规律的唯一例外)
iptables -F //清空全部的路由规则
iptables -F INPUT //只清空INPUT的规则
iptables -P INPUT DROP //更改默认规则为拒绝((这默认规则不能设置成REJECT)
iptables -nL //列出所有规则
iptables -nL --line-numbers //查看防火墙规则,每个规则注明序号
iptables -t nat -nvl //查看指定表
iptables -A INPUT -p icmp -j DROP //拒绝ping防火墙本身
iptables -I INPUT 1 -s 192.168.194.1 -p icmp -j ACCEPT //允许指定IP地址ping防火墙
iptables -D INPUT 2 //删除防火墙的INPUT链中第二条规则
允许特定IP地址访问LINUX的telnet服务
1.iptables -P INPUT DROP
2.iptables -A INPUT -s 192.168.194.1 -p tcp --dport 23 -j ACCEPT
向INPUT链插入规则,作为第一条;从eth0网卡收到的、访问telnet服务的数据包,拒绝
iptables -I INPUT -i eth0 -p tcp --dport 23 -j REJECT
三、FORWARD链的使用
echo-request 准许发送
echo-reply 准许回应
要使用FORWARD链,首先要打开linux路由转发功能
临时打开路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
永久打开转发功能:
# echo ‘echo 1 > /proc/sys/net/ipv4/ip_forward‘ >> /etc/rc.local
或者
# vi /etc/sysctl.conf
net.ipv4.ip_forward= 1
# sysctl -p
假设内网段:192.168.194.0/24
假设外网段:192.168.195.0/24
1、拒绝192.168.195.0/24网段访问192.168.194.0/24网段的telnet服务
iptables -A FORWARD -s192.168.195.0/24 -d 192.168.194.0/24 -p tcp --dport 23 -i eth1 -o eth0 -j REJECT
2、拒绝SSH协议通过防火墙
iptables -A FORWARD -p tcp --dport 22 -j REJECT
3、不是192.168.195.0/24网段的主机访问SSH服务,可通过
iptables -I FORWARD ! -s 192.168.195.0/24 -p tcp --dport 22 -j ACCEPT
4、防火墙拒绝icmp的请求
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
5、允许192.168.195.0/24网段进行PING
iptables -I INPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-request -j ACCEPT
6、防火墙拒绝发送echo-reply
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j REJECT
7、允许防火墙回应192.168.195.0/24网段的ping
iptables -I OUTPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-reply -j ACCEPT
8、防火墙拒绝192.168.195.0/24对其进行TCP连接
检查SYN/ACK/RST/FIN四个位置,其中SYN被置位
iptables -I INPUT -s 192.168.195.0/24 -p tcp --tcp-flags SYN,ACK,RST,FIN SYN -j REJECT
四、扩展匹配
1、拒绝指定MAC地址的主机对防火墙本身的访问
iptables -A INPUT -m mac --mac-source 00:0C:29:43:CA:BA -j REJECT
2、在防火墙上通过一条命令打开多个端口
iptables -A INPUT -p tcp -m multiport --dport 20:22,25,80,110,143,16501:16800 -j ACCEPT
3、SSH登录的IP范围控制
允许从 192.168.4.10-192.168.4.20登录
禁止从 192.168.4.0/24网段其他的IP登录
# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range
192.168.4.10-192.168.4.20 -j ACCEPT
# iptables -A INPUT -p tcp -dport 22 -s 192.168.4.0/24 -j DROP
4、192.168.194.0/24作为内网,192.168.195.0/24作为外网。从内到外的访问不受限制,从外到内的主 动连接全部拒绝
# iptables -A FORWARD -s 192.168.194.0/24 -j ACCEPT
# iptables -A FORWARD -d 192.168.194.0/24 -j REJECT
# iptables -I FORWARD 2 -d 192.168.194.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
说明:
网络连接的五种状态
- NEW: 请求建立连接的包、完全陌生的包
- ESTABLISHED:将要或已经建立连接的包
- RELATED: 与已知某个连接相关联的包
- INVALID: 无对应连接,以及连接无效的包
- UNTRACKED: 未跟踪状态的包
5、减轻DOS(拒绝服务)攻击
比如反射/反弹式攻击
iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP
iptables -A FORWARD -m state --state NWE -p tcp ! --syn -j DROP
6、免状态跟踪
比如访问量较大的web服务
iptables -t raw -A PREROUTING -d 192.168.4.100 -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -s 192.168.4.100 -p tcp --sport 80 -j NOTRACK
iptables -t raw -A FORWARD -m state --state UNTRACKED -j ACCEPT
五、NAT表-Iptables
1、SNAT 把源地址转换,所以称作Source NAT
实现: 注意把ip_forward打开;
写入iptables规则;
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 201.1.1.1
#iptables -t nat -nvL //查看
说明:内网IP 192.168.1.0/24
公网IP 201.1.1.1
连接到外网的网卡 eth1
2、SNAT ip伪装
作用:当连接外网时,使用的IP地址不是固定的(如ADSL拨号连接),可以利用IP伪装来简化配置
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
注意:如果使用ADSL拨号,将会出现一个PPP0网络,iptables的规则,
出口设备应该使用ppp0( -o ppp0 )
ADSL拨号连接
(1)安装软件
#yum install -y rp-pppoe
(2)设置ADSL连接
#pppoe-setup //根据向导回答问题
3、DNAT 将内网服务器发布至公网
例一:局网域有一台WEB服务器,IP地址是192.168.194.10。防火墙连接公网的端口是eth1,当访问eth1 的IP地址(192.168.195.40)80端口时,就把这个请求发给内网的WEB服务器。
# iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.194.10
例二:与例一类似,只是内网服务器提供ssh访问。当访问防火墙公网地址的2222端口时,将请求发送到 内网服务器的22端口。
# iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 2222 \
-j DNAT --to-destination 192.168.194.10:22
客户端连接: # ssh 192.168.195.40 -p 2222
例三:如果发布FTP服务器,命令配置与发布WEB服务器类似,只是端口号不一样。但是应该加载两个相 关的模块。
# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
# service iptables restart
六、防火墙规则的备份和还原
# service iptables save //正常保存
# iptables-save > ~/iptables-20131210 //将当前配置保存到一个指定文件
# iptables-restore < ~/iptables-20131210 //根据备份的文件进入恢复防火墙配置
七、调整内核参数
# vi /etc/sysctl.conf
net.ipv4.ip_default_ttl=128 ->设置IP包默认的TTL值从多少开始
net.ipv4.icmp_echo_ignore_all=1 ->设置主机忽略icmp消息
net.ipv4.icmp_echo_ignore_broadcasts = 1 ->设置主机响应icmp广播消息