Linux环境下iptables防火墙基本用法演示

一、简单添加

两台设备,防火墙关闭,防火墙规则很干净,网络通畅。

image.png

当启用防火墙后,iptables -vnL显示出所有规则,但我们不使用默认规则,清空规则,自己定义

image.png

1、iptable -t filter -A INPUT -s 192.168.239.70 -j DROP(末尾添加),设置源地址是192.168.239.70发出的请求,全丢弃,即不回应

image.png

之前是通的,但设置完防火墙规则后的DROP(丢弃)就卡在这里,光标不停闪烁

image.png

2、iptables -I INPUT -s 192.168.239.70 -j REJECT,插入规则,源地址为192.168.239.70的主机发出的请求全部拒绝,这里直接返回目标端口不可到达

iptables -I INPUT 2 -s 192.168.239.70 -j REJECT,插入第二条

image.png

3、iptables -D INPUT 2,删除INPUT中的第二条规则

image.png

4、iptables -R INPUT 2 -s 192.168.1.1 -j REJECT,替换规则中第2条源地址ip由192.168.239.70更改为192.168.1.1

image.png

5、iptables -A INPUT -s 192.168.239.70,192.168.239.71 -j REJECT,一次加入两条ip

image.png

6、iptables -A INPUT -s ! 192.168.239.70 -j REJECT,除了192.168.239.70的ip,全部拒绝

生产中为了避免自己设置规则时候不小心把自己踢出,应做防火墙备份,再用at执行计划,设置5分钟后执行,等规则设置完成后再取消计划,避免产生不必要的麻烦

7、iptables -P INPUT DROP,更改策略中只要不匹配就DROP,默认为ACCEPT(只支持ACCEPT和DROP,不支持REJECT),最好不要进行更改

image.png

8、iptables -A OUTPUT -d 192.168.239.70 -j DROP,拒绝本机流出报文访问目标地址192.168.239.70

image.png

此时192.168.239.70也不会ping通本机,因为报文的传导是有去有回的

image.png

抓包查看

image.png

9、取反

iptables -A INPUT ! -s 192.168.239.1 -j REJECT

除了192.168.239.1,可以连接,其余全部拒绝

image.png

测试,connection refused

image.png

10、设置一个网段的主机都可以访问

iptables -A INPUT -s 192.168.239.0/24 -j ACCEPT

image.png

二、查看命令

iptables -vnL

iptables -vnnnL

iptables -S

image.png

这里记录了防火墙的规则,如果另一台设备也需要同样的防火墙规则,可以将其生存文件,并

iptables -S > iptables.log

while read line; do done iptables $line < iptables.log

三、规则管理

1、iptables -F,清空防火墙规则

这是有防火墙列表的

image.png

输入命令

image.png

2、iptables -Z

image.png

三、基本匹配

1、-p {tcp|udp|icmp}

iptables -A INPUT -s 192.168.239.70 -p icmp -j REJECT

image.png

结果

image.png

由于禁止的是icmp协议,ssh基于的是tcp协议,但ssh还是可以

image.png

2、-i,数据报文流入接口

iptables -A INPUT -i eth0 -j ACCEPT,从eth0网卡流入的数据报文全部允许,适用于多种网卡情况

四、扩展匹配-隐式匹配

1、设置多个ip同时加入规则

打开我的云服务器,lastb发现有几个ip尝试登陆我的云服务器,将这些ip全部加入黑名单

image.png

iptables -A INPUT -s 103.207.37.253,118.123.244.228,119.6.103.44,5.188.10.156,103.207.37.253,103.207.38.226,14.226.255.211,78.198.69.64 -j REJECT

image.png

2、tcp

--tcp-flags SYN表示第一次握手,等于--syn

--tcp-flags SYN,ACK表示第二次握手

--tcp-flasg ACK表示第三次握手

输入指令iptables -A INPUT -p tcp --syn -j REJECT,查看

image.png

测试结果

之前已经连接到192.168.239.60的主机可以继续使用,而其他主机连接被拒绝

image.png

3、icmp

--icmp-type 8 icmp请求报文

--icmp-type 0 icmp响应报文

