iptables防火墙介绍与配置

mtain 2016年06月06日 785次浏览

iptables防火墙介绍与配置

防火墙介绍

防火墙分类

  1. 数据包过滤 分析ip和端口、MAC是否符合规则
  2. 代理服务器

防火墙限制

  1. 防火墙不能有效防止病毒和木马
  2. 防火墙一般不设定对内部访问规则,对内网攻击防护无效

防火墙配置原则

  1. 拒绝所有,逐个允许(针对端口)
  2. 允许所有,逐个拒绝(针对ip)

Linux常见防火墙

  1. iptables
  2. ipchains

iptables介绍

iptables结构

表-链-规则 在表中保存规则链,在链中放入规则。

iptables默认表

  1. filter表 数据过滤表
  2. nat表 网络地址转化表
  3. mangle表 特殊数包据标记

iptables链

  1. PREROUTING
  2. INPUT(访问自己)
  3. FORWARD(访问其它)
  4. OUTPUT
  5. POSTROUTING

iptables配置使用

1.规则查看和清楚

iptables [-t 表名] [选项] -n 选项: -L 查看 -F 清楚所有规则 -X 清楚自定义链 -Z 清楚所有链统计

-n 以端口和ip显示

示例: 查看nat表中规则:iptables -t nat -L

执行以下三条清空所有规则: iptables -F iptables -X iptables -Z

2.定义默认策略

iptables -t 表名 -P 链名 ACCEPT|DROP -P 定义默认策略

示例: 在INPUT链上拒绝所有:iptables -t filter -P INPUT DROP 注意:不要把自己踢出服务器,先设置允许策略,最后设定此策略(规则先配先生效)

3.ip和网卡接口设置

iptables [-AI 链] [-io 网卡接口] [-p 协议] [-s 源IP] [-d 目标IP] -j 动作

参数说明: -A 追加链规则 -I INPUT 2 将此规则插入到INPUT链,并作为第二条规则 -D 链 条数 删除指定链的指定条数规则,如iptables -D INPUT 2 -i eth0 指定进入接口(要在INPUT链上定义) -o eth0 指定传出接口(要在OUTPUT链上定义) -p 协议 tcp,udp,icmp,all -j 动作 ACCEPY,DROP

示例: 允许本机回环网卡通信:iptables -A INPUT -i lo -j ACCEPT 允许254进入eth0:iptables -A INPUT -i eth0 -s 192.168.1.254 -j ACCEPT 允许网段访问:iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j DROP

4.设定端口访问

iptables -A INPUT -i eth0 -p all -s 源IP --sport 源端口 -d 目标IP --dport 目标端口 -j 动作 注意:端口限制协议不能用all,必须指定协议

示例: iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 22 -j DROP iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 137:139 -j DROP

5.模块调用

  1. 加载iptables功能模块-m 模块名称 模块选项 -m state --status ESTABLISTED,RELATED 如:iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -i ACCEPT state 状态模块常见状态:ESTABLISHED联机成功的状态,RELATED返回包的状态

  2. 使用mac模块限制mac地址访问-m mac --mac-source mac地址 如:iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j DROP

  3. 使用string模块匹配数据包中的字符串(大小写都要限制)-m string --string 字符串 如:通过dns拒绝qq登陆iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo kmp -j DROP --algo 选择模式匹配策略,支持KMP和BM两种字符串算法,任选一个即可。

6.简易防火墙实现

iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

新增允许策略: 在第三条的位置插入策略:iptables -I INPUT 3 -p tcp --dport 8080 -j ACCEPT

防火墙重启所设置的策略都会消失。 为了防止重启服务策略丢失可执行:

方法一:service iptables save 方法二:防火墙脚本vi /root/iptables.rule,然后将其加入开机启动 方法三:centos7中的iptables-services配置文件

iptables服务启动与关闭

  1. Linux防火墙(iptables)重启系统生效

    开启: chkconfig iptables on

    关闭: chkconfig iptables off

  2. Linux防火墙(iptables) 即时生效,重启后失效

    开启: service iptables start

    关闭: service iptables stop

centos 7中安装使用iptables-services 1. 关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2. 安装iptables防火墙 yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

systemctl restart iptables.service #最后重启防火墙使配置生效 systemctl enable iptables.service #设置防火墙开机启动