1 firewalld和netfilter
1. 临时关闭selinux(防火墙) : setenforce 0
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
2. 永久关闭selinux(防火墙),编辑...config配置文件 :(好多服务,受限于selinux,关闭selinux也不会有太大的安全问题)
[root@localhost ~]# vi /etc/selinux/config #更改:SELINUX=disabled
3. 禁止开机启动firewalld服务(centos7默认防火墙) ,firewalld(关闭centos7默认防火墙):
(firewalld默认是centos7的防火墙,可以关闭掉这个,用centos6上的防火墙netfilter)
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4. 关掉(停止)firewalld服务(centos7默认防火墙) :
[root@localhost ~]# systemctl stop firewalld
5. 安装netfilter服务(centos6或centos5默认防火墙) :netfilter(开启centos6默认防火墙) 注意:(iptables是netfiltel防火墙的工具)
[root@localhost ~]# yum install -y iptables
[root@localhost ~]# yum install-y iptables-services
6. 启用iptables服务 :
[root@localhost ~]# systemctl enable iptables
7. 开启iptables服务 :
[root@localhost ~]# systemctl start iptables
8. 查看iptables默认规则 :
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
22 1636 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 17 packets, 1632 bytes)
pkts bytes target prot opt in out source destination
2 netfilter5表5链介绍
Linux防火墙-netfilter:netfilter的5个表
• filter表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链
• nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链
• managle表用于给数据包做标记,几乎用不到
• raw表可以实现不追踪某些数据包,阿铭从来不用
• security表在Centos6中并没有,用于强制访问控制(MAC)的网络规则,阿铭老师没用过
参考文章 http://www.cnblogs.com/metoy/p/4320813.html
数据包流向与netfilter的5个链:其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
• PREROUTING:数据包进入路由表之前
• INPUT:通过路由表后目的地为本机
• FORWARD:通过路由表后,目的地不为本机
• OUTPUT:由本机产生,向外发出
• POSTROUTING:发送到网卡接口之前
10.14 iptables语
iptables命令的管理控制选项
-P 设置指定链的默认策略(policy) #默认不写入,优先级最低???
-F 清空(flush)临时清空
-X 删除指定表中用户自定义的规则链(delete-chain)
-N 新建(new-chain)一条用户自己定义的规则链
-E 重命名用户定义的链,不改变链本身
-Z 将所有表的所有链的字节和数据包计数器清零
-A 在指定链的末尾添加(append)一条新的规则
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-L 列出(list)指定链中所有的规则进行查看
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
-p 指定协议为tcp
-s 指定来源ip
--sport 指定来源端口
-d 指定目标ip
--dport 指定目标端口
-i 指定网卡
-t nat 指定表 nat表 ;不加-t : 默认指定filter表
-j DROP 扔掉;
防火墙处理数据包的四种方式
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
REDIRECT 与DROP基本一样,区别在于它除了阻塞包之外
SNAT 源地址转换,即改变数据包的源地址
DNAT 目标地址转换,即改变数据包的目标地址
1. 查看iptables默认规则配置文件,查看iptables默认规则:
[root@localhost ~]# cat /etc/sysconfig/iptables
[root@localhost ~]# iptables -nvL #查看iptables默认规则
[root@localhost ~]# iptables -nvL --line-number
num pkts bytes target prot opt in out source destination
1 1161 101K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ...
[root@localhost ~]# iptables -t nat -nvL #查看指定表
[root@localhost ~]# iptables -t filter -nvL #查看指定表
2. 保存iptables规则(当前规则,保存到配置文件):
[root@localhost ~]# service iptables save
3. 清空iptables规则:
[root@localhost ~]# iptables -F #临时清空
[root@localhost ~]# service iptables save #执行一下为完全清空
4. 重启iptables规则:
[root@localhost ~]# service iptables restart
8. 把表的计数器清零:(因为每时每刻都是在通信,数据清零一会又会有数据)
[root@localhost ~]# iptables -Z ; iptables -nvL
9. 增加规则,增加到最后面:-A 增加一条规则,添加在最后;-I 插入一条规则,添加在最前;(排在最前的规则,优先过滤前面的,再过滤下面的规则)
iptables -A(增加一条规则) INPUT(链) -s 来源ip -p tcp(协议) --sport 来源端口 -d 目标ip --dport 目标端口 -j DROP(扔掉)
[root@localhost ~]# iptables -A INPUT -s 192.168.223.1 -p tcp --sport 1234 -d 192.168.223.128 --dport 80 -j DROP
10. 删掉规则:
iptables -D(删除一条规则) INPUT(链) -s 来源ip -p tcp(协议) --sport 来源端口 -d 目标ip --dport 目标端口 -j DROP(扔掉)
[root@localhost ~]# iptables -D INPUT -s 192.168.223.1 -p tcp --sport 1234 -d 192.168.223.128 --dport 80 -j DROP
11. 插入规则,添加在最前面:
iptables -I(插入一条规则) INPUT(链) -p tcp(协议) --dport 目标端口 -j DROP(扔掉)
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j DROP;iptables -nvL
12. 插入规则,添加在最前面,并指定网卡:-i 指定网卡
iptables -I(插入一条规则) INPUT(链) -s 来源IP/24 -i 网卡名称 -j ACCEPT(扔掉)
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
13. 删掉 设定的规则(自己记得规则怎么写的,要不没法指定删除哦):
[root@localhost ~]# iptables -D INPUT -p tcp --dport 80 -j DROP
14. 打印出规则的序列号编号:
[root@localhost ~]# iptables -nvL --line-number
15. 删除指定规则:iptables -D INPUT 规则序列号编号
[root@localhost ~]# iptables -D INPUT 2
•更改默认规则(不常用慎用):iptables -P OUTPUT DROP
如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
•恢复默认规则:iptables -P OUTPUT ACCEPT #默认规则优先级最低
10.15 iptables filter表小案例
iptables表小案例
需求:
对filter表开放22端口、80端口、 21端口;
INPUT链:DROP;
OUTPUT链和FORWARD链:ACCEPT;
22端口只针对192.168.136.0/24开通;
所有网段开发80端口、 21端口。
1. 创建iptables.sh脚本:
[root@localhost ~]# vim /usr/local/sbin/iptables.sh
脚本内容添加:
#! /bin/bash
ipt="/usr/sbin/iptables" #定义变量iptables
$ipt -F #清空规则,(没有-t,默认是执行的filter)
$ipt -P INPUT DROP #进来数据默认策略
$ipt -P OUTPUT ACCEPT #出去数据默认策略
$ipt -P FORWARD ACCEPT #转发数据默认策略
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允许所有已经建立的连接,表现为本机可以ping其他主机,但是其他主机无法ping本机
$ipt -A INPUT -s 192.168.223.0/24 -p tcp --dport 22 -j ACCEPT #增加规则(192.168.223网段访问22端口的数据包放行)
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT #
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
解释说明:
$ipt -A INPUT -s 192.168.223.0/24 -p tcp --dport 22 -j ACCEPT增加规则(192.168.223网段访问22 ssh端口的数据包放行)
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT增加规则(80端口数据包方行)
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT增加规则(21端口数据包放行)
2. 执行iptables.sh脚本:[root@localhost ~]# sh /usr/local/sbin/iptables.sh
3. 查看iptables.sh规则:[root@localhost ~]# iptables -nvL
4. 恢复默认规则(重启了iptables服务,因为刚刚设定的规则没有保存到配置文件!)[root@localhost ~]# service iptables restart
filter表小案例
1. 本机可以ping通外网,别人ping不通本机(禁ping) :[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
2. 删除禁ping的规则:[root@localhost ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP