Linux 防火墙 iptables 和 firewalld

如何安装iptables

每个Linux内核都带有iptables,在大多数Linux系统上,iptables安装在 /usr/sbin/iptables 目录中。也可以在 /sbin/iptables 中找到它。

Ubuntu和Debian 

apt-get install iptables


CentOS

yum install iptables-services


RHEL

yum install iptables


iptables版本


要知道iptables版本,请在终端中键入以下命令。

iptables --version

 


启动和停止iptables


OpenSUSE 42.1

停止:

/sbin/rcSuSEfirewall2 stop

重新启动:

/sbin/rcSuSEfirewall2 start

 


Ubuntu

停止:

service ufw stop

重新启动:

service ufw start

 


Debian和RHEL

停止:

/etc/init.d/iptables stop

重新启动:

/etc/init.d/iptables start


CentOS

停止:

service iptables stop

重新启动:

service iptables start


获取所有iptables规则列表


要了解您的iprables中当前存在并处于活动状态的所有规则,只需打开终端并输入以下内容。

iptables -L


如果iptables上没有规则退出,则意味着如果iptables防火墙中到目前为止还没有添加规则,您将看到类似下图的内容。

在上面的这张图中,您可以看到,共有三个chain ,它们分别是INPUT,FORWARD,OUTPUT,并且不存在任何规则。实际上我还没有添加。

输入以下内容以了解iptables防火墙链的状态。

iptables -S

使用以上命令,您可以了解chain 是否正在接受。

 

清除所有iptables规则


要清除iptables防火墙中的所有规则,请键入以下内容。这通常称为刷新iptables规则。

iptables -F


如果要仅刷新INPUT chain 或任何单个chain,请根据需要发出以下命令。

iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

 


ACCEPT or DROP Chain


要接受或丢弃特定的chain,输入以下任何命令以满足您的要求。

iptables --policy INPUT DROP


上面的规则将不接受传入该服务器的任何内容。要将其重新还原为接受,请执行以下操作

iptables --policy INPUT ACCEPT


其他chain也一样

iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP


注意:默认情况下,所有iptables chain (INPUT,OUTPUT,FORWARD)都处于接受模式。这是chain的默认策略。

 

允许任何端口


如果您在主机上运行任何Web服务器,则必须允许iptables防火墙,以便服务器侦听或响应端口80。默认情况下,Web服务器运行在端口80上。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT


在上面的行中,A代表添加意味着我们要向iptables列表添加一个新规则。INPUT代表INPUT链。P代表协议,dport代表目的端口。默认情况下,任何Web服务器都在端口80上运行。类似地,您也可以允许SSH端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT


默认情况下,SSH在端口22上运行。但是,最好不要在端口22上运行SSH。请始终在其他端口上运行SSH。要在其他端口上运行SSH,请在您喜欢的编辑器上打开 /etc/ssh/sshd_config 文件,并将端口22更改为其他端口。

 

阻塞任何端口


假设我们要阻止端口135。

iptables -A INPUT -p tcp --dport 135 -j DROP


如果要阻止服务器启动从该服务器到另一台主机/服务器的任何SSH连接,请发出以下命令

iptables -A OUTPUT -p tcp --dport 22 -j DROP


这样一来,没有人可以使用您的服务器从服务器启动SSH连接。OUPUT chain 将过滤并丢弃到另一个主机的任何传出tcp连接。

 

允许特定IP端口

iptables -A INPUT -p tcp -s 0/0 --dport 22  -j ACCEPT


-s 0/0表示任何IP地址的任何传入源。因此,您的服务器无法响应目标端口为22的tcp数据包。如果只允许任何特定IP,则使用以下IP。

iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT


在上面的示例中,您仅允许使用12.12.12.12 IP地址连接到端口SSH。其余IP地址将无法连接到端口22。类似地,您可以使用CIDR值来允许。如

iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j ACCEPT

