一、防火墙分类

  wKiom1f0hfLCB8l7AACt3PcGLZw578.png


二、Linux防火墙(Iptables)

  netfilter:又称“内核空间”

  iptables又称“用户空间”

  wKioL1f0idCxQLbaAADMo2p_MYo696.png


1、Iptables默认的四张表

1filter:     用于防火墙,默认有INPUT/OUTPUT/FORWARD三条链

2nat:       网络地址转换,默认有PREROUTING/POSTROUTING/OUTPUT三条链

3mangle:     流量×××,默认有五条链(对数据进行标记)

4raw:       用于状态跟踪,默认有两条链


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默认的五条规则链

1INPUT:       如果一个数据包的目的地址LINUX本身,则进入INPUT

2OUTPUT:      源地址LINUX本身     

3FORWARD:     数据包从一块网卡接收,从另一块网卡发出,经过LINUX的包,进入这条链

4PREROUTING:   路由前

5POSTROUTING:   路由后

 

iptables -N yy   //-N 自定义规则链,自己在表里创建一个规则链,名字自己随便写

iptables -X yy   //删除自定义规则链


表对应的链如下图:表里面存链,链里又存规则

wKiom1f0hzjw3gr4AAEh0eVs9Sk666.png


3、Iptables端口号范围

知名端口号:          <254的端口号                                    保留给UNIX服务端口号:   254~1024之间端口号

自定义端口号:        >1024的端口号

 

三定位:

IP地址 + 协议(TCP/UDP端口号


如:客户端ASSH访问服务器B

A在用ssh访问B时,B是用22端口响应,而A的端口是>1024随机生成

发起者的端口号是>1024随机的,接受者是固定的


4、编写规则

规则选项 

wKiom1f0owHS1h_kAADLBte5N-E483.png 


基本匹配条件

wKiom1f0pX-yMx51AABA7DIX7JM073.png


最基本的目标操作

*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地址访问LINUXtelnet服务

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 -s 192.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


9、从eth1发过来的tcp连接请求都拒绝

iptables -I INPUT -p tcp --tcp-flag SYN,ACK,FIN,RST SYN -j REJECT


四、扩展匹配

wKioL1f0rtzza5QVAAA3NOD-NR4213.png


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 --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT

 

3SSH登录的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 -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.4080端口时,就把这个请求发给内网的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广播消息