日常运维2
2.2 firewalld&iptables
permissive,遇到真正需要阻断时不会真正阻断,只会提醒
setenforce 0/1 disable/enable enforcing 临时更改
####如何永久关闭selinux (编辑/etc/selinux/config 将SELINUX值改为disabled/permissive)
####同样也可以用sed命令永久关闭 sed i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
2.2.1 firewalld、iptables和netfilter之间的关系
在centos6上,我们用的是iptables服务,而在centos7上,我们用的是firewalld服务。 同样的,centos6上安装的是iptables包,而centos7上安装的是firewalld包。
不管是centos6还是centos7,核心其实都是netfilter,netfilter是linux的一个内核模块,iptables 命令是linux内核自带的。
centos6上的iptables服务和centos7上的firewalld服务,其实都是用来定义防火墙规则功能的防 火墙管理工具。 它们都是将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙 功能, 所以其实在配置规则的思路上是完全一致的。
由于好多服务受限于selinux,并且开启selinux会增大运营成本, 所以大多时候会处于关闭状态
在centos7中 firewalld是默认开启的,下图显示如何开启netfilter关闭firewalld
2.2.2 netfilter
2.2.2.1 netfilter5表5链介绍
1.filter表——三个链:INPUT、FORWARD、OUTPUT 作用:过滤数据包 内核模块:iptables_filter.
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT 作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD 作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS 内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4.Raw表——两个链:OUTPUT、PREROUTING 作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
5.Security表——三个链:INPUT、OUTPUT和FORWARD 作用:Security表在centos6中并没有,用于强制访问控制(MAC)的网络规则 内核模块:iptable_security
netfilter的5个链
PREROUTING:数据包进入路由表之前 INPUT:通过路由表后目的地为本机 FORWARD:通过路由表后,目的地不为本机 OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前
nat表用于实现路由器,共享上网端口映射
iptables progress please refer to http://www.cnblogs.com/metoy/p/4320813.html
2.2.3 iptables 语法
2.2.3.1 iptables一般语法格式:
iptables的命令格式较为复杂,一般的格式如下:
iptables [t table] 命令 [chain] [rules] [j target]
###格式说明:
table————指定表名,iptables内置包括filter表、nat表、mangle、raw表和security表。
命令—————对链的操作命令
chain————链名
rules————匹配规则
target————动作如何进行
###操作命令选项说明
命令 说明
P或–policy <链名>:定义默认策略
L或–list <链名>:查看iptables规则列表
A或—append <链名>:在规则列表的后增加1条规则
I或–insert <链名>:在指定的位置插入1条规则
D或–delete <链名>:从规则列表中删除1条规则
R或–replace <链名>:替换规则列表中的某条规则
F或–flush <链名>:删除表中所有规则
Z或–zero <链名>:将表中数据包计数器和流量计数器归零
###规则选项说明
i或–ininterface <网络接口名>:指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等
o或–outinterface <网络接口名>:指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等
p或—proto协议类型 < 协议类型>:指定数据包匹配的协议,如TCP、UDP和ICMP等
s或–source <源地址或子网>:指定数据包匹配的源地址 –sport <源端口号>:指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式 指定一个范围的端口
d或–destination <目标地址或子网>:指定数据包匹配的目标地址
dport <目标端口号>:指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的 格式指定一个范围的端口
###动作选项说明
ACCEPT:接受数据包
DROP:丢弃数据包
REDIRECT:与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。
SNAT:源地址转换,即改变数据包的源地址
DNAT:目标地址转换,即改变数据包的目的地址
MASQUERADE: IP伪装,即是常说的NAT技术, MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态 的; 如果主机的IP地址是静态固定的,就要使用SNAT
LOG日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错
iptables (-t nat/filter) -nvL 默认规则--保存于 /etc/sysconfig/iptables
iptables -F 清空规则(但却无法清空配置文件的规则,重启后会加载service iptables restart)
iptables -Z 清零
下例命令为jp阻断 封掉, DRPO可以用REJECT命令代替
如何删除新加入规则 (虽然 iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP亦能实现删除 但是input过于繁琐,推荐使用以下方式)
iptalbes -nvL --llne-number
iptables -D INPUT 8(the line that you want to delete)
iptables -P INPUT DROP 清除全部规则 (轻易不要用)///// iptables -P OUTPUT ACCEPT
2.2.3.2 iptables nat 表应用
##准备环境pre-work
1.准备个workstations 编辑虚拟机设置
2. 添加网卡
3.将网络连接模式改成区段(为了确保实验环境,网卡2不连接window而是连接某区段)
4.配置另一个workstations(fred linux 克隆)的网卡,选择Lan区段
5.添加成功,并尝试给新网卡ens37设置ip
可以通过下命令手动设置ip、端口(重启之后就会没有了,如果想要一直存在就要更改配置文件)
6.同理,配置fred 克隆workstation ens37网卡
7.测试是否ping的通
##调配
需求1
1. A机器上打开路由转发 (此默认值是0,意为关闭)
cat /proc/sys/net/ipv4/ip_forward
打开端口转发 echo "1" > /proc/sys/net/ipv4/ip_forward
2. 增加一条实现上网的规则
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
3.克隆机机器上设置网关为192.168.100.1
实现克隆机联网
4.设置dns
vi /etc/resolv.confvi
需求2(端口映射)
1. A机器上打开端口转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2. 增加iptables 规则(先删除之前的规则 以免影响接下来的实验)---此为进去的操作
iptables -t nat -A PREROUTING-d 192.168.88.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
从88.128进来通过端口1122 转发到100.100的22端口
之后设置出去的端口
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.88.128
3.克隆机器添加网关
克隆机机器上设置网关为192.168.100.1
实验成功
2.2.3.3 iptables规则备份和恢复