上面的例子显示了如何允许IP段接受端口22上的连接。它将接受从12.12.12.1到12.12.12.255开始的IP。

如果要阻止此类IP地址范围,请执行以下相反操作,将DROP替换为ACCEPT,如下所示:

iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP


因此,将不允许在端口22上从12.12.12.1到12.12.12.255 IP地址进行连接。

 

阻止ICMP


如果要阻止往返于服务器上的ICMP(ping)请求,可以尝试以下操作。第一个将阻止不向另一个主机发送ICMP ping回显请求。

iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP


现在,尝试ping baidu.com。您的OpenSUSE服务器将无法ping baidu.com。

如果要阻止服务器的传入ICMP(ping)回显请求,只需在终端上键入以下内容。

iptables -I INPUT -p icmp --icmp-type 8 -j DROP


现在,它不会回复任何ICMP ping回显请求。假设您的服务器IP地址为13.13.13.13。而且,如果您ping 服务器IP,则将看到服务器没有响应该ping请求。

 

阻止MySql / MariaDB端口


由于Mysql正在保存您的数据库,因此您必须保护数据库免受外部连接的影响。只允许您信任的应用程序服务器IP地址与MySQL服务器连接。阻止其他

iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT


因此,除192.168.1.0/24 IP块外,它将不进行任何MySql连接。默认情况下,MySql在3306端口上运行。

 

阻止SMTP


如果未在主机服务器上运行任何邮件服务器,或者未将服务器配置为充当邮件服务器,则必须阻止SMTP,以便服务器不会向任何域发送任何垃圾邮件或任何邮件。您必须执行此操作以阻止来自服务器的所有外发邮件。为此,

iptables -A OUTPUT -p tcp --dport 25 -j DROP


阻止DDoS


我们都熟悉术语DDoS。要摆脱它,请在终端中发出以下命令。

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT


您需要配置数值以满足您的要求。这只是维护的标准。

您可以通过以下方式保护更多

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling 
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog


阻止端口扫描


外面有数百人扫描服务器的开放端口,并尝试破坏服务器的安全性。阻止它

iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN


在这里,块扫描是新chain的名称。

 

阻止坏端口


您可能还需要为服务器阻塞一些错误的端口。这是您可以执行的操作。

badport="135,136,137,138,139,445"
iptables -A INPUT -p tcp -m multiport --dport $badport -j DROP
iptables -A INPUT -p udp -m multiport --dport $badport -j DROP


您可以根据需要添加更多端口。

 

什么是firewalld?


Firewalld提供了动态托管的防火墙,并支持网络/防火墙区域,该区域定义了网络连接或接口的信任级别。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。

具有system-config-firewall / lokkit的以前的防火墙模型是静态的,每次更改都需要重新启动防火墙。这还包括卸载防火墙netfilter内核模块和加载新配置所需的模块。模块的卸载破坏了状态防火墙和已建立的连接。另一方面,防火墙守护程序动态管理防火墙并应用更改,而无需重新启动整个防火墙。因此,无需重新加载所有防火墙内核模块。但是,使用防火墙守护程序需要对所有守护程序进行所有防火墙修改,以确保该守护程序中的状态与内核中的防火墙处于同步状态。防火墙守护程序无法解析iptables和ebtables命令行工具添加的防火墙规则。

因此,firewalld使用区域和服务而不是链和规则来执行操作,并且它可以动态管理规则,从而允许更新和修改而不会破坏现有的会话和连接。

它具有以下功能。

D-Bus API。
定时防火墙规则。
用于特定防火墙规则的丰富语言。
IPv4和IPv6 NAT支持。
防火墙区域。
IP设置支持。
拒绝数据包的简单日志。
直接界面。
锁定:将可能修改防火墙的应用程序列入白名单。
支持iptables,ip6tables,ebtables和ipset防火墙后端。
自动加载Linux内核模块。
与Puppet集成。
要了解有关firewalld的更多信息,请访问官网

 

如何安装firewalld


