Skip to content

Commit f4d5db0

Browse files
committed
use of iptables -C option (and some new locatiosn to address
1 parent ca2f543 commit f4d5db0

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed

services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,8 +531,8 @@ public SecondaryStorageVmVO startNew(long dataCenterId, SecondaryStorageVm.Role
531531

532532
/**
533533
* Get the default network for the secondary storage VM, based on the zone it is in. Delegates to
534-
* either {@link #getDefaultNetworkForZone(DataCenter)} or {@link #getDefaultNetworkForAdvancedSGZone(DataCenter)},
535-
* depending on the zone network type and whether or not security groups are enabled in the zone.
534+
* either {@link #getDefaultNetworkForAdvancedZone(DataCenter)} or {@link #getDefaultNetworkForBasicZone(DataCenter)},
535+
* depending on the zone network type and whether security groups are enabled in the zone.
536536
* @param dc - The zone (DataCenter) of the secondary storage VM.
537537
* @return The default network for use with the secondary storage VM.
538538
*/

services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2287,28 +2287,39 @@ public synchronized String allowOutgoingOnPrivate(String destCidr) {
22872287
if (!_inSystemVM) {
22882288
return null;
22892289
}
2290-
Script command = new Script("/bin/bash", s_logger);
22912290
String intf = "eth1";
2292-
command.add("-c");
2293-
command.add("iptables -D OUTPUT -o " + intf + " -d " + destCidr + " -p tcp -m state --state NEW -m tcp -j ACCEPT");
2291+
String rule = String.format("OUTPUT -o %s -d %s -p tcp -m state --state NEW -m tcp -j ACCEPT", intf, destCidr);
22942292

2295-
/* ignore the String result =*/ command.execute();
2296-
2297-
command = new Script("/bin/bash", s_logger);
2298-
command.add("-c");
2299-
command.add("iptables -I OUTPUT -o " + intf + " -d " + destCidr + " -p tcp -m state --state NEW -m tcp -j ACCEPT");
2293+
if (ruleNeedsAdding(rule)) {
2294+
Script command = new Script("/bin/bash", s_logger);
2295+
command.add("-c");
2296+
command.add("iptables -I");
2297+
command.add(rule);
23002298

2301-
String result = command.execute();
2302-
if (result != null) {
2303-
s_logger.warn("Error in allowing outgoing to " + destCidr + ", err=" + result);
2304-
return "Error in allowing outgoing to " + destCidr + ", err=" + result;
2299+
String result = command.execute();
2300+
if (result != null) {
2301+
s_logger.warn("Error in allowing outgoing to " + destCidr + ", err=" + result);
2302+
return "Error in allowing outgoing to " + destCidr + ", err=" + result;
2303+
}
2304+
} else {
2305+
s_logger.warn("Rule already defined in SVM: Error in allowing outgoing to " + destCidr);
23052306
}
23062307

23072308
addRouteToInternalIpOrCidr(_localgw, _eth1ip, _eth1mask, destCidr);
23082309

23092310
return null;
23102311
}
23112312

2313+
private boolean ruleNeedsAdding(String rule) {
2314+
Script command = new Script("/bin/bash", s_logger);
2315+
command.add("-c");
2316+
command.add("iptables -C");
2317+
command.add("rule");
2318+
2319+
String r1 = command.execute();
2320+
return (r1 != null && r1.contains("iptables: Bad rule (does a matching rule exist in that chain?)."));
2321+
}
2322+
23122323
private Answer execute(SecStorageFirewallCfgCommand cmd) {
23132324
if (!_inSystemVM) {
23142325
return new Answer(cmd, true, null);
@@ -2838,16 +2849,16 @@ private void startAdditionalServices() {
28382849
if (result != null) {
28392850
s_logger.warn("Error in starting sshd service err=" + result);
28402851
}
2841-
command = new Script("/bin/bash", s_logger);
2842-
command.add("-c");
2843-
command.add("iptables -D INPUT -i eth1 -p tcp -m state --state NEW -m tcp --dport 3922 -j ACCEPT");
2844-
/* ignore result = */ command.execute();
2845-
command = new Script("/bin/bash", s_logger);
2846-
command.add("-c");
2847-
command.add("iptables -I INPUT -i eth1 -p tcp -m state --state NEW -m tcp --dport 3922 -j ACCEPT");
2848-
result = command.execute();
2849-
if (result != null) {
2850-
s_logger.warn("Error in opening up ssh port err=" + result);
2852+
String rule = "INPUT -i eth1 -p tcp -m state --state NEW -m tcp --dport 3922 -j ACCEPT";
2853+
if (ruleNeedsAdding(rule)) {
2854+
command = new Script("/bin/bash", s_logger);
2855+
command.add("-c");
2856+
command.add("iptables -I");
2857+
command.add(rule);
2858+
result = command.execute();
2859+
if (result != null) {
2860+
s_logger.warn("Error in opening up ssh port err=" + result);
2861+
}
28512862
}
28522863
}
28532864

services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
10831083
}
10841084

10851085
private void blockOutgoingOnPrivate() {
1086+
// TODO add a check if rule exists
10861087
Script command = new Script("/bin/bash", LOGGER);
10871088
String intf = "eth1";
10881089
command.add("-c");
@@ -1122,6 +1123,7 @@ private void startAdditionalServices() {
11221123
String port = Integer.toString(TemplateConstants.DEFAULT_TMPLT_COPY_PORT);
11231124
String intf = TemplateConstants.DEFAULT_TMPLT_COPY_INTF;
11241125

1126+
// TODO add a check if rule exists
11251127
command = new Script("/bin/bash", LOGGER);
11261128
command.add("-c");
11271129
command.add("iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j ACCEPT;" + "iptables -I INPUT -i " + intf +

0 commit comments

Comments
 (0)