iptables 如何定制防火墙规则
如果有多个规则,按规则次序一个个匹配,如果一个规则匹配了,就不再往下走了,,如果所有的规则都不匹配,将使用默认规则
默认规则也可以进行修改-P
在执行这条命令之前,需要保留一条允许的规则,不然就连不上了
自己windows连接,允许,其他都拒绝
30.6上就ping不通了
默认规则可以起到其他规则都不生效的效果
这两个有什么区别
总体来看效果是一样的,只不过其他场景下有点个别问题
还是不能访问
但是还有细微差别,把所有规则清空
默认规则清不了,只能清理里面的规则
默认drop。谁都连不上去了
建议还是追加好,不要修改默认规则
在所有规则最后拒绝所有是推荐的做法
如何修改呢
-R修改 2是第几条
删除是-D,增加是-A,修改是-R
如果想把一条规则放到最前面去,默认-大I是第一条
定义一个别名
自定义可以自己创建链
4表raw-mangle-nat-filter
5链,prerouting,input,output,postrouting,forward
加n避免把数字解析成字符串,反向解析,一般都不要解析,速度慢而且依赖网络的速度
x是显示精确数字
让数字变的大一点
x就是精确数字
-S是以特定的格式显示规则
这种格式存放将来可以直接当命令使用
-Z是清零,从头开始算
基本匹配,iptables 本身就有功能,不需要借助与扩展模块,有些是核心功能,不需要借助模块
有些需要借助模块才能实现
-s源地址,-d目标地址,-p目标协议。
/etc/protocols是现在支持协议的各种各类型
tcp,udp协议是传输层,下一层是ip协议,internet层,internet层需要标记协议类型,有个字段写的6,17,来区分tcp,udp
可以定义接口,从哪个接口收发数据
现在可以ping通
ssh可以,因为只是拒绝icmp协议
源地址是从30.17.,目标地址是到30。7,tcp协议的,都拒绝
ssh就是走tco协议
现在添加一个ip地址就可以访问了,只是禁止192的地址
如果通过ssh去访问30.7
不拒绝,因为拒绝的是目标地址30.7
扩展功能要求加载第三方模块,扩展的功能要查看具体用法,就不能使用iptables的man帮助了,
只写了基本用法,没有写扩展用法
centos6上没有这个用法,只有iptables,centos6上所有的帮助用法都在这
扩展方式有两种,
一种叫显示扩展,
一种叫隐式扩展,在调用iptable模块的时候,需不需要加这个模块名,如果要加就是显示扩展,如果没有加也能用这个功能,就是隐式扩展
tcp模块就属于隐式扩展,调用tcp模块的时候,不写模块名,系统也知道你要调用tcp模块
有些是需要加模块名的,比如time时间,如果不写模块名。系统就不知道调用的哪个模块的功能
可以根据端口号来定义安全规则,现在想控制机器上的特定网络服务,比如445,139(samba共享)
这边就不行了
dport属于扩展用法,走的是tcp模块,不用指定模块名,因为已经知道了你的协议是tcp
如果现在想拒绝好几个服务呢
现在想把80服务,ftp服务,windows共享,都想拒绝了
有一个扩展功能可以实现多个端口号
tcp的标记问题,三次握手,4次挥手,就想拒绝你的第一次握手,SYN,syn是1,其他位都是0,这个就是同步位,发起的第一次请求
mask要检查的标记位,comp表示必须为1的那一位
第二个握手包
简化写可以如下
所有位都检查,并且都为1】
这种报文一般都是出故障的,可能是黑客构建的或者特殊的
没有一个为1的也不对
拒绝第一次握手
这么写代表新的链接不行,旧的链接还可以继续保持
udp道理一样,!就是取反,除了
别人ping不同,自己也ping不出去
icmp还可以细分成类型和代码,类型0表示应答包,请求包就是8
你能ping不通我,我ping的通你
隐式扩展就是不需要写模块名称
-m表示指定模块名
要写多个端口就需要用到multiport
显示扩展必须要调用的模块名
telnet可以测试某个端口是否打开
一般攻击远程主机先telnet远程主机端口打没打开,探测之后显示什么版本,攻击漏洞
从172.16.0.0/16网段发起请求的,到达10机器的,采用tcp协议的,多端口20:22(20,21,22)80,4个端口
现在你只能访问我的80。22端口
现在是连接不上去的
现在想要访问,,22,80端口,必须要加到拒绝策略之前
由于用了-I就插入到了第一条
从效率上看,是所有主机都检查,只要满足就不往下检查了,如果把30.1放到前面。所有主机白白匹配一次计算,所以尽可能把用的频繁的规则往前方
服务器端回应的包
就可以访问了,用curl访问也可以