在安装firewalld之前,请确保停止iptables,并确保iptables不在运行并且不再使用,

systemctl stop iptables


这将从您的系统停止iptables。

然后通过在终端中发出以下命令,确保系统不再使用iptables。

systemctl mask iptables


现在,检查iptables的状态。

systemctl status iptables


现在,我们准备将firewalld安装到我们的系统上。

Ubuntu

要在Ubuntu上安装它,必须先删除UFW,然后才能安装Firewalld。要删除UFW,请在终端上发出以下命令。

apt-get remove ufw


删除UFW之后,在终端中发出以下命令

apt-get install firewall-applet


要么

您可以打开Ubuntu软件中心,查找或搜索“防火墙小程序”,然后将其安装到Ubuntu系统上。

RHEL,  CentOS和  Fedora

输入以下命令以在CentOS系统上安装firewalld。

yum install firewalld firewall-config -y


如何配置firewalld


在配置firewalld之前,我们必须在安装后了解firewalld的状态。要知道这一点,请键入以下内容。

systemctl status firewalld


 

由于firewalld基于区域工作,因此我们需要检查所有区域和服务,尽管我们尚未进行任何配置。

对于Zones

firewall-cmd --get-active-zones

要么

firewall-cmd --get-zones


 

要了解默认区域,请发出以下命令

firewall-cmd --get-default-zone

 

并且,对于Services

firewall-cmd --get-services


在这里,您可以看到firewalld涵盖的那些服务。

 

设置默认区域


重要说明是,每次修改之后,您都需要重新加载防火墙,以便进行更改。

设置Default Zone

firewall-cmd --set-default-zone=internal


或者

firewall-cmd --set-default-zone=public


更改区域后,检查其是否更改。

firewall-cmd --get-default-zone


在 Public Zone添加端口

 

firewall-cmd --permanent --zone=public --add-port=80/tcp


这将在firewalld的公共区域中添加TCP端口80。您也可以通过将80替换为所需的端口来添加所需的端口。

现在重新加载防火墙。

firewall-cmd --reload


现在,检查状态以查看是否已添加tcp 80端口。

firewall-cmd --zone=public --list-ports


在这里,您可以看到已添加了TCP端口80。

甚至您也可以尝试类似的方法。

firewall-cmd --zone=public --list-all


在 Public Zone删除端口


要从公共区域删除Tcp 80端口,请键入以下内容。

 

firewall-cmd --zone=public --remove-port=80/tcp


您将在终端中看到“成功”文本回显。

您也可以通过用自己的端口替换80来放置所需的端口。

 

在Firewalld中添加Services


要在firewalld中添加ftp服务,请发出以下命令

firewall-cmd --zone=public --add-service=ftp


您将在终端中看到“成功”文本回显。

同样,要添加smtp服务,请发出以下命令

firewall-cmd --zone=public --add-service=smtp


将ftp和smtp替换为您要在firewalld中添加的自己的服务。

 

在Firewalld中删除Services


要从firewalld中删除ftp&smtp服务,请在终端中发出以下命令。

firewall-cmd --zone=public --remove-service=ftp
firewall-cmd --zone=public --remove-service=smtp


阻止任何传入和传出Packet(s)


如果愿意,可以使用firewalld阻止任何传入或传出的数据包/连接。这称为防火墙的“紧急启动”。为此,发出以下命令。

firewall-cmd --panic-on


您将在终端中看到“成功”文本回显。

完成此操作后,您将无法ping通主机,甚至无法浏览任何网站。

要关闭此功能,请在终端中发出以下命令。

firewall-cmd --panic-off


在Firewalld中添加IP Address

 

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'


这样,firewalld将接受来自源IP 192.168.1.4的IPv4数据包。

 

 

在Firewalld中阻止IP Address


同样,阻止任何IP地址

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" reject'


这样,firewalld将丢弃来自源IP 192.168.1.4的每个IP v4数据包。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值