防火墙iptables

防火墙基本概念

防火墙指的是一个由软件和硬件设备组合而成、在内网和外网之间、专用网和公网之间的界面上构造的保护屏障。

防火墙是一种计算机软件和硬件的结合,是internet和intarnet之间建立起一个安全网关,从而保护内网免受非法用户的侵入。

防火墙主要由服务访问规则(ACL)、验证工具、包过滤3个部分组成。

Linux下的防火墙

常见的软件防火墙有iptables

iptables是建立在netfilter架构基础上的一个包过滤管理器,最主要的作用是用来做防火墙或透明代理。主要提供一下三种功能:包过滤、NAT、通用的pre-route packet mangling

具有三种内建链:

INPUT -- 处理来自外部的数据

OUTPUT -- 处理向外发送的数据

FORWARD -- 将数据转发到本机的其他网卡设备上。

iptables相关的文件

/etc/init.d/iptables:这个是用来开始、停止iptables或是保存规则的初始化脚本。

/etc/sysconfig/iptables:所有的规则都保存在这个文件。

/sbin/iptables:是iptables的二进制文件。

相关命令:

    

iptables 
-L -- 查看当前iptables配置
-A 增加一个规则
-D 删除规则
-L 显示所有规则
-F 删除所有规则
        -s:来源IP
        -d:目的IP
        -p:通信协议
--sport 源端口
        --dport:目的端口
        -j:代表"Jump"
        --in-interface 选择网卡--in-interface选择网卡
--fragment 数据包分段
--state 状态(RELATED,ESTABLISHED)
#    iptables大多数用来配置处理从网络进入Linux服务器的数据包,所以input规则链经常用到。
#    当有数据包通过linux核心,下面几个指令会决定数据包被匹配后如何处理。
#    ACCEPT:数据包允许通过到达目的地。
#    REJECT:数据包被拒绝并返回给发数据包的主机一个见到那的解释。
#    DROP:数据包被丢弃不返回任何信息。

配置iptables规则注意点:

1、先添加允许规则,在添加阻止任何的规则。

2、编写的规则是存储在内存中,不会自动存储在磁盘,所以为了重启后依然有效,需要手动执行初始化脚本来保存规则。

基于TCP/IP状态的规则

iptables的特性之一是能确定数据包的状态。

NEW:A服务器发送给B服务器一个SYN数据包来新建一个连接。

RELATED:B服务器接受SYN数据包并发送给A服务器一个SYN-ACK数据包来确定连接正常。

ESTABLISHED:A服务器接受到SYN-ACK数据包并发送给B服务器ACK包来做最后的确认,至此连接建立完成,两台服务器开始传输数据。(三次握手过程)

以下规则是服务器自带的,为了能与其他服务器建立TCP连接。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptable -A OUTPUT -m state --state RELATED,ESTABLISHED

自定义规则实例:

iptables -A INPUT -s 213.10.10.13 -d 192.168.1.1 -p TCP --dport 22 -j ACCEPT

阻止IP:

    iptables -A INPUT -s 213.10.10.13 -j DROP
#    阻止从213.10.10.13传进来的数据包
    iptables -A INPUT -d 192.168.1.15 -j REJECT
#    阻止从局域网192.168.1.15来的数据包

允许IP:20

    iptables -A INPUT -s 213.10.10.13 -d 192.168.1.4 -p TCP --dport 21
 #   接收来自IP213.10.10.13到目标地址FTP服务器192.168.1.4的数据包

 

1、丢弃所有来自外网的ftp包,内网除外。

iptables -A -i lo -j ACCEPT(允许本机内部所有网络通信,必须的)
iptables -A -i eth0 -p tcp --dport 21 -j ACCEPT(在本机开放21端口,即ftp控制端口)
iptables -A -i eth0 -p tcp --dport 20 -j ACCEPT(在本机开放20端口,即ftp传输端口)
iptables -A -i eth1 -j DROP(禁止所有数据包通过)

 

2、允许ssh禁止telnet

iptables -A -i lo -j ACCEPT(允许本机内部所有网络通信)
iptables -A -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A -i eth1 -p tcp --dport 22 -j ACCEPT(在本机开放22端口,即ssh服务端口)
iptables -A -i eth1 -p tcp --dport 23 -j DROP(在本机关闭23端口,即telnet服务端口)

 

3、禁止ping本机

iptables -A -p icmp --icmp-type 8 -s 0/0 -j DROP(0/0所有网络)
iptables -A -p icmp --icmp-type 0 -s 0/0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -s 192.168.28.1(本机ip) -j DROP
iptables -A OUTPUT -p icmp --icmp-type 8 -s 192.168.28.1 -j ACCEPT
# 这样的配置是你可以ping别人,别人不能ping你

 

4、禁止所有udp端口

iptables -A -i eth0 -p udp -j DROP
iptables -A -i eth1 -p udp -j DROP
# 当配置好接收的规则后,最后就要增加拒绝所有的规则了。
    iptables -A INPUT -j REJECT
    iptables -A FORWARD -j REJECT
    # 这些规则必须在最后添加
    # 要删除一个规则,只需把"-A"换为"-D"即可
# iptables规则是从上往下应用,当找到能通过的规则,不管下面是否有规则冲突,也一样能通过。

 

保存规则

为了保存规则需执行以下命令:

/etc/init.d/iptables save

重新启动iptables从/etc/sysconfig/iptables加载最新规则

/etc/init.d/iptables stop
/etc/init.d/iptables start

 

IPTABLES自身的基本操作

启动iptables:service iptables start
关闭iptables:service iptables stop
重启iptables:service iptables restart
查看iptables状态:service iptables status
保存iptables配置:service iptables save
iptables服务配置文件:/etc/sysconfig/iptables-config
iptables规则保存文件:/etc/sysconfig/iptables
打开iptables转发:echo "1">/proc/sys/net/ipv4/ip_forward