Linux学习 防火墙
防火墙--firewalld
一、防火墙:限制数据包
数据包类型:INPUT及OUTPUT表示本机接收的数据包;FORWARD是路由的数据包
二、Iptables
1.iptables:在firewalld的最底层,3张表5条链
其中,3张表5条链:
filter --经内核处理的表:INPUT;OUTPUT;FORWARD
nat--不经内核处理:POSTROUTING(SNAT);PREROUTING(DNAT)【链】,INPUT;OUTPUT
monge --用来作附加说明,不常用
2.systemctl stop firewalld ##一定要关闭火墙
systemctl disabled firewalld
systemctl start iptables
systemctl enable iptbales
3.iptables的常用命令
iptables -t ##指定表名称,若不指定时,默认为filter表
-n ##不作解析
-L ##列出指定表中的策略
-F ##刷掉所有策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作(ACCEPT--允许,REJECT--拒绝)
-N ##增加链
-E 原名 新名称 ##修改名称
-X ##删除指定链
-D ##删除指定策略
-I ##插入策略
三、iptables的filter表--经内核的
1.iptables -t filter -nL ##查看filter表中的策略,并不作解析
iptables -nL ##默认查看filter表中的策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 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
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2.iptables -F ##刷掉内存中的内容,但只是暂时
service iptables save ##保存动作默认文件中/etc/sysconfig/iptables中,开机时自动读取
也可以手动保存:iptables-save> > /etc/sysconfig/iptables
3.添加策略
iptables -A INPUT -i lo -j ACCEPT ##允许访问lo--回环接口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许tcp协议访问22端口--sshd服务
iptables -A INPUT -s IP地址 -j ACCEPT ##允许指定IP访问本机所有端口
iptables -A INPUT -j REJECT ##拒绝所有主机的数据来源
注意:以上命令在实际执行时,并不是按照顺序全部执行,而是按顺序逐条执行,若与命令匹配成功,则不再执行后序命令。
4.测试:在指定的IP主机上,远程连接服务端:ssh [email protected]
在其他IP的主机上远程连接该主机:
在指定IP主机打开firefox,访问:172.25.254.109
在其他主机打开firefox访问:172.25.254.109
也可以在本机通过links命令打开其他IP主机的firewox来访问本机
(1)yum install links -y
(2)links http://172.25.254.90
5.iptables增加链
iptables -N redhat ##增加新链
iptables -E redhat linux ##将redhat链更名为linux
iptables -X 名称 ##删除指定链
6.iptables -t filter -D INPUT 条数
##删除tilter表中INPUT链的指定策略
iptables -t filter -R 链名 第几条 策略
##修改filter表中的指定策略
7.iptables的INPUT链的两种状态
(1)ACCEPT:内部默认接受
(2)DROP:丢弃,不直接拒绝,会一直尝试连接
iptabes -t filter -P INPUT DROP
##修改INPUT链的默认策略为DROP
iptabes -t filter -P INPUT ACCEPT
##修改INPUT链的默认策略为ACCEPT
8.如图示:拒绝所有用户的策略在前,则当有命令执行时将先与该条策略匹配,其后序的允许策略将不再被执行
先允许22端口,再拒绝所有,则匹配到允许22端口后,将不再匹配后序策略,因此可以远程登录172.25.254.109主机--sshd服务;
又因为拒绝所有的策略先于允许172.25.254.90这条策略,所以172.25.254.109主机不能访问访问除22、80外的其他端口
现作如下更改,使得先允许所有接口,再拒绝172.25.254.90访问所有
因为先匹配到允许所有这条策略,因此时可以访问http服务的
9.以上策略在匹配时时按照顺序逐条匹配,其效率低,现使用以下策略,将验证通过的数据包变成RELATED--下次连接时无需匹配验证,直接通过
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
##指定数据包的状态,若为NEW时,通过验证后变成RELATED或ESTABLESHED
iptables -A INPUT -m state --state RELATED -j ACCEPT
##指定数据包状态为RELATED时,无需验证直接通过
四、NAT表
<1>、出站地址伪装--内核处理后的策略
1.设置客户端IP=172.25.9.11
网关=172.25.9.10 ##则172.25.9.10所在主机可以作为路由
子网掩码=24
2.在服务器端--有两块网卡,且不在同一网段,更改内核路由功能状态
sysctl -a | grep forward ##查看内核路由状态
echo "net.ipv4.ip_forward =1" >>/etc/sysctl.conf
##开启内核路由功能,永久设定(一定使用追加的方式进行更改)
sysctl -p ##使修改文件生效
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.109
##出站地址伪装成172.25.254.109
3.在客户端测试
(1)ping 172.25.254.9 ##若能ping通,则更改成功
(2)ping 不通时先检查icmp_echo_ignore_all的状态,为开启状态即=1时,可使用ping命令。
cd /proc/sys/net/ipv4
sysctl -a | grep icmp_echo_ignore_all ##查看状态
echo 1 > icmp_echo_ignore_all ##更改状态
再使用ping命令
(3)使用浏览器访文与客户端不在同一网段的主机
<2>、入站地址伪装--内核处理前的策略
1.在服务器端,更改内核路由,见上述过程中的2;
2.在DNAT链中添加策略
Iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.9.10
##先经内核将从eht0口接收的数据包封装成172.25.9.10,再路由给eth1端口
3.测试
172.25.254.90主机远程连接172.25.9.11客户端,显示内容中实际连接的时172.25.9.10--路由端口