iptables -A INPUT -p icmp --icmp-type 8 -j REJECT,拒绝进来请求报文,测试结果为

image.png

这造成了我能ping通你,但你ping不通我

image.png

4、开放端口

以SAMBA服务举例,连接SAMBA服务需要开放139、445端口,未开放前

image.png

输入指令iptables -A INPUT -p tcp --dport 139 -j ACCEPT和iptables -A INPUT -p tcp --dport 445 -j ACCEPT之后,已经可以连接

image.png

五、自定义链

1、iptables -N WEBSRV ,起名

iptables -N WEBSRV FILESRV,自定义链改名由WEBSRV变为FILESRV

iptables -A FILESRV -p tcp --dport 139 -j ACCEPT,向FILESRV添加允许139端口通过的规则

image.png

2、关联

此时做测试,无法登录

image.png

iptables -A INPUT -s 192.168.239.71 -j FILESRV

image.png

测试结果

image.png

自定义链类似于shell中的函数调用理念,提前预设好,等使用时候直接用即可

六、显示扩展

1、multiport 扩展端口,解决端口不连续的问题

iptables -I INPUT -p tcp -m multiport --dports 80,443,3306 -j ACCEPT

image.png

如果命令是iptables -I INPUT -p tcp -m multiport --dports 80:88,443,3306 -j ACCEPT,添加的端口是80,81,82,83,84,85,86,87,88,443,3306

2、定义ip范围

iptables -A INPUT -m iprange --src-range 192.168.239.60-192.168.239.69 -j ACCEPT

image.png

本机192.168.239.60无法ping通192.168.239.70,此时添加规则

image.png

可以ping通

image.png

3、MAC扩展

iptables -A INPUT -s 192.168.1.1 [!] -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT

4、string扩展

对报文中的应用层数据做字符串模式匹配检测

iptable -A OUTPUT -m string --string  "baidu" --algo bm -j REJECT

查看iptables规则,此时可以ping通www.baidu.com

image.png

设置string扩展规则,之后再次ping www.baidu.com失败

image.png

5、time扩展

iptables -A OUTPUT  -m time --timestart 1:00 --timestop 9:00 --weekdays 2,4,6 -j REJECT

设置UTC时间1:00-9:00(北京时间9:00-18:00),周二四六不能流出报文

image.png

6、connlimit扩展,并发连接数扩展

控制单个ip最多可以发起多少个连接数,防止******(cc***,挑战黑洞)

iptables -A INPUT -m connlimit --connlimit-above 100 -j REJECT

拒绝并发连接数大于100的访问

image.png

测试

image.png

当并发数大于100时拒绝

image.png

7、limit扩展

基于收发报文的速率做匹配

iptables -I INPUT 2 -m limit --limit 6/minute --limit-burst 10 -j ACCEPT

iptables -A INPUT -j REJECT

一分钟前十次ping 本机不理会,超过十个后拒绝,后面ping中均匀分布每分钟ping通6次

image.png

测试结果

image.png

8、state扩展

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求,即新连接,但不影响正在连接的

ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态,即正在连接的

RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系

INVALID:无效的连接,如flag标记不正确

UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

七、target

LOG:

iptables -A INPUT -s 192.168.239.60 -j LOG --log-prefix "iptables:" ,--log-prefix,前缀的意思

注意日志变化

image.png

输入ping指令后

image.png

和state相结合,可以iptables -I INPUT 3  -s 192.168.239.0/16 -m state --state NEW -j LOG --lgo-prefix "自定义字符",只要192.168.239.0网段的新主机访问本主机,日志都会记录下来

八、iptables策略的保存

CentOS6的保存service ipatables save,系统会自动保存到 /etc/sysconfig/iptables

重启服务系统会自动读取该文件

CentOS7的保存,iptables-save > /DIR/FILE,读取时候iptables-restore < /DIR/FILE,

因此需要在/etc/rc.d/rc.local中写入iptables-restore < /DIR/FILE(记得对rc.local加执行权限)

九、NAT的实现

iptables -t nat -A POSTROUTING -s 192.168.31.0/24 -j SNAT --to-source 172.18.0.123


猜你喜欢

转载自blog.51cto.com/13873498/2311187